第五阶段-jdk新特性及反射
一、jdk新特效
1.泛型*
a.泛型编程关键掌握两点:
1.在方法参数中使用通配符
2.在方法的参数类型和返回类型中使用通用类型
2.枚举
a.对象的某个属性的值不能是任意的,必须为固定的一组取值其中的某一个
3.静态导入
a.导入了类中的所有静态成员,简化静态成员的书写
4.自动拆装箱*
a.java中数据类型分为两种 : 基本数据类型 引用数据类型(对象)
b.ava程序中所有的数据都需要当做对象来处理,针对8种基本数据类型提供了包装类
-int --> Integer
-byte --> Byte
-short --> Short
-long --> Long
-char --> Character
-double --> Double
-float --> Float
-boolean --> Boolean
5.增强for循环*
for( 元素类型 变量名 :Collection集合 & 数组 ) {
…..
}
6.可变参数
a.用到函数的参数上,当要操作的同一个类型元素个数不确定的时候
可是用这个方式,这个参数可以接受任意个数的同一类型的数据。
b.如果在参数列表中使用了可变参数,可变参数必须定义在参数列表结尾
(也就是必须是最后一个参数,否则编译会失败。)
二、反射
1.反射的原理
a.需要把java文件保存本地硬盘.java
b.编译java文件,.class
c.使用jvm,把class文件通过类加载到内存中
d.class文件在内存中使用class类表示
2.反射的属性与方法
a.属性通过一个类: Filed
b.构造方法通过一个类: Constructor
c.普通方法通过一个类: Method
3.反射操作类里面的属性
a.获取class类
Class calsstest = Person.class;
Class calsstest1 = new Person().getClass();
Class calsstest2 = Class.forName("cn.itcase.Person");
注:要对一个类进行实例化,可以new,如果不使用new,用反射
b.操作无参数的构造方法(代码)
public void test1 throws Exception{
//得到class
Class calsstest2 = Class.forName("cn.itcase.Person");
//得到Person 类的实例
Person p = (Person)c3.newInstance();
//设置值
p.setName("zhangsan");
System.out.prrint(p.getName());
}
c.操作有参的构造
public void test2() throws Exception{
Class c1 = Class.forName("cn.itcase.Person");
Constructor cs = c1.getConstructor
(String.class,String.class);
//通过有参数的构造方法创建Person实例
Person p1 = (Person)cs.newInstance("lisi","100");
System.out.println(p1.getId()+" "+p1.getName);
}
e.使用Method类表示普通方法
public void test4() throws Exception{
Class c4 = Class.forName("cn.itcase.Person");
Person p4 = (Person)c4.newInstance();
//得到所有普通方法
//c4.getDeclaredMethods();
Method m1 = c4.getDeclaredMethod("setName",String.class);
m1.invoke(p4,"niqui");
System.out.println(p4.getName());
f.操作name属性
public void test3(){
try{
Class c2 = class.forName("cn.itcase.Person");
Person p11 = (Person)c2.newInstance();
Field f1 = c2.getDeclaredField("name");
//操作私有属性
f1.setAccessible(true);
f1.set(p11,"wangwu");
System.out.println(f1.get(p11));
}
}