Java的反射机制(一)
来源:互联网 发布:淘宝店卖肉需要执照吗 编辑:程序博客网 时间:2024/06/06 09:01
反射机制的作用:
1,反编译:.class–>.java
2,通过反射机制访问java对象的属性,方法,构造方法等;
反射机制中的类
java.lang.Class;
java.lang.reflect.Constructor; java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;
具体功能实现:
1,反射机制获取类有三种方法,我们来获取Employee类型
//第一种方式: Class c1 = Class.forName("Employee"); //第二种方式: //java中每个类型都有class 属性. Class c2 = Employee.class; //第三种方式: //java语言中任何一个java对象都有getClass 方法 Employee e = new Employee(); Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)
2,创建对象:获取类以后我们来创建它的对象,利用newInstance:
Class c =Class.forName("Employee"); //创建此Class 对象所表示的类的一个新实例 Object o = c.newInstance(); //调用了Employee的无参数构造方法.
3,获取属性:分为所有的属性和指定的属性:
a,先看获取所有的属性的写法:
//获取整个类 Class c = Class.forName("java.lang.Integer"); //获取所有的属性? Field[] fs = c.getFields(); //定义可变长的字符串,用来存储属性 StringBuffer sb = new StringBuffer(); //通过追加的方法,将每个属性拼接到此字符串中 //最外边的public定义 sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n"); //里边的每一个属性 for(Field field:fs){ sb.append("\t");//空格 sb.append(Modifier.toString(field.getModifiers())+" ");//获得属性的修饰符,例如public,static等等 sb.append(field.getType().getSimpleName() + " ");//属性的类型的名字 sb.append(field.getName()+";\n");//属性的名字+回车 } sb.append("}"); System.out.println(sb);
b,获取特定的属性,对比着传统的方法来学习:
public static void main(String[] args) throws Exception{ //以前的方式: /* User u = new User(); u.age = 12; //set System.out.println(u.age); //get */ //获取类 Class c = Class.forName("User"); //获取id属性 Field idF = c.getDeclaredField("id"); //实例化这个类赋给o Object o = c.newInstance(); //打破封装 idF.setAccessible(true); //使用反射机制可以打破封装性,导致了java对象的属性不安全。 //给o对象的id属性赋值"110" idF.set(o, "110"); //set //get System.out.println(idF.get(o)); }
java面试大全:原博:http://blog.csdn.net/snn1410/article/details/44978457##1
Java反射机制的作用:
1)在运行时判断任意一个对象所属的类。
2)在运行时判断任意一个类所具有的成员变量和方法。
3)在运行时任意调用一个对象的方法
4)在运行时构造任意一个类的对象
哪里用到反射机制
jdbc中有一行代码:Class.forName(‘com.mysql.jdbc.Driver.class’).newInstance();那个时候只知道生成驱动对象实例,后来才知道,这就是反射,现在
很多框架都用到反射机制,hibernate,struts都是用反射机制实现的。
反射机制的优缺点
静态编译
:在编译时确定类型,绑定对象,即通过。
动态编译
:运行时确定类型,绑定对象。动态编译最大限度的发挥了java的灵活性,体现了多态的应用,有利于降低类之间的耦合性。
反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中
它的灵活性就表现的十分明显。比如,一个大型的软件,不可能一次就把把它设计的很完美,当这个程序编
译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如
这样的话,这个软件肯定是没有多少人用的。采用静态的话,需要把整个程序重新编译一次才可以实现功能
的更新,而采用反射机制的话,它就可以不用卸载,只需要在运行时才动态的创建和编译,就可以实现该功
能。
它的缺点是对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它
满足我们的要求。这类操作总是慢于只直接执行相同的操作。
- java的method反射机制(一)
- Java的反射机制(一)
- Java的反射机制详解(一)
- Java的反射机制(一)
- Java反射机制——反射的介绍(一)
- Java反射机制(一)
- java反射机制(一)
- Java 反射机制(一)
- java反射机制(一)
- JAVA反射机制(一)
- Java反射机制(一)
- java笔记(一)java的反射机制
- Java反射机制(一)
- Java反射机制一
- java反射机制 一
- JAVA反射机制(一)
- Java反射机制(一)
- java反射机制(一)
- day7
- Oracle触发器用法实例详解
- Binary Tree Zigzag Level Order Traversal
- 树链剖分-专题
- spring MVC配置详解
- Java的反射机制(一)
- 很全的 Python 面试题
- 自定义View的绘制原理图解
- iOS block之三种block
- 文本处理三剑客之awk
- nginx-设置网络连接的序列化
- 定时器开始结束
- R语言入门练习(1)
- D:array array array