Java基础笔记(注解)

1 注解

注解是放在Java源码的类、方法、字段、参数前的一种标签。
注解本身对代码的逻辑没有任何影响,如何使用注解是由工具决定的,比如编译器可以使用注解,它可以使用JDK定义的注解,注解本身对代码没有影响,但写了注解,编译器可以帮我们检查问题,不写就不检查,JDK定义的常用注解有:

  • @Override:让编译器检查该方法是否正确地实现覆写
  • @Deprecated:告诉编译器该方法已经作废,在别处使用会出现警告
  • @SuppressWarning:取消警告

1.1 定义注解

使用注解的时候可以传入配置参数,配置参数在创建注解类型时定义,配置参数可以包括:

  • 所有基本类型
  • String
  • 枚举类型
  • 基本类型的数组

传入配置参数必须是常量而不能是变量,如果缺少某个配置参数将使用默认值,如果只写常量,相当于将该常量赋值给 value 参数,如果只写注解,相当于全部使用默认值。

定义注解的时候,使用 @interface 定义注解

  • 注解的参数声明类似声明一个无参数方法
  • 可以设定一个默认值
  • 推荐把最常用的参数命名为 value

eg:

public @interface Report {
	int type() default 0;
	String value() default "";
}

1.1.1 元注解

有一些注解可以修饰其他的注解,把这些注解称为元注解。

1.1.1.1 @Target 注解

使用 @Target 注解可以规定被修饰的注解能应用在源码的哪个位置:

  • ElementType.TYPE:类或接口
  • ElementType.FIELD:字段
  • ElementType.METHOD:方法
  • ElementType.CONSTRUCTOR:构造方法
  • ElementType.PARAMETER:方法参数

eg:

@Target({
	ElementType.FIELD,
	ElementType.METHOD
})
public @interface Report {
	int type() default 0;
	String value() default "";
}
1.1.1.2 @Retention 注解

@Retention 用于定义被修饰注解的生命周期:

  • RetentionPolicy.SOURCE:仅编译期,编译器在编译的时候直接丢弃,比如 @Override
  • RetentionPolicy.CLASS:仅 class 文件,该注解仅存在 class 文件中,不会被读取,有些工具可以处理 class 文件,这些工具就可以读取这个注解
  • RetentionPolicy.RUNTIME:仅运行期,在运行期可以通过代码读取该注解

如果没有 @Retention 注解,那么注解本身的生命周期默认为 CLASS,通常自定义的注解应该都是 RUNTIME

1.1.1.3 Repeatable 注解

Repeatable 注解修饰的注解可以重复注解,比如:

@Repeatable
@Target(ElementType.TYPE`)
public @interface Report {
	int type() default 0;
	String value() default "";
}

// 重复使用
@Report(type=1)
@Report(type=2)
public class Hello {
}

1.2 处理注解

因为通常写的代码并不涉及到编译器,class 文件中的注解也很少会用到,所以这里处理的注解主要针对的是运行期可以被读取的注解,也就是 Runtime 类型的注解。
如何读取 Runtime 的注解?方法是通过 反射
因为 Annotaion 也是 class,所有的 Annotation 都继承自 java.lang,annotation.Annotation,使用 反射API 就可以获取这些 Annotation
使用 反射API 确定一个 Annotation(注解)是否存在:

  • Class.isAnnotationPresent(Class)
  • Field.isAnnotationPresent(Class)
  • Method.isAnnotationPresent(Class)
  • Constructor.isAnnotationPresent(Class)

eg:

Class cls = Person.class;
// 判断 @Report 是否存在
cls.isAnnotationPresent(Report.class); // 返回布尔值

使用 反射API 获取一个 Annotation(注解):

  • Class.getAnnotation(Class)
  • Field.getAnnotation(Class)
  • Method.getAnnotation(Class)
  • Constructor.getAnnotation(Class)

eg:

class cls = Person.class;
Report report = cls.getAnnotion(Report.class); // 如果不存在,返回 null
int type = report.type();

详情通过反射读取注解,处理注解的代码,可以查看我的github

获取方法参数的 Annotation 比较麻烦,因为一般的方法可能有多个参数,同时参数本身也可以有多个注解,此时使用的是 Method.getParemterAnnotations() 方法获取一个 Anntation 的二维数组,第一个维度代表的是参数的个数,第二个维度代表的是每个参数本身自带的注解个数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一份5000字的Java基础笔记,希望对你有所帮助。 # Java基础笔记 Java是一种面向对象的编程语言,由Sun Microsystems于1995年开发并推出。目前Java已经成为了全球最流行的编程语言之一,广泛应用于企业级应用程序、移动应用程序、Web应用程序等领域。 ## 一. Java开发环境 Java开发环境包括以下几个方面: 1. JDK:Java开发工具包,包括Java编译器、Java虚拟机、Java API等。 2. IDE:集成开发环境,提供了代码编辑器、调试器、代码自动完成、重构等功能。 3. 构建工具:用于编译、打包、测试和发布Java程序的工具,常用的构建工具有Maven、Gradle等。 4. 版本控制工具:用于管理代码版本的工具,常用的工具有Git、SVN等。 ## 二. Java基本语法 ### 1. 变量 Java变量分为基本类型和引用类型。基本类型包括byte、short、int、long、float、double、char、boolean等,引用类型包括类、接口、数组等。 Java变量的声明格式为:数据类型 变量名 = 初始值; 例如: ``` int age = 18; String name = "Tom"; ``` ### 2. 运算符 Java支持的运算符包括算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符等。 算术运算符:+、-、*、/、%(取模) 赋值运算符:=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、>>>= 关系运算符:==、!=、>、<、>=、<= 逻辑运算符:&&、||、! 位运算符:&、|、^、~、<<、>>、>>> ### 3. 控制语句 Java支持的控制语句包括if语句、switch语句、while循环、do-while循环、for循环、break语句、continue语句等。 if语句的语法格式如下: ``` if (condition) { // do something } else if (condition) { // do something } else { // do something } ``` switch语句的语法格式如下: ``` switch (expression) { case value1: // do something break; case value2: // do something break; default: // do something break; } ``` while循环的语法格式如下: ``` while (condition) { // do something } ``` do-while循环的语法格式如下: ``` do { // do something } while (condition); ``` for循环的语法格式如下: ``` for (initialization; condition; update) { // do something } ``` break语句用于终止循环,continue语句用于跳过当前循环。 ### 4. 方法 Java中的方法是一段可重复使用的代码块,用于实现特定的功能。方法可以接受参数并返回值。 方法的声明格式如下: ``` 修饰符 返回类型 方法名(参数列表) { // do something return 返回值; } ``` 例如: ``` public static int add(int a, int b) { return a + b; } ``` ### 5. 类与对象 Java是一种面向对象的编程语言,所有的程序都是由对象组成的。 类是一种用于描述对象的抽象,它包含属性和方法。对象是类的实例化。 类的声明格式如下: ``` 修饰符 class 类名 { // 属性 // 方法 } ``` 例如: ``` public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } } ``` ### 6. 继承与多态 Java支持继承和多态。继承是指一个类继承另一个类的属性和方法,可以减少代码的重复。多态是指同一种类型的对象,在不同的情况下表现出不同的行为。 继承的声明格式如下: ``` 修饰符 class 子类名 extends 父类名 { // 属性 // 方法 } ``` 例如: ``` public class Student extends Person { private String school; public Student(String name, int age, String school) { super(name, age); this.school = school; } public String getSchool() { return this.school; } public void setSchool(String school) { this.school = school; } } ``` 多态可以通过方法重载和方法重写实现。 方法重载是指在一个类中定义多个同名的方法,但是参数类型或数量不同,可以根据不同的参数类型或数量调用不同的方法。 方法重载的声明格式如下: ``` 修饰符 返回类型 方法名(参数列表) { // do something } ``` 方法重写是指在子类中重新定义父类中已经定义的方法,可以改变方法的行为。 方法重写的声明格式如下: ``` 修饰符 返回类型 方法名(参数列表) { // do something } ``` ## 三. Java标准库 Java标准库是由Sun Microsystems提供的一套标准库,包含了各种类和接口,可以方便地实现各种功能。 Java标准库包括以下几个方面: ### 1. Java.lang包 Java.lang包包含了Java语言的基本类和接口。其中常用的类包括Object、String、StringBuilder、Math、System等。 ### 2. Java.util包 Java.util包包含了一些常用的工具类,包括ArrayList、HashMap、HashSet等。 ### 3. Java.io包 Java.io包包含了Java的输入输出类和接口,可以方便地进行文件和流的操作。 ### 4. Java.net包 Java.net包包含了Java的网络编程类和接口,可以方便地进行网络通信。 ### 5. Java.awt包和Java.swing包 Java.awt包和Java.swing包包含了Java的图形用户界面类和接口,可以方便地实现各种图形界面应用程序。 ## 四. Java高级特性 ### 1. 泛型 Java泛型是一种参数化类型的概念,可以让类和方法在定义时指定参数类型,在使用时可以不用指定具体的类型。泛型可以提高程序的可读性和可维护性。 泛型的声明格式如下: ``` 修饰符 class 类名<T> { // 属性 // 方法 } ``` 例如: ``` public class ArrayList<T> { // 属性 // 方法 } ``` ### 2. 反射 Java反射是一种动态获取类信息的机制,可以在程序运行时获取类的属性和方法,并动态调用。 Java反射可以用于编写通用的代码,也可以用于框架的实现。 ### 3. 注解 Java注解是一种用于在程序中添加元数据的机制,可以用于描述类、方法、变量等元素的信息。 Java注解可以用于编写通用的代码,也可以用于框架的实现。 ### 4. Lambda表达式 Java Lambda表达式是一种函数式编程的概念,可以让代码更加简洁、可读性更高。 Lambda表达式的格式如下: ``` (parameter1, parameter2, …) -> { statements } ``` 例如: ``` (int a, int b) -> { return a + b; } ``` ### 5. 流式API Java 8引入了流式API,可以方便地进行集合的处理。流式API可以提高程序的可读性和可维护性。 流式API的基本操作包括过滤、映射、排序、统计等。 例如: ``` List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream() .filter(n -> n % 2 == 0) .map(n -> n * 2) .reduce(0, Integer::sum); ``` ## 五. Java编程规范 Java编程规范是一种用于规范Java程序代码风格的约定。遵守Java编程规范可以提高程序的可读性和可维护性。 Java编程规范包括以下几个方面: ### 1. 命名规范 Java中的命名规范包括类名、方法名、变量名等。类名和方法名采用驼峰命名法,变量名采用小写字母和下划线。 例如: ``` public class Person { private String name; private int age; public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } } ``` ### 2. 代码风格 Java中的代码风格包括缩进、空格、代码块等。建议采用4个空格缩进,代码块使用花括号。 例如: ``` public class Person { private String name; private int age; public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } } ``` ### 3. 注释规范 Java中的注释规范包括单行注释和多行注释。建议在代码中添加注释,描述代码的功能和作用。 例如: ``` /* * Person类 */ public class Person { private String name; // 姓名 private int age; // 年龄 /* * 获取姓名 * @return 姓名 */ public String getName() { return this.name; } /* * 设置姓名 * @param name 姓名 */ public void setName(String name) { this.name = name; } /* * 获取年龄 * @return 年龄 */ public int getAge() { return this.age; } /* * 设置年龄 * @param age 年龄 */ public void setAge(int age) { this.age = age; } } ``` ## 六. 总结 Java是一种面向对象的编程语言,广泛应用于企业级应用程序、移动应用程序、Web应用程序等领域。Java具有丰富的类库、高效的垃圾回收机制和优秀的跨平台性能。 本文介绍了Java的基本语法、标准库、高级特性和编程规范。希望对Java初学者有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值