枚举的方法 enum
name:返回枚举的名称
ordinal:返回枚举的下标
valueof(String name):得到枚举对象
自动拆装箱
装箱:把基本数据类型转换成包装类
如 Integer i=10
拆箱:把包装类转换成基本数据类型
如 int m =i
jdk特点:向下兼容,比如jdk1.4里面的代码可以在1.5实现,而1.5的却不一定在1.4实现
可变参数运用场景:如果有多个参数相加,就可以使用(逻辑相同,传递参数不同)
格式:数据类型…名称
如 public static void (int…nums) {}
注意事项:
- 需要写在方法的参数列表中,不能单独定义
- 在方法的参数列表中只能有一个可变参数
- 方法的参数列表中的可变参数
反射 框架大部分是用反射来实现的
原理:
a、首先把java文件保存到本地硬盘 .java
b、编译java文件, 变成.class文件
c、使用jvm,把class文件通过类加载到内存中
d、class文件在内存中使用Class类表示
e、当使用反射时,首先需要获取到Class类型,得到了这个类之后,就可以得到class文件里面的所有内容:属性、构造方法、普通方法
属性:Field
有参构造方法:Constructor
普通方法:Method
使用反射获取里面的属性 通过getXXX和setXXX、无参、带参、private这个
- 首先获取到Class类
3种方法
Class cl1 = Person.class;
Class cl2 = new Person().getClass();
Class cl3 = Class.forName(“cn.itcast.test09.Person”); 大部分用这个
这个路径右键Person的copy下面的copy Q ualifield Name
操作无参数的构造方法
Class cl4 = Class.forName(“cn.idcast.Person”);
Person p = (Person) cl4.newInstance(); 实例化
操作有参数的构造方法
Class cl4 = Class.forName(“cn.idcast.Person”);
Constructor c = cl4.getConstructor(String.class,String.class); //传递是有参数的构造方法里面的参数类型,类型使用class形式传递
如这个构造方法里面的参数类型都是String
Person p = (Person) c.newInstance(“lisi”,“100”); //传递的参数分别是构造方法里面的数据,自己设置
操作属性类
Class c2 = Class.forName(“cn.idcast.Person”);
Person p = (Person) c2.newInstance();
Field f1 = c2.getDeclaredField(“name”); getDeclaredField得到属性
f1.setAccessible(true); 设置可以操作私有属性
f1.set(p,“王五”); 设置name值 第一个参数是实例,第二个参数是设置的值
Sysetem.out.println(f1.get(p));
操作普通方法
Class c2 = Class.forName(“cn.idcast.Person”);
Person p = (Person) c2.newInstance();
Method m1= c2. getDeclaredMethod(“setName”,String.class);
m1.invoke(p,“niupi”); 传递2个参数:person实例、设置的值
Sysetem.out.println(p.getName()); 获得实例的值
当操作的方法是静态方法时候,那么就不需要类的实例,直接使用类名.方法名
反射使用操作静态方法的话 m1.invoke(null,“niupi”);