java反射获得构造方法_java反射之构造器

4f00ead17d66

image.png

清晨阳光正好,独自一人漫步于山间中,这里少了嘈杂的喧闹声,多了份安宁祥和,有的是溪水的咚咚声,小鸟的欢快声,迎面走去,微风吹来夹杂了泥土的味道和扑鼻的花香味,感受到了大自然的......在这里祝各位老铁五一节玩的开心,此生有机会欢迎来我们大西北,感受不一样的人情风土,体验真正人生百态,可以了,我们今天来了解反射里如何获取一个类的构造器和创建对象。

如何获取构造器

> 要获取构造器我们还需用到上节所讲的class类,所以我们通过class类来获取构造器。

public Constructor>[]getConstructors();该方法只能获取Class所表示类的public修饰的构造器。

2. public Constructor>[]getDeclaredConstructors()

获取当前class所表示类的所有构造器,和访问权限无关。

3.publicConstructorgetConstructor(Class>...parameterTypes);

获取当前class所表示类的指定的public修饰的构造器。

其中 参数parameterTypes表示:构造器参数的类型如:

public User(String name)

4.publicConstructorgetDeclaredConstructor(Class>...ParameterTypes);

获取当前class所表示类的指定的一个构造器,与访问权限无关。接下来我们分别来看。

为了获取构造器,我在这里创建了一个User类。

代码如下:

class User {

public User() {

}

public User(String name) {

}

private User(String name, int age) {

}

从这里看到,创建三个构造方法,公共的无参和有参,以及私有的有参。

方式一:

定义一个获取所有的构造器方法

private static void getAll() {

获取User类的字节码

Class clazz = User.class;

返回的公共类型的构造方法

Constructor>[] constructors = clazz.getConstructors();

for (Constructor> con : constructors) {

System.out.println(con);

}

System.out.println("======================================");

返回所有的构造器,与访问权限无关

Constructor>[] declaredConstructors = clazz.getDeclaredConstructors();

for (Constructor> cons : declaredConstructors) {

System.out.println(cons);

}

}

上面的方法返回的都是所有的构造器,我们通过遍历并打印出了结果:

打印结果如下:

4f00ead17d66

QQ截图20180501230210.png

上图是我们打印的结果,我们拿到了该类的所有构造器,接下来我们看如何获取单个构造器。

方式二:

我在这里定义了一个名叫getOne()的方法:

代码示例:

private static void getOne() throws Exception{

获取构造器所在类的的字节码对象

Class clazz = User.class;

获取无参构造器

Constructor con = clazz.getConstructor();

System.out.println(con);

System.out.println("===================");

获取公共方法有参构造器

Constructor constructor = clazz.getConstructor(String.class);

System.out.println(constructor);

System.out.println("----------------------------------------");

获取私有构造器

Constructor de = clazz.getDeclaredConstructor(String.class, int.class);

System.out.println(de);

}

打印结果如下:

4f00ead17d66

QQ截图20180501234653.png

从上述打印结果来看,我们拿到了该类的所有构造器。

讲完了如何获取一个类的构造器,接下来我们来看看如何

创建对象,都知道构造器的最大作用就是用来创建对象,这是我们后面框架中的东西,不在new对象,而是通过反射来创建对象,因为在框架中给我们提供的都是字符串。

利用反射来创建对象:

> 具体的每一步如下:

1.首先还是要找到构造器所在类的字节码对象

2.获取构造器

3.使用反射创建对象

代码示例如下:

我在这里创建了一个Student类

class Student{

public Student(){

System.out.println("无参构造器");

}

public Student(String name) {

System.out.println("有参构造器"+name);

}

private Student(String name,int age) {

System.out.println("有参构造器"+name+","+age);

}

以下用来如何创建对象:

public static void main(String[] args)throws Exception {

普通的创建对象

/*new Student();*/

通过构造器来创建对象

1.首先来获取构造器对象的字节码对象

Class clazz = Student.class;

2.调用无参构造器

Constructor con = clazz.getConstructor();

3.调用newInstance方法来创建

con.newInstance();

System.out.println("=============================");

调用公共有参构造器

con = clazz.getConstructor(String.class);

con.newInstance("哈哈");

System.out.println("===============================");

调用私有构造器

con = clazz.getDeclaredConstructor(String.class,int.class);

设置允许访问私有构造器

con.setAccessible(true);

调用newInstance方法

con.newInstance("啦啦",17);

}

注意:在调用私有的无参构造器时,首先要设置允许此操作,如con.setAccessible(true);设置为true,如不设置,会报java.lang.IllegalAccessException非法的访问异常,所以要注意这一点。

打印结果如下:

4f00ead17d66

QQ截图20180502000911.png

以上截图就是打印的结果,关于利用反射拿到构造器和创建对象我们说到这里,最后一句衷心得问候,老铁们晚安!!!!,欢迎骚扰。假期愉快的结束了,该继续打鱼升级了........

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值