JDK5以后的新特性

时间:2022-01-28 15:17:05

       枚举的方法   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”);