通过Class类来实例化对象
public static Class<?> forName(String className) throws ClassNotFoundException 返回与带有给定字符串名的类或接口相关联的 Class 对象。
java 反射机制创建对象的两种方法:
1,用指定类的无参构造方法创建对象
方法一:
class Person { public String toString() { return "hello world!"; } } public class PersonClass { public static void main(String[] args) throws Exception { Class<?>c=null; Person person = null; c = Class.forName("Person"); //返回与指定类相关联的Class对象 person= (Person) c.newInstance(); //实例化person对象 System.out.println(person); } }
方法二:
class Person { public String toString(){ return "hello world!"; } } public class PersonClass { public static void main(String[] args) throws Exception { Class<?>c=null; Person person = null; c = Person.class; //返回与指定类相关联的Class对象 person= (Person) c.newInstance(); //实例化person对象 System.out.println(person); } } 2,用带有参数的构造方法实例化对象
package org.person; public class Person { private String name; 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; } private int age; public String toString(){ return "hello world!"; } } import java.lang.reflect.Constructor; import org.person.Person; public class PersonClass { public static void main(String[] args) throws Exception { Class<?>c=null; Person person = null; Constructor<?> constructor[] =null; c = Class.forName("org.person.Person"); //返回与指定类相关联的Class对象 constructor = c.getConstructors(); //获得实例话类的所有构造方法, //一般按构造方法的参数存放在数组中,参数多的排在前面,反之,排在后面 person=(Person) constructor[0].newInstance("lkf",47); System.out.println(person.getName()); System.out.println(person.getAge()); System.out.println(person); } }