1. Object类的`Class getClass()`方法
- 示例: `Class clazz = student.getClass();`
2. `类名.class`属性
- 示例: `Class clazz = Student.class;`
- 扩展: 实际上`.class`是一种特殊形式, 称为`类字面常量`, class是关键字不能作为属性名, 且Object类中并没有定义这个属性
3. **Class类的静态方法`forName(String className)`**(常用)
- 示例: `Class clazz = Class.forName("com.test.Student");`
- 注意: 因为该方法使用字符串来寻找类, 有可能并没有该字符串对应的类, 所以会抛出`ClassNotFoundException`类无法找到的异常
- 注意:
- 同一个类的字节码对象只有一个, 地址值是相同的, 无论创建了多少个对象
- `Class`和`class`区别?
- Class是一个类, 表示字节码文件的类
- class是一个关键字, 用于定义一个类
- 为什么变量名写`clazz`?
- 因为`class`是用于定义类的关键字, 不能作为变量名, 所以改几个字母, 也可以写成其他变量名`clz`, `cls`等
代码实现
```java
public class Student {
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
/*
定义一个Student类
属性:姓名,年龄
定义一个测试类
在测试类中通过三种方式获取Student类的字节码对象,分别为clazz1、clazz2、clazz3,分别比较这三个对象是否相等
*/
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
Student student = new Student();
// 方式1: 对象名.getClass()
Class class1 = student.getClass();
// 方式2: 类名.class
Class class2 = Student.class;
// 方式3: Class.forName("类的全名")
Class class3 = Class.forName("com.test.Student");
System.out.println(class1 == class2); // true
System.out.println(class1 == class3); // true
System.out.println(class2 == class3); // true
// 一个类的字节码对象只有唯一一个, 无论通过什么方式获取
}
}
```
一键复制
编辑
Web IDE
原始数据
按行查看
历史