JavaWeb学习笔记——反射机制

 

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“);

猜你喜欢

转载自blog.csdn.net/TangXiaoPang/article/details/86664308