Java基础:Java 注解(Annotation)及使用
Java 注解(Annotation)是 JDK 1.5 引入的特性,与类、接口、枚举是在同一等级。它可以作用在类、属性、方法、局部变量、方法参数上,用于对这些元素进行说明,注释,解释。
注解在功能上可以看成是一个接口,注解实例就是一个实现该接口的动态代理类,可在方便在程序运行期间通过反射获取该字段或方法的注解的实例,来决定下一步如何处理。
Java 注解(Annotation)是 JDK 1.5 引入的特性,与类、接口、枚举是在同一等级。它可以作用在类、属性、方法、局部变量、方法参数上,用于对这些元素进行说明,注释,解释。
注解在功能上可以看成是一个接口,注解实例就是一个实现该接口的动态代理类,可在方便在程序运行期间通过反射获取该字段或方法的注解的实例,来决定下一步如何处理。
JSR 303是 Java 为Bean数据合法性校验提供的一个标准规范,叫做Bean Validation
,随JavaEE 6
发布。官方参考实现是Hibernate Validator
。
Bean Validation为Java Bean定义了相应的数据类型和API,在应用中通过在Bean
属性上标注类似于@NotNull, @Max
等标准的注解指定校验规则,并通过验证接口对 Bean 进行验证。
该校验框架是一个运行时框架,在验证之后验证的错误信息被马上返回;核心接口是javax.validation.Validator
,该接口根据目标对象类中所标注的校验注解进和地数据校验,并得到校验结果。
该标准目标有两个实现:Hibernate Validator
和Apache bval
,使用较多的是前者。
JSR 303官方标准:https://jcp.org/en/jsr/detail?id=303
反射(Reflection
)是 Java 中的一种工具,即运行态的 Java
程序可获取任意一个对象的信息,并且可以操作类或对象的内部属性(类型、属性、方法)。
程序中一般的对象的类型都是在编译期就确定下来的,而Java反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。
反射的核心是JVM
在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。反射是相对常规的通过new
来创建对象方式的反操作的称呼。
实际上,只有当程序需要动态创建某个类的对象时才会考虑使用反射,通常在开发通用性比较广的框架、基础平台时可能会大量使用反射。
链式编程可以点点点出属性,通过返回对象本身(this
)可以调用本身的属性。
一般在创建对象并给属性赋值时使用。
这种方式使用会越来越多,很多Apache工具如HttpClient里给RequestConfig
赋值,JDK里面有些类或方法也使用,如:StringBuffer
的 append()
方法。
try...catch...finally
基本大家都会用,也很少出问题,但当 try 语句块里增加存在return
或System.exit()
时会怎么处理,可能就有些疑惑和不确定了,下面来演示下这两种情况。
项目中有用到读取 XML
文件数据到 InputStream
,因对getResourceAsStream(String path)
的用法不够了解,读到的总是空,问题已解决,总结如下。
首先明白类加载三个阶段:加载,连接,初始化。连接阶段还分了三个步骤:验证,准备,解析。
类加载器就是寻找类的字节码文件并构造出类在JVM内部表示对象的组件。
类加载工作由ClassLoader
及其子类负责。ClassLoader
是一个重要的Java
运行时系统组件,它负责在运行时查找和装入Class
字节码文件。
VO、DTO、DAO、PO、BO、DO
:实际开发可能各种O
的使用也没有明确的界线,有时并没有分的很表楚。
各种O
的分离更多是从设计层面
上来理解,即数据经过各个层并与之对应的关系称呼。
当然理解了各种O的用途,在理解一些严谨的代码和数据流程是非常方便的。