JavaWeb学习笔记——反射机制

本文介绍了JavaWeb中的反射机制,讲解了Junit单元测试的使用,包括测试注解的运用,如@Ignore、@Before和@After。还探讨了枚举、泛型擦除和可变参数的概念。重点在于反射的原理,包括如何将类加载到内存,以及如何通过Class类获取类的属性、构造方法和普通方法。此外,还提到了如何操作属性、构造方法和普通方法,特别是在静态方法场景下,invoke方法的第一个参数可以传null。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值