16---java反射机制02(使用Class)

来源:互联网 发布:黑魂3帧数优化补丁3dm 编辑:程序博客网 时间:2024/06/04 20:15
 

Class 类的使用:
 可以通过Class类完成对象的实例化操作;
 可以同过Constructor类调用有参数构造方法完成对象的实例化操作;

 Class主要是反射的源头,不光可以取得对象所在的类 的信息,也可以通过Class类的
 方法进行对对象的实例化操作,正常情况下,使用关键字new为对象实例化,如果现在
 已经实例化好了Class对象;则可以通过Class类中提供的newInstance
  package com.lid;
  class Person{
   private String name;
   private int age;
   public void setName(String name){
    this.name=name;
    }
   public void setAge(int age){
    this.age=age;
    }
   public String getName(){
    return this.name;
    }
   public int getAge(){
    return this.age;
    }
   public String toString(){
    return "姓名:"+this.name+";年龄:"+this.age;
    }
   }
  public class Demo{
   public static void main(String args[]){
    Class<?> c=null;//声明Class对象
    try{
     c=Class.forName("com.lid.Person");
     }
    catch(Exception e){
     e.printStackTrace();
     }
    Person per=null;
    try{
     per=(Person)c.newInstance();//实例化对象
     }
    catch(Exception e){
     
     }
    
    per.setName("lid");
    per.setAge(30);
    System.out.println(per);
    }
   }
  用Class实例化对象的时候,必须保证类中存在一个无参数构造,否则无法使用;;
  如果要想调用有参数构造进行对象的实例化操作,则必须使用Constructor
  类完成,此类表示构造方法,并通过可变参数传递要求的内容;
   package com.lid;
   import java.lang.reflect.*;
   class Person{
    private String name;
    private int age;

    public Person(String name,int age){
     this.name=name;
     this.age=age;
     }
    public void setName(String name){
     this.name=name;
     }
    public void setAge(int age){
     this.age=age;
     }
    public String getName(){
     return this.name;
     }
    public int getAge(){
     return this.age;
     }
    public String toString(){
     return "姓名:"+this.name+";年龄:"+this.age;
     }
    }
   public class Demo{
    public static void main(String args[]){
     Class<?> c=null;//声明Class对象
     try{
      c=Class.forName("com.lid.Person");
      }
     catch(Exception e){
      e.printStackTrace();
      }
     Person per=null;
     Constructor<?>[] con=null;
     con=c.getConstructors();
     try{
      per=(Person)con[0].newInstance("lid",20);
      }
     catch(Exception e){
      
      }
     
     System.out.println(per);
     }
    }