荐 Java中class与Class的区别
程序员文章站
2022-04-16 15:58:18
一.class与Class区别class是Java中的关键字,如public class Xxx 或者 class Xxx ,在声明Java类时使用。而Class是一个类。我们通常认为类是对象的抽象和集合,Class就相当于是对类的抽象和集合。也可以认为对象是类的实例,类是Class的实例。二.Class介绍Class是一个类。如下图,它在java.lang包中。它的构造函数是private属性,所以我们不能直接new一个Class对象出来,如下图注释段所说:“私有构造函数。只有Java虚...
目录
一.class与Class区别
class是Java中的关键字,如public class Xxx 或者 class Xxx ,在声明Java类时使用。
而Class是一个类。
我们通常认为类是对象的抽象和集合,Class就相当于是对类的抽象和集合。
也可以认为对象是类的实例,类是Class的实例。
二.Class介绍
Class是一个类。如下图,它在java.lang包中。
它的构造函数是private属性,所以我们不能直接new一个Class对象出来,如下图注释段所说:
“私有构造函数。只有Java虚拟机创建类对象。不使用此构造函数,并阻止生成默认构造函数。”
三.如何得到Class对象
1.通过getClass()方法获取到Class对象
getClass()方法是Object类的一部分,如下图:
如果我们已经创建了某个类型的对象,那么我们可以通过getClass()方法来获取该类型的Class的对象:
package Task;
import org.junit.Test;
public class Try0 {
@Test
public void toTry() throws ClassNotFoundException {
// //forName方法:参数为其类的路径
// Class a = Class.forName("Task.Try1");
// System.out.println(a);
//通过对象得到类
Try1 try1 = new Try1();
Class b = try1.getClass();
System.out.println(b);
}
}
class Try1{
}
测试运行结果:
2.通过forName()方法获取到Class对象
Class.forName方法是Class类的一个静态方法,如下图:
所以可以直接通过Class.forName(“类的路径”)获取Class对象:
package Task;
import org.junit.Test;
public class Try0 {
@Test
public void toTry() throws ClassNotFoundException {
//forName方法:参数为其类的路径
Class a = Class.forName("Task.Try1");
System.out.println(a);
}
}
class Try1{
}
测试运行截图:
3.类.class获得Class对象(类字面常量)
package Task;
import org.junit.Test;
public class Try0 {
@Test
public void toTry() throws ClassNotFoundException {
// //forName方法:参数为其类的路径
// Class a = Class.forName("Task.Try1");
// System.out.println(a);
// //通过对象得到类
// Try1 try1 = new Try1();
// Class b = try1.getClass();
// System.out.println(b);
//类字面常量
Class c = Try1.class;
System.out.println(c);
}
}
class Try1{
}
测试运行结果:
四.Class常用方法
package Task;
import org.junit.Test;
public class Try0 {
@Test
public void toTry() throws ClassNotFoundException {
// //forName方法:参数为其类的路径
// Class a = Class.forName("Task.Try1");
// System.out.println(a);
//通过对象得到类
Try1 try1 = new Try1();
Class b = try1.getClass();
System.out.println(b);
// //类字面常量
// Class c = Try1.class;
// System.out.println(c);
//isInterface方法,判断是否为接口
System.out.println(b.isInterface());
//isArray方法,判断是否为数组
System.out.println(b.isArray());
//isPrimitive方法,判断是否是基本类型,例如int是基本类型,Integer为包装类
System.out.println(b.isPrimitive());
//isAnnotation方法,判断是否为注解,注解如常见的重写注解@Override,我们所用的单元测试@Test注解
System.out.println(b.isAnnotation());
//isInstance方法参数是一个对象,判断该对象try1对应的类Try1是否是b的对象
System.out.println(b.isInstance(try1));
//getClassLoader方法,获取类加载器
System.out.println(b.getClassLoader());
//getSuperclass方法,获取父类信息
System.out.println(b.getSuperclass());
//getGenericSuperclass方法,也是获取父类信息
System.out.println(b.getGenericSuperclass());
//getComponentType方法,如果b的类型是数组,则获取数组里元素的类型
System.out.println(b.getComponentType());
//getDeclaredClasses方法,获取b继承于哪个类
System.out.println(b.getDeclaredClasses());
//几个获取name的方法:
//getName方法
System.out.println(b.getName());
//getTypeName方法
System.out.println(b.getTypeName());
//getCanonicalName方法
System.out.println(b.getCanonicalName());
//getSimpleName方法
System.out.println(b.getSimpleName());
// 以下还有一些方法只列举出来
// getTypeParameters方法,获取泛型类中的泛型参数数组
// getClasses方法,获取Class对象中public修饰的内部类
// getDeclaredClasses方法,获取Class对象中的内部类,继承成员不包含在内
// getConstructors方法,获取public修饰的构造函数
// getConstructor方法,查找对应的构造函数
// getDeclaredConstructors方法,获取Class对象中的构造函数
}
}
class Try1 {
}
输出截图如下:
五.Java反射机制
参考本人另一篇博客:Java反射机制(初步认识)
本文地址:https://blog.csdn.net/MrYushiwen/article/details/107370564
推荐阅读