Java反射

反射

Java中,每一个类产生一个.class文件,产生一个class对象。反射就是我们拿到这个class对象,通过反射来获取类的信息。

:Class对象:任何一个 类都有一个class隐含的静态成员变量class,这个class就指向JVM中的那个类的class。)

1,三种获取class对象的方法

Student s1 = new Student();

//1.s1.getClass()     

Class c1 = s1.getClass();

//2.直接通过 类名.class 安全可靠

//说明任何一个类都有一个隐含的静态成员变量 class

Class c2 = Student.class;

//通过 Class 对象的 forName() 静态方法来获取

//可能要抛出异常ClassNotFoundException

Class c3 = Class.forName("com.tulun.src.Student"); 

一个类型         对应一个Class对象---》类型一一对应的

System.out.println(c1.equals(c2));

System.out.println(c1.equals(c3));

System.out.println(c3.equals(c2));

2class的一些方法

查阅 API 可以看到 Class 有很多方法:

getName():获得类的完整名字。

getFields():获得类的public类型的属性。

getDeclaredFields():获得类的所有属性。包括private 声明的和继承类

getMethods():获得类的public类型的方法。

getDeclaredMethods():获得类的所有方法。包括private 声明的和继承类

getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,

    parameterTypes 参数指定方法的参数类型。

getConstructors():获得类的public类型的构造方法。

getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。

newInstance():通过类的不带参数的构造方法创建这个类的一个对象。

 

1getName()

String name1 = c1.getName();

System.out.println(name1);


2getField()获取类的public属性

Field[] f1 = c1.getFields();

System.out.println(Arrays.toString(f1));


3//getDeclaredMethods() 获取类的所有方法

Method[] m = c1.getDeclaredMethods();

System.out.println(Arrays.toString(m));

4//getConstructors() 获取类的public构造方法

Constructor[] c = c1.getConstructors();

System.out.println(Arrays.toString(c));

3,反射的不安全之处

     可以获取类的私有属性并进行更改!!!

Field f = c1.getDeclaredField("name");

 f.setAccessible(true);//通过这一句给其设置了可见性

 Object p = c1.newInstance();//获取此类的一个对象

 f.set(p, "haha");//改变原来的私有属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值