第一种方法:
public static void main(String[] args) {
String str = "Hello";
Class<?> cls = str.getClass(); //必须有一个实例化的对象
System.out.println(cls);
第二种:
public static void main(String[] args) {
Class<?> cls = java.lang.String.class;
System.out.println(cls);
这种方法不需要一定要一个实例化的对象,直接通过类名就能得到。但是这种方法必须有一个明确的结构,就是那个类必须要存在。java.lang.String.class 如果这里写错了,程序就必然会报错。编译不能通过。但是有的时候的情况是,我们要给之后的可能新有的类预留出空间,这样这么做就不行了。
第三种方法:
public static void main(String[] args) throws Exception{
Class<?> cls = Class.forName("java.lang.String");
System.out.println(cls);
这个方法的好处就是即使java.lang.String不存在,在编译的时候也不会报错,只有在运行的时候才会报错。
但是我们的目的不是取得类对象,取得类对象之后,我们得到类的实例化对象的方法就不用new了,这时候就可以用Class里面的方法newInstance()。
这个方法可能会抛出两个异常:
InstantiationException: 没有无参构造,或者类名错误
IllegalAccessException:构造方法私有化