Java Class 类的三种实例化模式
程序员文章站
2024-01-18 20:07:22
...
文章目录
Class 类是描述整个类的概念, 所以也是整个反射的操作源头, 那么在使用Class 类的时候需要关注的依然是这个类的对象, 而这个类的对象的产生模式, 一共有三种:
1. 任何的实例化对象可以通过 Object 类中的 getClass() 方法取得 Class 类对象:
public final 类<?> getClass()
package com.cwq.beyond;
import java.util.Date;
public class TestDemo04 {
public static void main(String[] args) {
// 在反射的世界里,
Class<?> cls = new Date().getClass();
System.out.println(cls.getName());
System.out.println(cls);
}
}
注意:
在反射的世界里, 该方法中的泛型只能用 ?
来体现, 这时候可以理解为是调用 Object 类进行操作处理, 而如果写入实际的类型则会报错.
2. “类.class” : 直接根据某一个具体的类来取得Class 类的实例化对象;
package com.cwq.beyond;
import java.util.Date;
public class TestDemo04 {
public static void main(String[] args) {
// 在反射的世界里,
Class<?> cls = Date.class; // 不需要实例化Date 类对象了
System.out.println(cls.getName());
System.out.println(cls);
}
}
3. 使用 Class 类提供的方法:
public static 类<?> forName(String className)
throws ClassNotFoundException
使用 forName() 方法
package com.cwq.beyond;
public class TestDemo04 {
public static void main(String[] args) throws ClassNotFoundException {
// 在反射的世界里,
Class<?> cls = Class.forName("java.util.Date"); // 直接使用字符串描述要使用的类, 无需 import
System.out.println(cls.getName());
System.out.println(cls);
}
}
在以上给出的三个方法里面我们会发现一个神奇的地方: 除了第一种形式会产生Date 类的实例化对象之外, 其他两种都不会产生 Date类的实例化对象, 于是, 取得了 Class 类对象有一个最直接的好处 : 可以直接通过反射实例化对象, 在Class 类中定义有如下一个方法:
public T newInstance()
throws InstantiationException,
IllegalAccessException
反射实例化对象
package com.cwq.beyond;
public class TestDemo04 {
public static void main(String[] args) throws Exception {
// 在反射的世界里,
Class<?> cls = Class.forName("java.util.Date"); // 直接使用字符串描述要使用的类, 无需 import
Object object = cls.newInstance(); // 实例化对象 :等价 new java.util.Date()
System.out.println(cls.getName());
System.out.println(cls);
}
}
第二种实例化对象的方式
从上面代码发现除了关键字 new 之外, 对于对象的实例化对象有了第二种做法, 通过反射进行, 取得了Class 对象就意味着取得了一个指定类的操作权。
推荐阅读
-
Java Class 类的三种实例化模式
-
java通过反射,只需要传了类名和参数,就可以根据不同参数的构造方法实例化对象
-
Java实例化一个抽象类对象的方法教程
-
荐 浅谈Java中类和对象的初始化、实例化以及方法重载的底层机制
-
【Java高频面试题】--类的初始化过程以及实例的初始化过程
-
java类被实例化之后各类属性的初始化顺序(实例化某个类,那么这个类也会被jvm加载)
-
Java编程思想中的一个关于类实例化的说明
-
java中类的加载与实例化顺序
-
接口与抽象类的区别 抽象类可以实例化么 java之父 接口与抽象类的区别
-
1. 实例演示Ement常用语法 2. 实例演示元素四类属性 3. 实例演示布局标签,并分析div+class与 html5语义化标签的优缺点