结论:一个类在运行时只会生成唯一Class对象,但可以根据需求生成不同的实例对象。下面通过代码给出详解。
1、首先给出获得Class对象的3中方式。
package reflect.blog;
import reflect.Student;
public class ReflectCar {
public static void main(String[] args) {
//获取Class对象的第一种方式
Car car = new Car();
Class carClass = car.getClass();
System.out.println(carClass.getName());
//获取Class对象的第二种方式
Class carClass2 = Car.class;
System.out.println(carClass == carClass2);
//获取Class对象的第三种方式
try {
Class carClass3 = Class.forName("reflect.blog.Car");
System.out.println(carClass3 == carClass2);
}catch (ClassNotFoundException e){
e.printStackTrace();
}
}
}
运行结果为:
reflect.blog.Car
true
true
可以得出结论,在运行时一个类只生成一个Class对象。
2、其次来反射中的实例
package reflect.blog;
public class Car {
String name;
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
'}';
}
}
package reflect.blog;
import java.lang.reflect.Field;
public class CarInstance {
public static void main(String[] args) {
try {
Class clazz = Class.forName("reflect.blog.Car");
Field field = clazz.getField("name");
Object obj = clazz.getConstructor().newInstance();
field.set(obj,"星仔");
System.out.println("实例car1: "+obj);
field.set(obj, "华仔");
System.out.println("实例car1: "+obj);
Object obj2 = clazz.getConstructor().newInstance();
field.set(obj2, "发仔");
System.out.println("实例car2: "+obj2);
System.out.println("实例car1: "+obj);
}catch (Exception e){
e.printStackTrace();
}
}
}
运行结果
实例car1: Car{name='星仔'}
实例car1: Car{name='华仔'}
实例car2: Car{name='发仔'}
实例car1: Car{name='华仔'}
可以得出结论,运行时可以生成不同的实例对象。
总结:一个类在运行时只会生成唯一一个Class对象,但可以根据需求生成不同的实例对象。