本章主旨: 可以使用class类完成对象的实例化操作
可以通过construct类调用有参构造方法完成对象的实例化操作
class主要反射的源头 不光可以取得对象所在类的信息也可以通过class方法进行对象实例化操作
可以通过construct类调用有参构造方法完成对象的实例化操作
class主要反射的源头 不光可以取得对象所在类的信息也可以通过class方法进行对象实例化操作
正常情况下使用new关键字为对象实例化,如果现在已经实例化好了Class对象则就可以通过提供的
以下代码进行演示 必须是无参构造
package KownClass;
class person {
private String name;// name属性
private int 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;
}
@Override
public String toString() {
return "person [name=" + name + ", age=" + age + "]";
}
}
public class test1 {
public static void main(String[] args) {
Class<?> c = null;// 指定泛型
// 以下的操作形式是在开发中最常用的一种形式
try {
// 传入完整的包名 名称实例化对象
c = Class.forName("KownClass.person");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
person per=null;//声明person 对象
try {
per=(person) c.newInstance();//实例化对象
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
per.setName("JDK");
per.setAge(22);
System.out.println(per);//内容输出 调用tostring
}
}
可以发现即使不使用关键字new 对象也可以进行实例化操作 反射的作用 因为
per=(person) c.newInstance();//已经实例化对象
在使用有参构造方法时
1.通过class为getConstruct取得本类方法的全部方法
2.向构造方法传递一个对象数组进去,里面包含着构造方法的各个参数
3.之后通过construct实例化对象
package KownClass;
import java.lang.reflect.Constructor;
class person {
private String name;// name属性
private int age; // age属性
public String getName() {
return name;
}
public person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "person [name=" + name + ", age=" + age + "]";
}
}
public class test1 {
public static void main(String[] args) {
Class<?> c = null;// 指定泛型
// 以下的操作形式是在开发中最常用的一种形式
try {
// 传入完整的包名 名称实例化对象
c = Class.forName("KownClass.person");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
person per = null;// 声明person 对象
//1.向构造方法传递一个对象数组进去,
Constructor<?>cons[]=null;
/* 之 后通过construct实例化对象*/
cons=c.getConstructors();
try {
//2.里面包含着构造方法的各个参数
per = (person)cons[0].newInstance("JDK",22);// 实例化对象
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*per.setName("JDK");
per.setAge(22);*/
System.out.println(per);// 内容输出 调用tostring
}
}