| 
 Class主要是反射的源头,不光可以取得对象所在类的信息,也可以直接通过Class类的方法进行对象的实例化操作正常情况下,使用关键字new为对象实例化,如果现在已经实例化好了Class对象,则就可以通过Class类中提供的 ![]() 
 实例化对象- package com.itmyhome;  
 
 -   
 
 - class Person {  
 
 -     private String name;  
 
 -     private int age;  
 
 -       
 
 -     public String getName() {  
 
 -         return name;  
 
 -     }  
 
 -     public void setName(String name) {  
 
 -         this.name = name;  
 
 -     }  
 
 -     public int getAge() {  
 
 -         return age;  
 
 -     }  
 
 -     public void setAge(int age) {  
 
 -         this.age = age;  
 
 -     }  
 
 -     public String toString() {  
 
 -         // TODO Auto-generated method stub  
 
 -         return "name: " + name + ",age: " + age;  
 
 -     }  
 
 - }  
 
 -   
 
 - public class T {  
 
 -   
 
 -     public static void main(String[] args) throws ClassNotFoundException {  
 
 -         Class<?> c = Class.forName("com.itmyhome.Person");  
 
 -         Person person = null;  
 
 -         try {  
 
 -             person = (Person) c.newInstance();  //实例化对象  
 
 -         } catch (InstantiationException e) {  
 
 -             e.printStackTrace();  
 
 -         } catch (IllegalAccessException e) {  
 
 -             e.printStackTrace();  
 
 -         }  
 
 -         person.setName("itmyhome");  
 
 -         person.setAge(23);  
 
 -         System.out.println(person);  
 
 -     }  
 
 -   
 
 - }  
 
  复制代码 通过以上的代码,可以发现,即使不使用关键字new对象也可以进行实例化操作,反射的作用。 但是,在使用以上操作的时候有一点必须注意,在操作中类中必须存在无参构造方法,否则无法实例化  
报以下异常- java.lang.InstantiationException: com.itmyhome.Person  
 
 -     at java.lang.Class.newInstance0(Class.java:340)  
 
 -     at java.lang.Class.newInstance(Class.java:308)  
 
 -     at com.itmyhome.T.main(T.java:35)  
 
 - Exception in thread "main" java.lang.NullPointerException  
 
 -     at com.itmyhome.T.main(T.java:41)  
 
  复制代码 对于以上的程序也并非没有解决的方法,也是可以通过其他的方式进行实例化操作的,只是在操作的时候需要明确的调用类中的构造方法,并将参数传递进去之后才可以进行实例化操作,操作步骤如下: 1、通过Class类中的getConstructors()取得本类中的全部构造方法。 2、向构造方法中传递一个对象数组进去,里面包含了构造方法中所需的各个参数。 3、之后通过Constructor实例化对象。 ![]() - package com.itmyhome;  
 
 -   
 
 - import java.lang.reflect.Constructor;  
 
 -   
 
 - class Person {  
 
 -     private String name;  
 
 -     private int age;  
 
 -       
 
 -     public Person(String name,int age){  
 
 -         this.name = name;  
 
 -         this.age = age;  
 
 -     }  
 
 -     public String getName() {  
 
 -         return name;  
 
 -     }  
 
 -     public void setName(String name) {  
 
 -         this.name = name;  
 
 -     }  
 
 -     public int getAge() {  
 
 -         return age;  
 
 -     }  
 
 -     public void setAge(int age) {  
 
 -         this.age = age;  
 
 -     }  
 
 -     public String toString() {  
 
 -         // TODO Auto-generated method stub  
 
 -         return "name: " + name + ",age: " + age;  
 
 -     }  
 
 - }  
 
 -   
 
 - public class T {  
 
 -   
 
 -     public static void main(String[] args) throws ClassNotFoundException{  
 
 -         Class<?> c = Class.forName("com.itmyhome.Person");  
 
 -         Constructor<?> cons[] = c.getConstructors();  
 
 -         Person person = null;  
 
 -         try {  
 
 -             person = (Person) cons[0].newInstance("itmyhome",23);  //实例化对象  
 
 -         } catch (Exception e) {  
 
 -             e.printStackTrace();  
 
 -         }   
 
 -         person.setName("itmyhome");  
 
 -         person.setAge(23);  
 
 -         System.out.println(person);  
 
 -     }  
 
 -   
 
 - }  
 
  复制代码 
  
 |