java 反射 内部类_JAVA内部类的反射应用

JAVA内部类的反射应用

反射:可以理解为因为java文件都是需要加载到JVM中,然后由JVM根据需要去调用编译后的class文件,每个class文件都对应一个Class对象。换句话说,我们可以动态的在运行的程序中根据Class对象去获得它所有的方法,类,对象,属性等。

我们知道,类是由类名去声明,包含成员方法,成员属性,构造方法,而处处是对象的概念,类的成员方法由Method,成员属性由Field,构造方法由Constructor来分别表示。

例如:

public class  Demo{

//成员属性

public int age;

private String name;

//构造方法

public  Demo(){}

private Demo(String name.int age){

this.age=age;

this.name=name;

}

//成员方法

public void setAge(int age){

this.age=age;

}

private String getName(){

return this.name;

}

//内部类

class Demointo{

private String name;

Demointo(){}

private Demointo(String name){

this.name=name;

System.out.println(this.name);

}

}

public static void main(String[] args){

Class demo=Class.forName("Demo");//这里要注意输入类的全称,带包名,否则找不到

//注意getDeclaredConstructor用来获得private,public,protected的构造方法。

Constructor  con=demo.getDeclaredConstrutor(String.class,int.class);

//注意如果是内部类的话,类名是外部类$内部类名 (可以写个带内部类的去编译运行下,然后找到class文件,看看它的名称)

Class  demointo=Class.forName("Demo$Demointo");

//获得内部类的构造方法对象,因为内部类的实例是需要先实例外部类的,所以必须带上外部类的实例

Construtor con1=demointo.getDeclaredConstructor(Class.forName("Demo"),String.class);//断点1

//获得内部类的对象

Object obj=con1.newInstance(demo.newInstance,"ceshi");

---------------------------

输出:ceshi

总结:也就是说当我们去需要得到内部类的对象时,必须跟上外部类的对象,也和我们不用反射时的语法一样,内部类 内部类名=new 外部类(参数).new 内部类(参数);

其实在断点1这里只需要是外部类的Class对象就行,也可以直接写Demo.class或者demo.newInstance().getClass()

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值