Class类介绍
java世界中,一切都是对象,所有事物都要使用一个类描述;
这个class是不是一个事物呢?
是的,所以java中专门定义了一个叫做Class的类来描述它;
int[] arr = new int[1];
int[] array = new int[2];
实际上,除了类使用Class类描述外,一个类中的构造函数、成员变量和一般函数,都是一种事物,java中都会使用一个类描述:
构造函数:Constructor类;
成员变量:Field类;
一般函数:Method类;
获取Class对象
第一种方式:通过对象的getClass函数获取
第二种方式:通过类型的静态成员变量class获取
第三种方式:使用Class类的静态函数,通过表示某种类型的字符串获取
这个方法的参数字符串,必须是一个类型的带包名的全称;
使用第三种方式通过配置文件获取Class对象
一个保存了类名的配置信息的配置文件:
使用Class对象
public
通过获取到的Class对象创建这个类的对象
这个方法,实际上是在调用这个类的无参构造函数创建一个对象
获取和调用构造函数
// 演示通过Class对象获取类中的构造函数
private static void test2() throws NoSuchMethodException, SecurityException {
// 演示根据参数的类型,获取一个公开的构造函数
// 1、获取Person类的对象
Class clazz = Person.class;
Constructor c = clazz.getConstructor(String.class,int.class);
System.out.println(c);//public com.kuaixueit.reflect.Person(java.lang.String,int)
c = clazz.getConstructor();
System.out.println(c);//public com.kuaixueit.reflect.Person()
System.out.println("----获取所有公开的构造函数---------");
Constructor[] constructors = clazz.getConstructors();
for (Constructor constructor : constructors) {
System.out.println(constructor);
}
System.out.println("-------演示获取一个私有的构造函数---------------");
c = clazz.getDeclaredConstructor(String.class);
System.out.println(c);//com.kuaixueit.reflect.Person(java.lang.String)
c = clazz.getDeclaredConstructor(int.class);
System.out.println(c);//private com.kuaixueit.reflect.Person(int)
System.out.println("-------演示获取一个所有的构造函数---------------");
constructors = clazz.getDeclaredConstructors();
for (Constructor constructor : constructors) {
System.out.println(constructor);
}
}
使用构造函数对象创建对象:
使用反射破坏单例
预防措施: