Java基础之反射原理与用法详解
本文实例讲述了Java基础之反射原理与用法。分享给大家供大家参考,具体如下:
1.什么是反射?
反射其实就是动态的加载类,我们在写JDBC的时候加载驱动Class.forName("xxx")时就涉及到了反射。
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
2.反射机制能做什么?
1.在运行时判断任意一个对象的所属的类Class。
2.在运行时判断构造任意一个类的对象Constructor。
3.在运行时判断任意一个类所具有的成员变量Field和方法Method。
4.在运行时调用任意一个对象的方法。method.invoke(object,args)
3.反射机制相关的API
获得完整的包名和类名
Student.java
packagecom.reflect.test; publicclassStudent{ privateintid; privateStringname; publicStudent(){} publicStudent(intid,Stringname){ super(); this.id=id; this.name=name; } publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } @Override publicStringtoString(){ return"Student[id="+id+",name="+name+"]"; } }
Test.java
packagecom.reflect.test; publicclassTest{ Studentstu=newStudent(); publicstaticvoidmain(String[]args){ Testtest=newTest(); test.getClassName(); } //获得完整的包名和类名 publicvoidgetClassName(){ System.out.println(stu.getClass().getName()); } }
运行结果
com.reflect.test.Student
获取Class的三种方法
publicstaticvoidmain(String[]args){ Testtest=newTest(); test.getStudentClass(); } //获取Class对象的三种犯法 publicvoidgetStudentClass(){ //第一种方法,forName Class>class1; try{ class1=Class.forName("com.reflect.test.Student"); System.out.println("class1:"+class1); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } //第二种方法,class Class>class2=Student.class; System.out.println("class2:"+class2); //第三种方法,getClass() Studentstu1=newStudent(); Class>class3=stu1.getClass(); System.out.println("class3:"+class3); }
运行结果
class1:classcom.reflect.test.Student
class2:classcom.reflect.test.Student
class3:classcom.reflect.test.Student
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。