Java 知识量:11 - 45 - 220
枚举(enum)是一种特殊的数据类型,用于定义有限个特定的值。它们是预定义的,不能创建新的枚举值,除非在定义枚举时明确地指定了这些值。
以下是一个枚举的基本例子:
public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
在这个例子中,Day是一个枚举类型,SUNDAY、MONDAY等是Day类型的七个预定义值。
枚举在Java中有很多用途。例如,它们可以用于switch语句,以替代一系列的if-else语句。它们也可以用于定义一组有限的值,比如一周的七天或者一年的十二个月。
每个枚举常量都是公开的、静态的、最终的字段,并且每个都是枚举类型的实例。枚举类型还有一些其他的特性,比如它们可以有构造器、方法和字段。这使得枚举可以比一组整型或字符串常量提供更多的功能。
例如,以下是一个更复杂的枚举例子,它包含一个构造器、一个方法和一个字段:
public enum Planet { MERCURY(3.303e+23, 2.4397e6), VENUS(4.869e+24, 6.0518e6), EARTH(5.976e+24, 6.37814e6), MARS(6.421e+23, 3.3972e6); private final double mass; // in kilograms private final double radius; // in meters // universal gravitational constant (m3 kg-1 s-2) public static final double G = 6.67300E-11; // constructor Planet(double mass, double radius) { this.mass = mass; this.radius = radius; } public double getMass() { return mass; } public double getRadius() { return radius; } // universal gravitational constant (m3 kg-1 s-2) public double surfaceGravity() { return G * mass / (radius * radius); } }
在这个例子中,Planet是一个枚举类型,MERCURY、VENUS、EARTH和MARS是四个预定义的Planet值。每个Planet都有一个mass和radius字段,以及一个用于计算表面重力的方法。
Java 注解(Annotation)是一种用于提供元数据的机制,它可以在编译时或运行时被访问。Java 注解是从 Java 5 开始引入的,它可以用于类、方法、变量、参数和包等元素上。
Java 注解的基本语法如下:
@annotation_name(attribute1 = value1, attribute2 = value2, ...)
其中,annotation_name 是注解的名称,attribute1、attribute2 等是注解的属性,value1、value2 等是属性值。
Java 注解有多种类型,包括:
标记注解(Marker Annotation):没有属性的注解,用于标记某个元素。
单值注解(Single-Value Annotation):只有一个属性的注解,用于为某个元素提供一个值。
完整注解(Complete Annotation):有多个属性的注解,用于为某个元素提供多个值。
Java 注解的作用域可以是:
源代码级别(SOURCE):注解只在源代码中存在,编译时会被丢弃。
类级别(CLASS):注解在编译时存在,运行时会被丢弃。
运行时级别(RUNTIME):注解在运行时存在,可以通过反射获取。
Java 中内置了一些注解,如 @Override、@Deprecated 等,也支持自定义注解。自定义注解需要使用 @interface 关键字定义,并可以添加属性。
Java支持自定义注解。下面是一个简单的自定义注解的例子:
import java.lang.annotation.*; // 定义一个运行时可见的注解 @Retention(RetentionPolicy.RUNTIME) // 定义一个注解,可以应用于类、方法、变量等 @Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD}) public @interface MyAnnotation { // 定义一个名为"value"的属性,其值为String类型 String value(); }
在这个例子中,定义了一个名为MyAnnotation的注解,它有一个属性value,类型为String。这个注解可以应用于类、方法和变量上。
接下来,可以使用这个注解:
@MyAnnotation("这是一个自定义注解的示例") public class MyClass { // ... }
在这个例子中,在MyClass类上应用了MyAnnotation注解,并为其value属性赋值为"这是一个自定义注解的示例"。
注意:Java的注解不会自己有任何行为。它们只是元数据,可以被其他工具或代码读取和处理。例如,写一些代码来处理这个注解,或者使用一些工具来查看注解的信息。
要使用类型注解,首先需要定义一个注解。以下是一个示例,定义了一个名为@NonNull的注解,它可以用于表示一个类型应该是非空的:
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.TYPE_USE) @Retention(RetentionPolicy.RUNTIME) public @interface NonNull { }
这个注解被定义为@Target(ElementType.TYPE_USE),这表示它可以用在任何类型使用的地方,如变量声明、方法参数、返回值等。
然后,可以在任何类型使用的地方使用这个注解,如下所示:
public class Example { @NonNull String nonNullString; void method(@NonNull String param) { ... } }
在这个例子中,@NonNull注解被用于表示nonNullString变量和method方法的参数应该是非空的。如果试图给这些变量或参数赋一个空值(如null),那么编译器会发出警告。
此外,类型注解也可以用于增强现有的代码。例如,如果有一个现有的Java库,可以为它的方法参数或返回值添加类型注解,以表示这些值应该是非空的。然后,可以使用工具来检查这个库的使用,以确保所有的非空注解都被正确地处理。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6