注解

​https://zhuanlan.zhihu.com/p/85612062​

注解的作用

用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。

ps:元数据的概念
(1)元数据在开发中的作用就是做数据约束和标准定义,可以将其理解成代码的规范标准(代码的模板);
(2)代码的模板(元数据)不直接影响代码的执行,它只是帮助我们来更快捷的开发;

注解的本质

是个接口

注解的分类

(1)java自带的注解(@Overide @Deprecated @SuppressWarnings @Documented 等)
(2)元注解:用于注解annotation的注解叫元注解
(3)自定义的注解

元注解

@Target:注解的作用目标
@Retention:注解的生命周期
@Documented:注解是否应当被包含在 JavaDoc 文档中
@Inherited:是否允许子类继承该注解

@Target

@Target(value = {ElementType.FIELD})

ElementType.TYPE:允许被修饰的注解作用在类、接口和枚举上
ElementType.FIELD:允许作用在属性字段上
ElementType.METHOD:允许作用在方法上
ElementType.PARAMETER:允许作用在方法参数上
ElementType.CONSTRUCTOR:允许作用在构造器上
ElementType.LOCAL_VARIABLE:允许作用在本地局部变量上
ElementType.ANNOTATION_TYPE:允许作用在注解上
ElementType.PACKAGE:允许作用在包上

@Retention

RetentionPolicy.SOURCE:当前注解编译期可见,不会写入 class 文件
RetentionPolicy.CLASS:类加载阶段丢弃,会写入 class 文件
RetentionPolicy.RUNTIME:永久保存,可以反射获取

反射

除了使用new创建对象之外,还可以用什么方法创建对象?

使用java反射创建对象

反射的实现方式

第一步:获取Class对象,有4中方法:

1)Class.forName(“类的路径”);

2)类名.class

3)对象名.getClass()

4)基本类型的包装类,可以调用包装类的Type属性来获得该包装类的Class对象

// 方式1:forName
Class<?> clazz = Class.forName("包名+类名");
// 方式2:
Class clazz2 = Child.class;
//方式3:
Child child = new Child();
Class clazz3 = child.getClass();

反射的作用

反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。
这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制

利用反射动态创建对象实例

Class 对象的 newInstance()

1 使用 Class 对象的 newInstance()方法来创建该 Class 对象对应类的实例,但是这种方法要求该 Class 对象对应的类有默认的空构造器。

2 调用 Constructor 对象的 newInstance()

先使用 Class 对象获取指定的 Constructor 对象,再调用 Constructor 对象的 newInstance()方法来创建 Class 对象对应类的实例,通过这种方法可以选定构造方法创建实例。

java 的注解 反射 http 协议 socket_创建对象