java interface作用是什么_关于Java反射原理:

d664426990cfc0a54d5ebf6bfc791147.png

一.反射机制介绍_Class 对象获取

简介:

反射机制是 Java 的动态性之一动态语言:在程序运行时,可以改变程序的结构或变量类型。

那些语言被称为动态语言呢?

典型的动态语言”Python、ruby、JavaScripC,C++,Java 不是动态语言,但具有一定的动态性,可以称为”准动态语言”,具备类似动态语言的特性。传一块代码来动态的执行,动态的处理,Java 也能做,可以利用反射来实现类似的功能。Java的动态性让编程变得更加的灵活,功能就更加的强大。

4e5082febf5bf9fe8ae1169ef59cb20d.png

反射机制:

1.反射机制程序在运行的过程中加载一些“只知道相关名字”的类,以下代码,在程序运行时加载 User 类。Class c=Class.forName("com.msk.reflect.User");一个类被加载后,JVM 会创建一个对应类的 Class 对象,类的整个结构信息会被放到 Class 对象中。这个 Class 对象就像镜子一样,通过这面镜子,可以得到对应类的全部信息。

反射机制的常见作用:

1.动态的加载类、动态的获取类的信息(属性,方法,构造器).

2.动态构造对象.

3.动态调用类和对象的任意方法、构造器.

4.动态调用和处理属性.

5.获取泛型信息.

6.处理注解.

获取 Class 对象的方式:

1.通过字节码文件.

2.对象的 getClass()方法.

3.Class 类的静态方法 forName(….).

d14e81d3318d05654ef46c2e10055e03.png

二,反射机制动态操作_方法_属性_构造器.

获取类的名字:

1.String getName() 获得包名+类名.

2.String getSimpleName() 获得类的名字.

获得类的属性:

1.Field getField(String fieldName) 得到公共的属性对象.

2.Field getDeclareField(String fieldName) 得到指定名称的属性对象.

3.Field []c.getDeclaredFields() 得到所有的属性对象.

4eb3efb91cd532cb69fac1193a53a424.png

获得类的方法:

1.Method[] getDeclaredMethods() 得到公共的方法对象.

2.Method[] c.getMethods() 得到父类及本类中的公共的方法对象.

3.Method getDeclaredMethod(StringmethodName, Class …type)得到指定名称的本类中公共的方法.

4.Method getMethod(String methodName,Class type)得到本类或父类中的公共的方法对象.

获得构造方法:

1.Constructor[] getDeclaredConstructors() 得到公共的构造方法的对象.

2.Constructor [] getConstructors() 得到公共的构造方法对象.

3.Constructor

getDeclaredConstructor(Class...type)得到指定参数的公共的构造方法对象.

074f06a3873f77836d4dd9c316eac9f4.png

三,提高反射效率:

反射机制对程序的运行在性能上有一定的影响,速度慢

如何提高反射的性能:

1:通过 setAccessible 提高性能.

a:setAccessible 启用和禁用访问安全检查的开关,值为true 则指示反射的对象在使用时应该取消 Java 语言访问检查,值为 false 则指示反射的对象不实施 Java 语言访问检查,并不是为 true 就能访问为 false 就不能访问.

b:禁止安全检查,可以提高反射的运行速度.

四,反射操作泛型:

泛型:

Java中的泛型仅仅是给编译器 javac 使用的,确保数据的安全性和免去强制类型转换的麻烦,但是一旦编译完成,所有与泛型有关的类型全部擦除。使用泛型直接读取泛型,是读取不到的,因为反射是操加载以后的类的。

Java 新增的数据类型:

为了通过反射操作这些类型以迎合实际开发的需要:

1.ParameterizedType: 表 示 一 种 参 数 化 的 类 型 ,比 如Collection<String>,可以获取 String 信息

2.GenericArrayType:泛型数组类型

3.TypeVariable:各种类型变量的公共父接口

4.WildcardType:代表一种通配符类型表达式,比如:extends Number,super Integer.(Wildcard 是一个单词,就是通配符).

ac4d6cf635c555895b3e944d924e3274.png

ed7ecbd719d6b6b459d3878a04457db9.png

五,注解的作用

1.不是程序本身,可以对程序作出解释。(这一点跟注释没什么区别)

2.可以被其他程序(比如:编译器等)读取。(注解信息处理流程,是注解和注释的重大区别,如果没有注解信息处理流程,则注解毫无意义)

常见的内容注解:

1.@Override :标识方法是重写的方法

2.@Deprecated :标识的方法不建议使用

3.@SuppressWarnings:用来抑制编译时的警告信息,@SuppressWarinings 需要提供参数才能正常使用,这些参数都是已经定义好的,我们只需要选择就可以了

六,自定义注解

自定义注解的语法:

使 用 @interface 定 义 自 定 义 注 解 时 , 自 动 继 承 java.lang.annotation.Annotation 接口.

1.@interface 用来声明一个注解

2.其中的每一个方法实际上是声明了一个配置参数

a.方法的名称就是参数的名称

b.返回值类型就是参数类型(返回值类型只能是基本类型、Class、String、enum)

c.可以通过 default 来声明参数的默认值

d.如果只有一个成员,一般参数名为 value

注意事项:注解元素必须要有值。我们定义注解元素时,经常使用空字符串,0 作为默认值。也经常使用负数(比如-1)表示不存在的含义.

元注解;

元注解的作用就是负责注解其他注解。

在 Java 中定义了 4个标准的 meta-annotation 类型,它们被用来提供对其它annotation 类型作说这些类型和它们所支持的类在 java.lang.annotation 包中可以找到

1.@Target

2.@Retention

3.@Documented

4.@Inherited

ed7ecbd719d6b6b459d3878a04457db9.png

a2b8edec4c9cac8774788d964573f2e2.png

0a51f744365a1fee70d0ac7bc8ed7976.png

七,反射读取注解信息

ORM:对象关系映射.

1.类与表结构对应.

2.属性和字段对应.

3.对象和记录对应.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值