1、枚举
1.1、简介
JDK1.5引入了新的类型——枚举。
在JDK1.5 之前,我们定义常量都是: public static fianl.... 。很难管理。
枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
用于定义有限数量的一组同类常量,例如:
错误级别:
低、中、高、急
一年的四季:
春、夏、秋、冬
商品的类型:
美妆、手机、电脑、男装、女装...
在枚举类型中定义的常量是该枚举类型的实例。
1.2三种定义枚举方法
方法一
public class Text1 {
//类名.
public static final Text1 LOW = new Text1(1);
public static final Text1 MEDNUM = new Text1(50);
public static final Text1 HIGH = new Text1(100);
private int levelValue;
// 私有封装,防止别人改级别
private Text1(int levelValue){
this.levelValue = levelValue;
}
public int getLevelValue() {
return levelValue;
}
public void setLevelValue(int levelValue) {
this.levelValue = levelValue;
}
}
方法二
public enum Text2{
LOW(1),MEDNUM(50),HIGH(100);
private int levelValue;
private Text2(int levelValue){
this.levelValue = levelValue;
}
public int getLevelValue() {
return levelValue;
}
public void setLevelValue(int levelValue) {
this.levelValue = levelValue;
}
}
方法三
public enum Text3 {
LOW,MEDNUM,HIGH;
}
1.3枚举类的主要方法
2、注解
2.1、简介
Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。
(给机器看的注释机制,原先的注释在java文件中,在class就没了,而注解可以)
Java 语言中的类、方法、变量、参数和包等都可以被标注。和注释不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。
主要用于:
1.编译格式检查
2.反射中解析
3.生成帮助文档
4.跟踪代码依赖等
2.2、内置注解(系统已经存在的注解)
2.3、元注解
作用在其他注解的注解
2.4.2、有哪些?
3、反射
3.1、概述
JAVA反射机制是在运行状态中,获取任意一个类的结构 , 创建对象 , 得到方法,执行方法 , 属性 !;
这种在运行状态动态获取信息以及动态调用对象方法的功能被称为java语言的反射机制。
3.2、得到Class的几种方式
1. 如果在编写代码时, 指导类的名称, 且类已经存在, 可以通过
包名.类名.class 得到一个类的 类对象
2. 如果拥有类的对象, 可以通过
Class 对象.getClass() 得到一个类的 类对象
3. 如果在编写代码时, 知道类的名称 , 可以通过
Class.forName(包名+类名): 得到一个类的 类对象
上述的三种方式, 在调用时, 如果类在内存中不存在, 则会加载到内存 ! 如果类已经在内存中存在, 不会重复加载, 而是重复利用 !
(一个class文件 在内存中不会存在两个类对象 )
特殊的类对象
基本数据类型的类对象:
基本数据类型.clss
包装类.type
基本数据类型包装类对象:
包装类.class
public static void main(String[] args) throws ClassNotFoundException {
//第一种加载到内存的方法,通过包名.类名.class来加载类
Class<Person8> c1 = Person8.class;
System.out.println(c1);
//第二种方式,通过类的对象获取类的信息
Person8 p = new Person8() ;
Class<Person8> c2 = (Class<Person8>) p. getClass();
System . out. println(c2);
//第三种方式 可以在类不存在的时候使用(动态编程)必须保证在运行之前代码类已经存在了
Class<Person8> person8Class = (Class<Person8>) Class.forName("com.kaikeba.text4_9.Person8");
System. out . println(person8Class);
System . out . println((c1 == c2) & (c1 == person8Class));
}
3.3获取constructor
3. 获取所有权限的单个构造方法
getDeclaredConstructor(参数类型的class对象数组)
4. 获取所有权限的构造方法数组
getDeclaredConstructors();