B站视频指路:尚硅谷Java入门视频教程(在线答疑+Java面试真题)_哔哩哔哩_bilibili
写在前面:马上秋招,打算从0开始再学一遍Java,开个知识点记录贴,就当做课堂笔记吧.
希望秋招顺利.
枚举类的使用
·如何自定义枚举类
·如何使用关键字enum定义枚举类
·Enum类的主要方法
·实现接口的枚举类
tips:
1.枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类
2.当需要定义一组常量时.强烈建议使用枚举类
3.如果枚举类中只有一个对象,可以使用单例模式的实现方式
枚举类的属性:
1.枚举类对象的属性不应允许被改动,所以应该使用private final修饰
2.枚举类使用private final修饰的属性应该在构造器中为其赋值
3.若枚举类显式的定义了带参数的构造器,则在列举出枚举值时也必须对应的传入参数
如何定义枚举类:
方式一:jdk5.0之前,自定义枚举类(略 现在不用)
方式二:jdk5.0,可以使用enum关键字定义枚举类
使用Enum关键字:定义的枚举类默认继承于java.lang.enum
import org.junit.Test; public class enumTest { @Test public void test(){ Season summer = Season.Summer; System.out.println(summer); System.out.println(Season.class.getSuperclass()); } } //使用enum关键字 //定义的枚举类默认的继承于java.lang.Enum enum Season{ //1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束 Spring("春天","春暖花开"), Summer("夏天","热的一笔"), Autumn("秋天","还是很热"), Winter("冬天","冷一个月"); //2.声明Season对象的属性,private final修饰 private final String name; private final String sytle; //3.私有化类的构造器,并给对象赋值 private Season(String name, String sytle) { this.name = name; this.sytle = sytle; } //4.其它诉求:获取枚举类对象的属性 public String getName() { return name; } public String getSytle() { return sytle; } }
常用到的:
·values()方法:返回枚举类型的对象数组,该方法可以很方便的遍历所有的枚举值
·valueOf(String str):可以把一个字符串转为对应的枚举类对象.要求字符串必须是枚举类对象的"名字",若不是会有运行时的异常
·toString():返回当前枚举类对象常量的名称
import org.junit.Test; public class enumTest { @Test public void test(){ Season summer = Season.Summer; //values() Season[] seasons = Season.values(); for (int i = 0; i < seasons.length; i++) { System.out.println(seasons[i]); } System.out.println("***********************************"); //valueOf(String objName):返回枚举类中对象名是objName的对象 //若没有objName的枚举类对象,则抛异常 Season winter = Season.valueOf("Winter"); System.out.println(winter); //toString():返回当前枚举类对象常量的名称 } } //使用enum关键字 //定义的枚举类默认的继承于java.lang.Enum enum Season{ //1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束 Spring("春天","春暖花开"), Summer("夏天","热的一笔"), Autumn("秋天","还是很热"), Winter("冬天","冷一个月"); //2.声明Season对象的属性,private final修饰 private final String name; private final String sytle; //3.私有化类的构造器,并给对象赋值 private Season(String name, String sytle) { this.name = name; this.sytle = sytle; } //4.其它诉求:获取枚举类对象的属性 public String getName() { return name; } public String getSytle() { return sytle; } }
使用enum关键字定义的枚举类实现接口的情况
1.实现接口,在enum类中实现抽象方法(和普通类实现接口完全一样的写法)
2.让枚举类的对象分别实现接口中的抽象方法
import org.junit.Test; public class enumTest { @Test public void test(){ Season summer = Season.Summer; //values() Season[] seasons = Season.values(); for (int i = 0; i < seasons.length; i++) { seasons[i].show(); } System.out.println("***********************************"); //valueOf(String objName):返回枚举类中对象名是objName的对象 //若没有objName的枚举类对象,则抛异常 Season winter = Season.valueOf("Winter"); System.out.println(winter); //toString():返回当前枚举类对象常量的名称 } } interface info{ void show(); } //使用enum关键字 //定义的枚举类默认的继承于java.lang.Enum enum Season implements info{ //1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束 Spring("春天","春暖花开"){ @Override public void show() { System.out.println("chuntian"); } }, Summer("夏天","热的一笔"){ @Override public void show() { System.out.println("xiatian"); } }, Autumn("秋天","还是很热"){ @Override public void show() { System.out.println("qiutian"); } }, Winter("冬天","冷一个月"){ @Override public void show() { System.out.println("dongtian"); } }; //2.声明Season对象的属性,private final修饰 private final String name; private final String sytle; //3.私有化类的构造器,并给对象赋值 private Season(String name, String sytle) { this.name = name; this.sytle = sytle; } //4.其它诉求:获取枚举类对象的属性 public String getName() { return name; } public String getSytle() { return sytle; } }
注解(Annotation)
·JDK5.0开始,Java增加了对元数据(MetaData)的支持,也就是Annotation
·Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理.通过使用Annotation,程序员可以在不改变其原有逻辑的情况下,载源文件中嵌入一些补充信息.代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署
·Annotation可以像修饰符一样被使用,可以用于修饰包、类、构造器、方法、成员变量、参数、局部变量声明,这些信息被保存在Annotation的"name=value"对中
·一定程度上可以说:框架=注解+反射+设计模式
·在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等.在JavaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版所遗留的繁冗代码和XML配置等
示例:
使用Annotation时要在其前面加@符号,并把该Annotion当成一个修饰符使用,用于修饰它支持的程序元素
1.生成文档相关的注解:
2.在编译时进行格式检查(JDK内置的三个基本注解)
3.跟踪代码依赖性,实现替代配置文件功能
Servlet3.0提供了注解(annotation),使得不需要在web.xml文件中进行Servlet的部署
spring框架中关于"事务"的管理
如何自定义注解:参照@SuppressWarnings定义
·注解声明为:@interface
·自定义注解自动继承了java.lang.annotation.Annotation接口
·Annotation的成员变量在Annotation定义中以无参数方法的形式来声明.其方法名和返回值定义了该成员的名字和类型,我们成为配置参数,类型只能是八种基本数据类型、String类型、Class类型、enum类型、Annotation类型以上所有类型的数组
·可以在定义Annotation的成员变量时为其指定初始值,指定成员变量的初始值可以使用default关键字
·若只有一个参数成员,建议使用参数名为:value
·若定义的注解含有配置参数,那么使用时必须指定参数值,除非它有默认值.格式为"参数名=参数值",若只有一个参数成员,且名字为value,可以省略"value="
·没有成员定义的Annotation称为标记,包含成员变量的Annotation称为元数据Annotation
tips:自定义注解必须配上注解的信息处理流程(使用反射)才有意义
·自定义注解通常都会指明两个元注解:Retention、Target
public @interface zk { String value(); }
JDK中提供的4个基本的元注解
·元注解:对现有注解进行解释说明的注解
·JDK的元Annotation用于修饰其他Annotation定义
·JDK5.0提供了4个标准的meta-annotation类型,分别是:
1.Retention
2.Target
3.Documented
4.Inherited
通过反射获得注解信息(后面讲到反射再讲)
jdk 8 中注解的新特性:可重复注解、类型注解
·可重复注解
1.在MyAnnotation上声明@Repratable,成员值为MyAnnotation.class,
2.MyAnnotation的Target、Retention等元注解和MyAnnotation相同