黑马程序员技术交流社区

标题: 反射 获取构造方法 [打印本页]

作者: fmi110    时间: 2015-9-21 10:53
标题: 反射 获取构造方法
a
  1. package demo.reflect;

  2. import java.lang.reflect.Constructor;

  3. public class Test {

  4.         /**
  5.          * @param args
  6.          */
  7.         public static void main(String[] args) throws Exception {
  8.                 // 通过反射获取字节码文件对象
  9.                 Class c = Class.forName("demo.reflect.People");
  10.                 //获取构造函数,所有声明的构造函数
  11.                 Constructor[] cons = c.getDeclaredConstructors();
  12.                 for(Constructor con :cons)
  13.                         System.out.println(c.getPackage()+"..."+con);       
  14.                 //通过构造函数创建新的实例
  15.                 Constructor con = c.getDeclaredConstructor();
  16.                 People p = (People)con.newInstance();
  17.                 System.out.println(p);
  18.                 //带参的构造函数构造实例
  19.                 Constructor con1 = c.getDeclaredConstructor(String.class,int.class);
  20.                 People p1 = (People)con1.newInstance("Lily",18);
  21.                 System.out.println(p1);
  22.                
  23.                 Constructor con2 = c.getDeclaredConstructor(String.class,int.class,String.class);
  24.                 con2.setAccessible(true);//用私有的构造函数时,需要取消语言检查
  25.                 People p2 = (People)con2.newInstance("Lily",18,"来宾");
  26.                 System.out.println(p2);
  27.         }

  28. }
复制代码



作者: fmi110    时间: 2015-9-21 11:25
a
  1. package demo.reflect;

  2. public class People {

  3.         /**
  4.          * 用于反射演示的类
  5.          */
  6.         private String name;
  7.         private int age;
  8.         public String address;

  9.         public People() {
  10.         }
  11.         //修饰符不同
  12.         People(String name, int age) {
  13.                 this.name = name;
  14.                 this.age = age;
  15.         }

  16.         private People(String name, int age, String address) {
  17.                 this.name = name;
  18.                 this.age = age;
  19.                 this.address = address;
  20.         }

  21.         public void show() {
  22.                 System.out.println("show~~");
  23.         }

  24.         public void method(String s) {
  25.                 System.out.println("method" + s);
  26.         }
  27.         @Override
  28.         public String toString() {
  29.                 return "People [name=" + name + ", age=" + age + ", address=" + address
  30.                                 + "]";
  31.         }
  32.        
  33. }
复制代码

作者: fmi110    时间: 2015-9-21 12:21
a
  1. package demo.reflect...private demo.reflect.People(java.lang.String,int,java.lang.String)
  2. package demo.reflect...demo.reflect.People(java.lang.String,int)
  3. package demo.reflect...public demo.reflect.People()
  4. People [name=null, age=0, address=null]
  5. People [name=Lily, age=18, address=null]
  6. People [name=Lily, age=18, address=来宾]
复制代码

作者: 水果牛牛    时间: 2015-9-21 12:26
学习了,很详细




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2