当前位置: 首页 > article >正文

Java中的几个元老 Object Class 和 @Retention

Java是面向对象型语言所有的类型的父类是Object ,而表示类型的元对象又是Class, Java支持注解后所有注解的元注解是@Retention

一、Object

在Java中,所有的类,包括数组,都是Object类的子类。这是因为Java不支持多重继承,但可以实现多个接口。因此,为了保证所有的类都能被Object类的方法操作,所有的类都被视作Object的子类。

在Java中,所有的类都直接或间接地继承了java.lang.Object类,因为它是所有对象的基类。这意味着Object是Java对象层次结构的根类,所有对象(包括数组)都直接或间接地继承了Object类的方法。

以下是Object类的一些常用方法:

  1. equals(Object obj): 判断指定的对象是否等于此对象。

  2. hashCode(): 返回该对象的哈希码值。

  3. toString(): 返回该对象的字符串表示。

  4. getClass(): 返回此Object的运行时类。

  5. wait(): 使当前线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法。

  6. notify(): 唤醒在此对象监视器上等待的单个线程。

  7. notifyAll(): 唤醒在此对象监视器上等待的所有线程。

由于所有的类都默认继承了Object类,因此你不需要显式地声明继承Object类。

二、Class

Class 是 Java 中的一个关键字,它是 Java 反射机制的核心,用来表示类的类型。通过 Class 对象,我们可以获取类的相关信息,比如类名、属性、方法等。

以下是一些使用 Class 关键字的常见方法:

  1. 通过 .class 语法获取 Class 对象:

Class<MyClass> clazz = MyClass.class;
  1. 使用 Class.forName() 方法动态加载类并获取 Class 对象:

try {
    Class<?> clazz = Class.forName("com.example.MyClass");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}
  1. 使用 Class 对象创建实例(需要无参构造函数):

Class<MyClass> clazz = MyClass.class;
MyClass obj = clazz.newInstance();
  1. 使用 Class 对象获取方法和构造函数信息:

Class<MyClass> clazz = MyClass.class;
Method[] methods = clazz.getMethods();
Constructor<?>[] constructors = clazz.getConstructors();

三、@Retention

1、介绍:
@Retention是用来修饰注解的,注解的注解,也称为元注解

2、作用:
@Retention修饰注解,用来表示注解的生命周期,生命周期的长短取决于@Retention的属性RetentionPolicy指定的值,例如@Retention(RetentionPolicy.RUNTIME)

 

RetentionPolicy.SOURCE

表示注解只保留在源文件,当java文件编译成class文件,就会消失

源文件

只是做一些检查性的操作,,比如 @Override 和 @SuppressWarnings

RetentionPolicy.CLASS

注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期

class文件(默认)

要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife)

RetentionPolicy.RUNTIME

注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在

运行时也存在

需要在运行时去动态获取注解信息

上面三种类型生命周期:SOURCE<CLASS<RUNTIME,使用RUNTIME会包含前面两个生命周期


http://www.kler.cn/a/513093.html

相关文章:

  • 游戏AI,让AI 玩游戏有什么作用?
  • 记一次数据库连接 bug
  • KVM创建ubuntu20.04虚机,部署K8S,再克隆出二份,做为Worker节点加入集群,通过Helm创建2个Pod,让它们之间通过域名互访
  • 深入探索Python人脸识别技术:从原理到实践
  • 迈向 “全能管家” 之路:机器人距离终极蜕变还需几步?
  • Syncthing在ubuntu下的安装使用
  • 使用 Helm 部署 RabbitMQ 高可用集群(HA)
  • 1.2.神经网络基础
  • @LoadBalanced注解的实现原理
  • 打游戏时总是“红网”怎么回事,如何解决
  • C# 网络协议第三方库Protobuf的使用
  • 【EdgeAI实战】(1)STM32 边缘 AI 生态系统
  • 软件工程的原则
  • SpringBoot笔记(1)
  • spring自动装配常用注解
  • ipad和macbook同步zotero文献附件失败的解决办法
  • influxdb+grafana+jmeter
  • 软件测试丨Redis 的数据同步策略以及数据一致性保证
  • 常见Arthas命令与实践
  • github配置ssh连接
  • Java 在包管理与模块化中的优势:与其他开发语言的比较
  • 深入理解 JVM 的垃圾收集器:CMS、G1、ZGC
  • 【Rabbitmq】Rabbitmq高级特性-发送者可靠性
  • (3)STM32 USB设备开发-USB存储设备
  • GoFrame 缓存组件
  • 为医院量身定制做“旧改”| 全视通物联网智慧病房