Class对象
目录
获取class对象的三种方法
Class对象包括一个类的方法、变量、接口、类名、类修饰符等等信息,获取Class对象有三种方法。
- 对象.getClass方法
- 类名.class属性
- Class的forName方法,参数为类的全路径
//获取Class对象的三种方法
Test test = new Test();
Class c1 = test.getClass();
Class c2=Test.class;
Class c3=Class.forName("ClassTest.Test");
获取类的各种信息
获取类名
//获取类名
String name=c1.getName();
String simplename=c1.getSimpleName();
System.out.println("类名(带包名称):"+name);
System.out.println("类名(不带包名称):"+simplename);
获取类修饰符
//获取类修饰符
int modifierid=c1.getModifiers();
//通过返回int值判断是否是某一修饰符
boolean isPublic=Modifier.isPublic(modifierid);
boolean isPrivate=Modifier.isPrivate(modifierid);
boolean isAbstract=Modifier.isAbstract(modifierid);
boolean isFinal=Modifier.isFinal(modifierid);
boolean isInterface=Modifier.isInterface(modifierid);
System.out.println(modifierid+"是否public:"+isPublic);
System.out.println(modifierid+"是否Private:"+isPrivate);
System.out.println(modifierid+"是否Abstract:"+isAbstract);
System.out.println(modifierid+"是否Final:"+isFinal);
System.out.println(modifierid+"是否Interface:"+isInterface);
获取包的信息
//获取包信息
Package pack=c1.getPackage();
System.out.println("包信息:"+pack.getName());
获取父类的class对象
//获取父类的Class对象
Class parentclass=c1.getSuperclass();
System.out.println("父类对象:"+parentclass.getName());
获取接口信息
//获取接口信息
Class [] interfacename=c1.getInterfaces();
for (Class c:interfacename)
System.out.println("实现接口:"+c.getName());
构造函数Constructor
//获取构造函数Constructor
Constructor [] constructors=c1.getConstructors();
for (Constructor constructor:constructors){
System.out.print("构造方法名称:"+constructor.getName());
Class[] parameterTypes = constructor.getParameterTypes();
for (Class parameterType:parameterTypes){
System.out.print("\t构造方法参数:"+parameterType.getName());
}
System.out.println();
}
两种创建对象的方式
使用Class.forName()
加载类并创建对象
首先,你需要使用Class.forName()
方法加载类的Class
对象,然后可以使用这个Class
对象的newInstance()
方法(注意:在Java 9及更高版本中,newInstance()
方法已被标记为过时,推荐使用getDeclaredConstructor()
方法)来创建类的实例。
try {
// 加载类并创建其实例
Class<?> clazz = Class.forName("com.example.MyClass");
Object instance = clazz.getDeclaredConstructor().newInstance(); // Java 9之前
// Java 9及更高版本推荐使用的方式
// Constructor<?> constructor = clazz.getDeclaredConstructor();
// constructor.setAccessible(true); // 如果构造器是私有的,则需要设置可访问性
// Object instance = constructor.newInstance();
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException e) {
e.printStackTrace();
}
使用Class.forName()
加载类,并调用特定的构造器
如果你需要调用类的特定构造器(比如带有参数的构造器),你可以使用getDeclaredConstructor(Class<?>... parameterTypes)
方法来获取该构造器的Constructor
对象,然后调用newInstance(Object... initargs)
方法创建对象。
try {
Class<?> clazz = Class.forName("com.example.MyClass");
// 假设MyClass有一个接受String参数的构造器
Constructor<?> constructor = clazz.getDeclaredConstructor(String.class);
Object instance = constructor.newInstance("Hello, World!");
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException e) {
e.printStackTrace();
}
标签:Java,对象,System,Class,获取,println,class,modifierid,out
From: https://www.cnblogs.com/BingBing-8888/p/18459777