黑马程序员----反射
来源:互联网 发布:网络摄像头哪种好 编辑:程序博客网 时间:2024/06/03 13:47
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
反射指的是把Java类中的各个成分映射成java类,例如Mothod 是Class类的一个成分,Mothod同时也是一个java类,Mochod的实例对象表示的是java类的函数。
要理解反射,首先要理解Class类。所有的类文件都有共同属性,把这些共性内容封装成一个类,这个类就叫Class(描述字节码文件的对象)。 Class类中的实例对象,就是各个java类。
Class和class有什么区别呢?class是java中的类,用于描述一类事物的共性,该类事物有什么属性,没有什么属性,至于这个属性的值是什么,则由此类的实例对象确定,不同的实例对象有不同的属性值。而Class指的是Java程序中的各个Java类是属于同一类事物,都是Java程序的类,这些类称为Class。例如人对应的是Person类,Java类对应的就是Class。Class是Java程序中各个Java类的总称;它是反射的基石,通过Class类来使用反射。
接着我用以下代码来说明反射的一些用法:
//获得字节码的3种方式//1、类名.class 2、对象.getClass() 3、Class.forName("类名")//用一个数组得到某个类的所有构造方法,注意使用Class.forName时类名需要加引号Constructor []constructors=Class.forName("java.lang.String").getConstructors();//获得String类的构造方法,括号填目标构造方法的参数类型String.class.getConstructor(); //创建一个构造方法类的实例对象constructor1,赋值为String的构造函数,括号里放的是参数类型Constructor constructor1= Class.forName("java.lang.String").getConstructor(StringBuffer.class);//使用构造方法创建对应的对象实例,括号里放的是具体的参数String s1=(String)constructor1.newInstance(new StringBuffer("abc"));//不仅仅Constructor 可以创建对象, Class也可以创建对象String s2=(String) Class.forName("java.lang.String").newInstance();//判断是否是数组int [].class.isArray();//获取String类的CharAt方法Method method1=String.class.getMethod("charAt", int.class); //调用method1方法,当调用方法时,有多个参数,则应把参数做成一个数组,若数组指表示一个参数时,需要将数组再一次封装(前面加上(Object))String s3="abcabc";method1.invoke(s3, 1);//获取一个对象的java类的父类s3.getClass().getSuperclass().getName();//获取Object数组里的成员并返回String []arr={"ab","abc","abcd"};System.out.println(Arrays.asList(arr));//若数组是数字数组,则遍历打印int []arr2={1,2,5,2,8};for(int i=0;i<arr2.length;i++){System.out.println(Array.get(arr2, i));}class Xy{private int x; public int y;public Xy(int x, int y) {super();this.x = x;this.y = y;}}Xy xy1=new Xy(3,5); //创建一个成员变量fieldY,指向Xy类的成员变量yField fieldY=Class.forName("Xy").getField("y");//创建一个成员变量fieldY,指向Xy类的成员变量x,由于x的访问修饰符是private,需要用特殊的方法getDeclare来访问Field fieldX=Class.forName("Xy").getDeclaredField("x");//暴力反射,不管是什么修饰符,都可以读取fieldX.setAccessible(true);
0 0
- 黑马程序员--java 反射
- 黑马程序员之反射
- 黑马程序员之反射
- 黑马程序员__java_反射
- 黑马程序员_反射
- 黑马程序员 反射
- 黑马程序员--Java反射
- 黑马程序员--反射
- 黑马程序员-java-反射
- 黑马程序员:反射技术
- 黑马程序员_java反射
- 黑马程序员---反射
- 黑马程序员-反射
- 黑马程序员---反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员:反射
- 黑马程序员_反射
- hdu3665-Seaside(SPFA,dijkstra,floyd)
- cmd for命令
- hibernate search初探1
- ECharts案例教程1
- 项目实战玩转数据库之上一篇下一篇
- 黑马程序员----反射
- Programming in scala学习笔记(三)Classes and Objects
- Android Binder机制分析
- php匿名函数的用法
- 四层和七层负载均衡的区别
- iOS 一个很简单的使用类的代码,和.net很像,很好理解
- 2015年8月学习英语总结-坚持一段时间将成为习惯
- pwd指令的简单实现
- 带头结点的单链表的基本操作