必威体育Betway必威体育官网
当前位置:首页 > IT技术

java反射机制和动态代理之反射机制(一)

时间:2019-08-06 19:14:30来源:IT技术作者:seo实验室小编阅读:57次「手机版」
 

java反射机制

(之前这篇文章写过了,不知道为什么发表的时候报了404错误,导致心情不好,又重新写的。)

先来一段百度百科的关于反射的定义:

java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

JAVA反射(放射)机制:"程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言"。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods

在java中反射是很重要的,在现在的很多框架中也都运用了反射的概念,比如Spring中的aop机制就是利用反射原理,动态代理,其实说起动态代理就必须要说反射。在写java我们使用对象的时候一般都是使用new的方式来创建对象,这些将要在程序中使用的对象在编译期间都已经知道了,但是编译期间和运行期间还不一样。假如有类Person,Student类extends了Person(都有空构造函数),Person person=new Stuednt();在编译的时候person是Person类型的,但是在运行的时候确实Student的,有时候我们在程序运行期间根据类去生成相应的对象然后进行一系列的操作,这就是反射,所谓的反射个人理解就是在JVM运行期间通过查找到相应的类,通过类获取其属性以及方法来创造对象。

通过反射创造类的方式有一下方式:

有类Person

package com.tlc.Person;

public class Person{

private String name;

private String sex;

private integer age;

public Person(){};

public Person(String name,String sex,Integer age){

this.name=name;

this.sex=sex;

this.age=age;

}

};

①:Person person=new Person();Class clazz=person.getClass();

②:Person person=new Person();Class clazz=person.class;

③:Class clazz=Class.formName("com.tlc.Person");

前两种都是通过获取对象的方式来获取Class类,在实际中假如需要使用反射一般都不会使用前两种,而是使用第三种的Class的静态方法来获取。

获取到class对象之后可以创建实例,查看源码可以知道使用newinstance()或者newInstance(Object....params)分别介绍一下这两种方式,如果没有那种必须要在构造函数中初始化数据的要求,一般使用newInstance()即可够用。

①:使用newInstance()方式类中必须要有默认的空构造函数或者显示的空构造函数Person person=(Person)clazz.newInstance(),如果没有空的构造函数会报错。

②:使用带参数的构造函数必须要获取到对应的构造函数,这里给大家推荐另外一篇博文:获取构造函数

Constructor constructor=clazz.getConstructor(Class<?>...parametersType),必须要有这种参数顺序的构造函数否则就会这偶不到报错,Person person=constructor.newInstance()或者通过有参构造函数来获取即Person person=constructor.newInstance(name,sex,age);对于对象的操作肯定就是对属性的赋值和读取操作了,这时候就要获取其filed,可以通过如下的操作的方式获取以及操作filed,参考此篇博文:操作类的field

相关阅读

数据结构与算法分析(Java语言描述)—— 树

1.二叉树 1.1 简述 二叉树(binary tree)是一棵树,其中每个节点都不能有多于两个的儿子 左图显示一棵由一个根和两棵子树组成的二

javascript各种效果

1.实现tab切换效果这个功能是很久之前实现的,现在发上来,很长一段时间没更新博客了,真惭愧。这个JS代码还有很多修改的空间,先发上来,

javascriptwindow对象setInterval()事件

<!DOCTYPE html> <html> <head> <title>dom1.html</title> <meta http-equiv="keywords" content="keyword1,keyword

java 虚拟机面试题全面解答

###[转载出处:](https://blog.csdn.net/yano_nankai/article/details/50957578) 本文固定链

Java中的注解 - @NotNull

比如说,你写了一个后台系统,接收用户的请求,经过运算后返回结果,很通用的一个实现方案。假定所有的方法都需要校验参数是否为空,不然就

分享到:

栏目导航

推荐阅读

热门阅读