2.1 概念
Class
类是 类的类型 ,每一个类都是Class类的实例,每个类只有一个Class实例(类对象
)。
Class类是反射中专门用于获取 类和类的成员信息 的类。
需要处理异常:ClassNotFoundException
类对象的创建共有三种方式:
- 通过类的实例获取。(此方法耦合性高,不推荐)
Student zhangsan = new Student();
Class<?> class1 = zhangsan.getClass();
- 通过
class
属性获取。(此方法耦合性高,不推荐)
Class<?> class2 = Student.class;
- 通过静态方法
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