java--类反射(一)
来源:互联网 发布:淘宝分享有礼活动 编辑:程序博客网 时间:2024/05/29 11:51
什么是反射
java反射机制是在运行状态中,对于任意一个类,都能够调用它的任意一个属性和方法;这种动态的获取信息以及动态的调用对象的方法的功能称为java语言的反射机制。
反射(Reflection)是java程序开发语言的特征之一,它允许运行中的java程序对自身进行检查,也称自审,并能直接操作程序的内部属性。
Java的这一能力在实际应用中应用得很多,在其它的程序语言中根本就不存在这一特性。例如,Pascal、C或者C++中就没有办法在程序中获得函数定义相关的信息。
JavaBean是类反射的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过类反射动态的载入并取得Java组件(类)的属性。后面学习的各种框架,基本上都会有反射的使用。
反射使用的三个步骤
第一步:获得你想操作的类的java.lang.Class对象。在运行中的Java程序中,用java.lang.Class类来描述类和接口等。
import org.junit.Test;//获取Class对象的三种方式public class reflectGetClass { //通过对象的getClass方法进行获取。这种方式需要具体的类和该类的对象,以及调用getClass方法。 @Test public void getClass1(){ //通过 (对象.getClass())获得 person p=new person(); Class c=p.getClass();//依赖类对象 System.out.println(c);//class cn.hncu.reflect.ex.person } //任何数据类型(包括基本数据类型)都具备着一个静态的属性class,通过它可直接获取到该类型对应的Class对象。这种方式要使用具体的类,然后调用类中的静态属性class完成,无需调用方法,性能更好。 @Test public void getClass2(){ //通过 (类型.class)获得 //任何数据类型(包括基本数据类型)都拥有一个静态对象Class Class c=person.class;//依赖被反射类 System.out.println(c);//class cn.hncu.reflect.ex.person Class i=int.class; //类反射无处不在 System.out.println(i);//int } //通过Class.forName()方法获取。这种方式仅需使用类名,就可以获取该类的Class对象,更有利于扩展。 @Test public void getClass3(){ //通过 (Class.forName("带包名的类名");)获得==>这种方法成为解耦 try { Class c = Class.forName("cn.hncu.reflect.ex.person");//仅仅依赖API的String类--可以看成不依赖任何 System.out.println(c);//class cn.hncu.reflect.ex.person } catch (ClassNotFoundException e) { e.printStackTrace(); } //不依赖被反射类或对象,能够完全达到解耦的效果,首选。 } @Test public void getClass4(){ //isInstance反射示例(模拟instanceof的功能) person p=new person(); Class c=p.getClass(); System.out.println(c.isInstance(new String()));//false System.out.println(c.isInstance(new person()));//true }}
☆反射引例(HelloWorld、USB)
public interface USB {//接口 public abstract void work();}
public class usbOne implements USB { @Override public void work() { System.out.println("usbOne is working..."); }}
public class usbTwo implements USB { @Override public void work() { System.out.println("usbTwo is working..."); }}
import java.util.Properties;public class USBFactory { private USBFactory(){ } public static USB getUSB(){// return new usbOne(); USB u=null; Properties p=new Properties(); try { //new FileInpuStream("usb路径");--因为usb路径比较麻烦,所以不用这种 p.load(USBFactory.class.getResourceAsStream("usb.config")); String name=p.getProperty("name"); Class c=Class.forName(name); u=(USB) c.newInstance(); } catch (Exception e) { e.printStackTrace(); } return u; }}
public class client { public static void main(String[] args) { USB usb=USBFactory.getUSB(); usb.work(); }}
new -file-fileName:usb.config–再open with-File Editor打开
1 0
- java--类反射(一)
- Java反射一 类
- Java--类反射(一)
- java 反射(一)
- Java反射(一)
- JAVA反射(一)
- Java反射(一)
- java反射(一)
- Java反射(一):获取类的反射
- Java反射(一)Class类对象
- java 反射 一 Class类
- Java的反射(一)
- Java 反射学习(一)
- Java反射机制(一)
- Java反射(一)Class
- java反射机制(一)
- Java 反射机制(一)
- Java反射总结(一)
- tips窗口显示置顶问题
- Linux服务器部署Web项目的步骤和方法
- 初识jquery(一)
- 3.3V 和 5V电平转换电路分享
- iOS 开发 真机调试报错 An unknown error occurred
- java--类反射(一)
- 获取VolleyError的详细信息,方便和服务器后台定位错误
- lua(6)-元表(metatable)和元方法(meatmethod)
- Centos 更新python
- JVM的内存区域划
- VMware虚拟机克隆Linux系统引起的网卡问题
- 初识ajax
- 测试面试题整理
- HTML快速学习2