Class的概念:
Java中说万物皆对象,我们使用的对象都是某个类的实例,那么类是不是对象呢,又是谁的对象呢?
类当然也是对象,java中有一个Class类,所有的类都是它的对象。当我们声明一个类编译时,Java虚拟机会调用相应的构造方法(此处与类加载器相关以后会讲到),构造出一个类对象供我们使用
JDK的API中是这么说的:Class
没有公共构造方法。Class
对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass
方法自动构造的
如果你继续问,Class是谁的对象呢,我只能说,它应该算jvm虚拟机的对象
所以Class实际上就是我们平时创建的类的类。慕课网上有一个老师将其命名为类类型,这里我觉得可以借用一下所有的类都是Class的实例,也就是说每个类都有其类类型(这是当然的了,每个对象都属于它的类嘛),每个类的类类型都不一样,类类型包含了这个类的一切,比如这类的所有属性,方法,类属于哪个包等等。一般人可能会说,我用一个类的实例不也能获取类的属性和方法吗,但是你获取的只是方法的使用权限,我Class获取的是方法本身。比如Class可以java.lang..String类的私有方法的名字,你用其他方法怎么获取?所以,获取到类的类类型,你也就拥有了更大的权限来操作这个类
Class的获取:
类类型的的获取有三种方式:
1、Class classOne = Class.forName(全类名);
2、Class classTwo = 类名.class;
3、Class classThree = 对象.getClass;
获取类类型有什么用呢,平时用到的很少,但是用到框架和反射的时候就会有很大用处
Class的基本操作
1、属性获取的四种方式:
1)Class.getField() //获取指定的public属性
2)Class.getFields() //获取所有public属性
3)Class.getDeclarField() //获取任意指定的属性
4)Class.getDeclareFields() //获取所有属性
2、方法获取的四种方式:
1)Class.getMethod() //获取指定的public方法
2)Class.getField() //获取所有public方法
3)Class.getDeclareMethod() //获取任意指定的方法
4)Class.getDeclareMethods() //获取所有方法
3、用Class创建对象:
举例说明:
class Person{
public String name;
int age;
public Person() {}
public Person(String name){
this.name = name;
this.age = age;
}
}
public class ClassFunctions {
public static void main(String[] args) {
//获取Class
Class PersonClass = Person.class;
//获取类的构造方法
Constructor[] constructors = PersonClass.getConstructors();
//打印出所有的构造方法,看看需要使用哪个
for (Constructor constructor : constructors) {
System.out.println(constructor.toString());
}
//构造Person对象
try {
Person p = (Person) constructors[0].newInstance();
} catch (Exception e) {}
}
}