Java反射——获取构造器以及创建对象
来源:互联网 发布:苹果4代是几g网络 编辑:程序博客网 时间:2024/05/23 15:47
获取某一个类的所有构造器实例
- 明确操作的是哪一个类(严格的说是类编译后的字节码)
获取构造器
Class类常用获取构造器的方法:
1.Class类的public Constructor <>[] getConstructors():该方法只能获取当前Class所表示类的public修饰的构造器
2.Class类的public Constructor<> [] getDeclaredConstructors():该方法能获取所有的构造器,与访问权限无关
3.Class类的public Constructor<> [] getConstructors(Class<> … parameterType): 只能获取单一公共类型的构造器
4.Class类的public Constructor<> [] getDeclaredConstructors(Class<> … parameterType):只能获取单一任意类型的构造器
parameterType表示构造器参数的Class类型Constructor类:表示类的构造器类型,Constructor实例就是某一个类的某个构造器
获取构造器创建实例
Constructor类:表示类的构造器类型,Constructor实例就是某一个类的某个构造器
常用方法:
public T newInstance(Object…initargs)
参数;initargs表示调用构造器的实际参数
返回;返回创建的实例。T表示Class类所表示的类型
如果一个类的构造器可以被直接访问,同时没有参数;那么可以直接使用Class类的
public T newInstance直接创建对象
代码示例:
1.ConstructorDemo.java
package constuctor;import java.lang.reflect.Constructor;//使用反射获取构造器public class ConstructorDemo { public static void main(String[] args) throws Exception { getOneConstructor(); System.out.println("============="); getAllConstructor(); } //获取单一构造器 private static void getOneConstructor() throws Exception, Exception{ //找到User的字节码 Class<User> clz=User.class; //调用获取指定构造器的方法即可 //如想`获取public User(String name) //应告诉程序获取带有一个String类型参数的构造器 Constructor c=clz.getConstructor(String.class); System.out.println(c); } //获取所有构造器 private static void getAllConstructor() throws Exception, SecurityException{ //找到User的字节码 Class<User> clz=User.class; //获取public修饰的构造器 Constructor[] cs=clz.getConstructors(); for(Constructor c: cs) System.out.println(c); System.out.println("============="); //获取任意类型的构造器 cs=clz.getDeclaredConstructors(); for(Constructor c: cs) System.out.println(c); }}class User{ public User(){} public User(String age){} public User(String name,int age){} private User(String name,int age,String address){}}
运行结果
public constuctor.User(java.lang.String)=============public constuctor.User(java.lang.String,int)public constuctor.User(java.lang.String)public constuctor.User()=============private constuctor.User(java.lang.String,int,java.lang.String)public constuctor.User(java.lang.String,int)public constuctor.User(java.lang.String)public constuctor.User()
2.ConstructorInvokeDemo.java
package constuctor;import java.lang.reflect.Constructor;//使用反射调用构造器,创建对象public class ConstructorInvokeDemo { public static void main(String[] args) throws Exception, Exception { //1.先找到被调用对象的字节码 Class<Emp> clz=Emp.class; //2.找到被调用的指定的构造器 Constructor<Emp> c=clz.getConstructor(); //3.执行该构造器 Emp e=c.newInstance(); System.out.println(e); System.out.println("////////////////////////////////////////////////////////////////////////////////////////////////////"); Emp e2=clz.newInstance(); System.out.println(e2); //调用带参数的构造器 System.out.println("////////////////////////////////////////////////////////////////////////////////////////////////////"); Constructor<Emp> c2=clz.getConstructor(String.class); Emp e3=c2.newInstance("wang"); System.out.println(e3); //调用私有构造器 System.out.println("////////////////////////////////////////////////////////////////////////////////////////////////////"); c=clz.getDeclaredConstructor(String.class,int.class,String.class); //Emp e4=c.newInstance("wang",23,"beijing");//java.lang.IllegalAccessException: can not access a member of class constuctor.Emp with modifiers "private" //设置私有构造器可访问 c.setAccessible(true); Emp e4=c.newInstance("wang",23,"beijing"); System.out.println(e4); }}class Emp{ public Emp(){ System.out.println("...emp()..."); } public Emp(String name){ System.out.println("...emp()..."+name); } public Emp(String name,int age){ System.out.println("...emp()..."+name+" "+age); } private Emp(String name,int age,String address){ System.out.println("...emp()..." +name+" "+age+" "+address); }}
运行结果
...emp()...constuctor.Emp@15db9742////////////////////////////////////////////////////////////////////////////////////////////////////...emp()...constuctor.Emp@6d06d69c////////////////////////////////////////////////////////////////////////////////////////////////////...emp()...wangconstuctor.Emp@7852e922////////////////////////////////////////////////////////////////////////////////////////////////////...emp()...wang 23 beijingconstuctor.Emp@4e25154f
- Java反射——获取构造器以及创建对象
- java反射获取构造器以及调用构造器创建对象
- Java反射创建对象-自适应构造器
- 反射获取构造方法并创建对象
- 反射获取构造器对象
- Java--Reflect(反射)专题4——获取成员变量以及构造函数信息
- 反射第三步 : 通过反射获取某一个类的 构造器Constructor 并通过反射创建对象
- Java反射——获取Class对象
- 反射:使用反射调用构造器创建对象
- Java反射获取属性、方法、构造器
- 通过反射可以获取Class的构造方法 通过构造方法创建对象
- Java通过反射机制使用非默认构造器创建对象
- java反射(3)获取Class对象属性方法和构造器
- java 反射 基本知识——构造器
- Java反射笔记2—构造器
- java再复习——通过反射获取类的名字,属性,方法,构造器
- Java 反射创建对象
- java反射创建对象
- 外观模式
- 欢迎使用CSDN-markdown编辑器
- 摩尔投票法
- jsp四大作用域
- mysql启动出现Can't connect to MySQL server on localhost (10061),并且没有mysql的相关服务
- Java反射——获取构造器以及创建对象
- Android反向进度条(ProgressBar)的实现——从右到左的进度条
- linux下的安装ffmpeg
- Selenium之常见元素处理系列四--下拉列表-多选下拉列表元素信息
- JQuery之常用插件
- CodeWar刷题代码收藏(一)
- 详细理解JSON
- Java面试题集
- java中整数的相等比较