Java反射是一种能够在程序运行时动态访问、修改某个类中任意属性(状态)和方法(行为)的机制(包括private实例和方法),java反射机制提供了以下几个功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法。根据这些功能,本我们我们就来谈一谈Java反射的优缺点。
一、Java反射的优点
1.增加程序的灵活性,避免将程序写死到代码里。
例:定义了一个接口,实现这个接口的类有20个,程序里用到了这个实现类的地方有好多地方,如果不使用配置文件手写的话,代码的改动量很大,因为每个地方都要改而且不容易定位,如果你在编写之前先将接口与实现类的写在配置文件里,下次只需改配置文件,利用反射(java API已经封装好了,直接用就可以用 Class.newInstance())就可完成。
2.代码简洁,提高代码的复用率,外部调用方便
package cn.yonyong.reflection.testdemo;
interface Fruit { //水果接口
public void eat() ; //吃水果
}
class Apple implements Fruit{ //定义苹果
public void eat() {
System.out.println("**吃苹果。");
}
}
class Orange implements Fruit{
public void eat() {
System.out.println("**吃橘子。");
}
}
class Factory{
public static Fruit getInstance(String className){
Fruit fruit = null ;
try{
fruit = (Fruit) Class.forName(className).newInstance() ;
}catch(Exception e ){
e.printStackTrace() ;
}
return fruit ;
}
}
public class FactoryDemo{
public static void main(String args[]){
//通过工厂类取得接口实例,传入完整的包.类名称
Fruit f = Factory.getInstance("cn.yonyong.reflection.testdemo.Apple") ;
if(f!=null){ //判断是否取得接口实例
f.eat() ;
}
}
}
如果不用反射,那么我们如果再加一个西瓜类,就得在Factory里判断,每添加一个类都要修改一次Factory,但用了反射只用在调用的时候传入完整的类名就可完成。结果:用反射,修改一处代码;不用反射,修改两处代码。
3.对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法
二、Java反射的缺点
1.性能问题
使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此Java反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用。
反射包括了一些动态类型,所以JVM无法对这些代码进行优化。因此,反射操作的效率要比那些非反射操作低得多。我们应该避免在经常被 执行的代码或对性能要求很高的程序中使用反射。
2.使用反射会模糊程序内部逻辑
程序人员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术,因而会带来维护问题。反射代码比相应的直接代码更复杂。
3.安全限制
使用反射技术要求程序必须在一个没有安全限制的环境中运行。如果一个程序必须在有安全限制的环境中运行,如Applet,那么这就是个问题了。
4.内部暴露
由于反射允许代码执行一些在正常情况下不被允许的操作(比如访问私有的属性和方法),所以使用反射可能会导致意料之外的副作用--代码有功能上的错误,降低可移植性。反射代码破坏了抽象性,因此当平台发生改变的时候,代码的行为就有可能也随着变化。
所以,总的来说,Java反射机制实际上是一把双刃剑,我们只有熟练掌握Java反射的优缺点,才能妥善使用Java反射这一利器,为我们的编程扫清障碍而不至于影响到我们的程序本身。其实,本站的Java基础教程对Java的反射机制讲解的十分透彻,本文也只是借鉴了一部分内容,想深入学习Java反射的小伙伴一定要去看看哦。
在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。通俗的讲就是反射可以在运行时根据指定的类名获得类的信息。那么我们为什么用反射机制呢?
在java中使用反射机制,会提高程序的灵活性和扩展性,还能节省资源,因此在java编程中使用好反射是重要的。今天来学习java反射field用法的内容。
在实际项目的开发中,框架和类都是不可缺少的,反射是将框架和类结合在一起的粘合剂,所以想学好编程,学好反射机制是十分重要的。这篇文章来介绍java反射机制的相关基础知识,java零基础的新手朋友们可以来来学习下面的内容。
Docker 是一个基于 Go 语言 并遵从 Apache2.0 协议开源的应用容器引擎,让开发者可以打包应用到一个可移植的镜像中
jQuery是一个快速、简洁的JavaScript框架
Java SE(Java Platform, Standard Edition,Java标准版),零基础入门
IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境,它所提倡的是智能编码,是减少程序员的工作
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目
Java SE(Java Platform, Standard Edition,Java标准版),基础进阶
动力节点在线报名表(此信息已加密,请放心填写)