java获取当前字节码对象_获取字节码对象的3种方式.md

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

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值