博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java反射机制
阅读量:5937 次
发布时间:2019-06-19

本文共 1376 字,大约阅读时间需要 4 分钟。

hot3.png

一、何为java反射机制

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

JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。

现在很多开框架都用到反射机制,hibernate、struts都是用反射机制实现的。

二、主要提供一下功能 

在运行时判断任意一个对象所属的类

在运行时构造任意一个类的对象

在运行时判断任意一个类所具有的成员变量和方法

eg:

//根据资源ID名(也就是图像资源的文件名)获得Field对象

Field field = R.drawable.class.getField(name);
//取得并返回资源ID
return Integer.parseInt(field.get(null).toString());

在运行时调用任意一个对象的方法

生成动态代理

三、获取途径

1)运用getClass()

注:每个class 都有此函数

String str = "abc";

Class c1 = str.getClass();

2)运用Class.getSuperclass()

Button b = new Button();

Class c1 = b.getClass();

Class c2 = c1.getSuperclass();

3)运用static method------Class.forName()(最常被使用)

Class c1 = Class.forName ("java.lang.String");

Class c2 = Class.forName ("java.awt.Button");

Class c3 = Class.forName (".LinkedList$Entry");

Class c4 = Class.forName ("I");

Class c5 = Class.forName (".class");

4)运用primitive wrapper classes的TYPE 语法

Class c1 = Boolean.TYPE;

Class c2 = Byte.TYPE;

四、优缺点

其实直接创建对象也可以满足上面的需要,为什么还要使用反射机制呢?

这个涉及到动态与静态的概念

静态编译:在编译时确定类型,绑定对象,即通过。 

动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,有以降低类之间的藕合性。 

反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中它的灵活性就表现的十分明显。

说白了,反射机制就是专门帮我们做那些重复的有规则的事情

它的缺点是对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么,并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。换句话说就是慢半拍

 

转载于:https://my.oschina.net/carbenson/blog/415140

你可能感兴趣的文章
手机H5显示一像素的细线
查看>>
Menu 菜单栏
查看>>
Integer跟int的区别(备份回忆)
查看>>
集合解析
查看>>
详解分布式应用程序协调服务Zookeeper
查看>>
windows下python2和python3共存
查看>>
奇幻RPG(人物构建 与 Abstract Factory模式)
查看>>
转JS技巧
查看>>
计划(持续更新)
查看>>
Python之几种常用模块
查看>>
二分查找
查看>>
.Net变量命名
查看>>
用R画海盗袭击区域的.gif图
查看>>
c#异步--async和await的使用
查看>>
MySQL学习(十二)
查看>>
Ubuntu 12.04 搭建TFTP服务器
查看>>
if语句
查看>>
234. Palindrome Linked List
查看>>
Webpack代理proxy配置,解决本地跨域调试问题,同时允许绑定host域名调试
查看>>
实习日记7.8
查看>>