概述
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);
}
}
上面的方法返回的都是所有的构造器,我们通过遍历并打印出了结果:
打印结果如下:
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);
}
打印结果如下:
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非法的访问异常,所以要注意这一点。
打印结果如下:
QQ截图20180502000911.png
以上截图就是打印的结果,关于利用反射拿到构造器和创建对象我们说到这里,最后一句衷心得问候,老铁们晚安!!!!,欢迎骚扰。假期愉快的结束了,该继续打鱼升级了........
最后
以上就是精明项链为你收集整理的java反射获得构造方法_java反射之构造器的全部内容,希望文章能够帮你解决java反射获得构造方法_java反射之构造器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复