Junit的使用
单元测试
public void 方法名(){}
@Test
@Ignore表示不进行单元测试
@before每个方法之前运行
@After每个方法之后运行
断言 Assert.asseertEquals 运行通过、运行不通过
枚举
jdk5.0新特性enum
name
ordinal
valueOf
values得到枚举数组
泛型的擦除
可变参数
(int...nums)
反射
框架底层实现
在框架开发中,都是基于配置文件开发
配置文件配置了类,通过反射得到类中所有内容,可以让类中的某个方法来执行
***!!!!重点
*首先需要把java文件保存到本地硬盘 .java
*编译java文件,成.class文件
*使用jvm,把class问价能通过类加载到内存中
*万事万物都是对象,class文件在内存中使用class类表示
*当使用反射时,首先需要获取到class类,得到了这个类之后,就可以得到class文件里面的所有内容
-包含属性 构造方法 普通方法
*属性通过一个类 Filed
*构造方法通过一个类 Constructor
*普通方法通过一个类 Method
获取class类 例:
类名。class
对象。getclass
forname方法
Class clazz1=Person.class;
Class clazz2=new Person.getClass();
Class clazz3=Class.forName(""); //类名右键qualityName
要对一个类进行实例化,可以new,不使用new怎么获取?
//操作无参数的构造方法
Class c3 = Class.forName("");
Person p = (Person) c3.newInstance();
//操作有参数的构造方法
Class c1 = Class.forName("");
//获取所有的构造方法
//传递是由参数的构造方法里面参数类型,类型使用Class形式传递
Constructor cs = c1.getConstructors(String.Class,String.Class);
Person p1 = (Person) cs.newInstance("lisi","100");
类型使用class形式传递,所以本来传递的是String类型,要将String编程String类进行传递
操作属性
//得到Class类
Class c2 = Class.forName("");
//得到name属性
//得到Person类的实例
Field f1 = c2.getDeclaredField("name");
Person p11 = (Person) c2.newInstance();
//设置可以操作私有属性
f1.setAccessible(true);
//设置name值
f1.set(p11,"wangwu"); //set(obj,) 相当于p.name = "wangwu"
使用泛型操作普通方法
//得到class类
Class c4 = Class.forNamr("");
Person p4 = (Person) c4.newInstance();
//得到普通方法
Method m1 = c4.getDeclaredMethod("setName",String.class);
//使用invoke,第一个参数传递Person实例,第二个参数要设置的值
m1.invoke(p4,"niuqi");
当我们操作的方法是静态的方法,使用反射操作静态方式的时候不需要实例
invoke的第一个参数里面写一个null
invoke(null,”niuqi“);