黑马程序员技术交流社区

标题: 反射入门-获得Class对象构造实例 [打印本页]

作者: 游呤人    时间: 2015-7-16 00:59
标题: 反射入门-获得Class对象构造实例
本帖最后由 游呤人 于 2015-7-16 01:32 编辑

加载Class的方法
类名.class
实例.getclass
Class.forname(类的全路径名) //com.XXX.类名,这种方法以后会比较常见,
//比如在与数据库通信时加载JDBC的方法.也是比较推荐大家使用的
获得构造器级创建实例.
两步走,
一获得加载类的class方法见上面,
二获得构造器
获得构造器有两中方法,
class.getConstructor(class.. c)|class.getConstructor() 返回Constructor
class.. c 表示程序该程序参数列表,程序会自动匹配,类型相同的参数列表不写参数列表表示,程序无参构造
class.getConstructors() 返回Constructors
但是这种方法只能返回public的构造参数
  1. package com.refect;
  2. @SuppressWarnings("all")
  3. public class Student {
  4.         private String name;
  5.         private int age;
  6.         private int yuWen;
  7.         private int shuXue;
  8.         private int yingYu;
  9.         static {

  10.                 System.out.println("你好");
  11.         }
  12.         protected Student(){}
  13. /*        private Student() {
  14.         }*/
  15.         public Student(String name, int yuWen, int shuXue, int yingYu) {
  16.                 this.name = name;
  17.                 this.yuWen = yuWen;
  18.                 this.yingYu = yingYu;
  19.                 this.shuXue = shuXue;
  20.         }

  21.         public Student(String name) {
  22.                 this.name = name;
  23.         }

  24.         public Student(String name, int age) {
  25.                 this.name = name;
  26.                 this.age = age;

  27.         }

  28.         public String getName() {
  29.                 return name;
  30.         }

  31.         public void setName(String name) {
  32.                 this.name = name;
  33.         }

  34.         public int getAge() {
  35.                 return age;
  36.         }

  37.         public void setAge(int age) {
  38.                 this.age = age;
  39.         }

  40.         public void setyuWen(int yuWen) {
  41.                 this.yuWen = yuWen;
  42.         }

  43.         public int getyuWen() {
  44.                 return yuWen;
  45.         }

  46.         public void setyingYu(int yingYu) {
  47.                 this.yingYu = yingYu;
  48.         }
  49.         public int getyingYu() {
  50.                 return yingYu;
  51.         }

  52.         public String toString() {
  53.                 return name +'\t' + yuWen + '\t' + shuXue + '\t' + yingYu + '\t'
  54.                                 + getSum()+"\t age:"+age;
  55.         }
  56.         public int getSum() {
  57.                 return yuWen + shuXue + yingYu;
  58.         }
  59.         private void hop(){
  60.                 System.out.println("加油");
  61.         }
  62. }
复制代码
  1. public class RefectDome {
  2.         public static void main(String[] args) throws Exception {
  3.                 Class studentClazz = Class.forName("com.refect.Student");
  4.                 Constructor[] conArr = studentClazz.getDeclaredConstructors();
  5.                
  6.                 for (Constructor constructor : conArr) {
  7.                         System.out.println(constructor);
  8.                 }
  9.                 System.out.println("-------------------------------------");
  10.                 Constructor con = studentClazz.getConstructor(String.class, int.class,
  11.                                 int.class, int.class);
  12.                 System.out.println(con);
  13.                 Object o = con.newInstance("张三", 18, 79, 89);
  14.                 System.out.println(o);

  15.                  Student stu= (Student) studentClazz.newInstance();
  16.                  System.out.println(stu);
  17.         }
  18. }
复制代码





作者: 游呤人    时间: 2015-7-16 01:02
最后使用 Constructors.newInstance(objcet.. obj);方法创建实例




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