【Java】---反射:Class、Filed、Constructor、Method-二、Class类

时间:2024-01-24 09:38:29

2.1 概念

Class类是 类的类型 ,每一个类都是Class类的实例,每个类只有一个Class实例(类对象)。
Class类是反射中专门用于获取 类和类的成员信息 的类。

需要处理异常:ClassNotFoundException
ClassNotFoundException

类对象的创建共有三种方式:

  1. 通过类的实例获取。(此方法耦合性高,不推荐)
Student zhangsan = new Student();
Class<?> class1 = zhangsan.getClass();
  1. 通过class属性获取。(此方法耦合性高,不推荐)
Class<?> class2 = Student.class;
  1. 通过静态方法Class.forName()获取。(此方法耦合性低,推荐!)
Class<?> class3 = Class.forName("Student");

2.2 方法

2.2.1 getName()

作用:获取类的全名称(包含包名)
返回值类型:String

代码演示:
Student类中:

public class Student{
}

主类中:

Class<?> class1 = Class.forName("Demo1.Student");
System.out.println(class1.getName());

运行结果:

Demo1.Student

2.2.2 getSimpleName()

作用:获取类的简单名称(不包含包名)
返回值类型:String

代码演示:
Student类中:

public class Student{
}

主类中:

Class<?> class1 = Class.forName("Demo1.Student");
System.out.println(class1.getSimpleName());

运行结果:

Student

2.2.3 getPackage()

作用:获取类所在包的名称
返回值类型:String

代码演示:
Student类中:

public class Student{
}

主类中:

Class class1 = Class.forName("Demo1.Student");
System.out.println(class1.getPackage());
System.out.println(class1.getPackage().getName());

运行结果:

package Demo1
Demo1

2.2.4 getSuperclass()

作用:获取类的父类名称。
返回值类型:String

代码演示:
Person类中:

public class Person{//Person类没有指定继承的类,默认直接继承Object类
}

Student类中:

public class Student extends Person{//Student类继承了Person类
}

主类中:

Class class1 = Class.forName("Demo1.Person");
Class class2 = Class.forName("Demo1.Student");
System.out.println("Person类的父类:");
System.out.println(class1.getSuperclass());
System.out.println(class1.getSuperclass().getName());
System.out.println("Student类的父类:");
System.out.println(class2.getSuperclass());
System.out.println(class2.getSuperclass().getName());

运行结果:

Person类的父类:
class java.lang.Object
java.lang.Object
Student类的父类:
class Demo1.Person
Demo1.Person

2.2.5 getInterfaces()

作用:返回类所实现的所有接口
返回值类型:Class<?>[ ]

代码演示:

See接口:

public interface See{//看

}

Hear接口:

public interface Hear{//听

} 

Smell接口:

public interface Smell{//闻

}

Taste接口:

public interface Taste{//尝
}

Person类:

public class Person implements See,Hear,Smell,Taste{//实现了看、听、闻、尝四个接口
}

主类中:

Class class1 = Class.forName("Demo1.Person");
Class[] class2 = class1.getInterfaces();
for(Class c : class2)
	System.out.println(c);

运行结果:

interface Demo1.See
interface Demo1.Hear
interface Demo1.Smell
interface Demo1.Taste