黑马程序员——JAVA反射机制基础
来源:互联网 发布:mac可以玩使命召唤吗 编辑:程序博客网 时间:2024/06/16 09:57
-------android培训、java培训、期待与您交流! ----------
1.定义:
JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。
曾经也有人这么概括:反射就是把Java类中的各种成分映射成相应的java类
2.功能:
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
3.说到两个特殊的类
1.Object----是所有Java类的继承根源
2.Class-----它和一般类一样继承自Object,其实体用以表达Java程序运行时的classes和interfaces,也用来表达enum、array、primitive Java types(boolean, byte, char, short, int, long, float, double)以及关键词void
4.举一些例子
Class cls1 = Date.class//字节码1;
Class cls2 = Person.class//字节码2;
Class.forName("java.lang.String");//加载字节码(1.如果字节码已经被缓存到java虚拟机内存中,那么直接返回,如果在硬盘上,那么通过类加载器加载到java虚拟机内存中,然后返回对应的类字节码
5.获取类字节码的三种方式:
获取类字节码的三种方式
1.类名.class,例如;System.class
2.对象.getClass(),例如。new Date().getClass();
3.Class.forName("类名"),例如,Class.forName("java.util.Date");
6.九个常见的Class对象:
boolean,byte,char,short,int,long,float和关键字void
数组类型的Class实例对象:
7.反射应用的方面:
1,构造方法
举例
Constructor类代表某个类中的一个构造方法
得到某个类所有的构造方法
例子:Constructor[] constructors = Class.forName("java.lang.String").getConstructors();
得到某个类某个特定的构造方法
例子:Constructor constructor1 = String.class.getConstructor(StringBuffer.class);
创建实例对象:
通常方式:String str = new String(new StringBuffer("abc"));
反射方式:String str2 = (String)constructor1.newInstance(new StringBuffer("abc"));
//调用获得的方法时要用到上面相同类型的实例对象
System.out.println(str2.charAt(2));
Class.newInstance()方法:
例子:String obj = (String)Class.forName("java.lang.String").newInstance();
该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。
该方法内部的具体代码是怎么写的呢?用到了缓存机制来保存默认构造方法的实例对象。
2.成员变量
public class ReflectTest{ public static void main(String[] args){ ReflectPoint pt1 = new RfelectPoint(3,5); Field fieldY = pt1.getClass().getFiled("y");//getFiled只能得到public的变量‘y'与类中大小写一致 //fieldY的值不是5、、fieldY不是对象身上的 变量,而是类上,要用它去取某个对象上对应的值 System.out.println(fieldY.get(pt1));//打印出5 Field fieldX = pt1.getClass().getDeclaredField("x"); fieldX.setAccessible(true); System.out.println(fieldX.get(pt1)); }}
public class ReflectPoint{ private int x; public int y; public ReflectPoint(int x,int y){ super(); this.x = x; this.y = y; }}
在比较对象的时候,注意 ==,equals的应用区别
3.成员方法
注意jdk,api的版本兼容问题
new int[]{1,2,3};
new String[] {new String("abc"),new String("xyz"),new String("123");
str1 = "abc";
Method methodCharAt = String.class.getMethod("charAt",int.class);
System.out.println("methodCharAt.invoke(str1,1));如果str1处换成null,那么这个方法是静态的
jdk1.4,1.5兼容问题;
System.out.println(methodCharAt.invoke(str1,new Object[]{2}));
java例子
public class ReflectTest{ public static void main(String[] args){ String str1 = "abc"; Class cls1 = str1.getClass(); Class cls2 = String.class; Class cls3 = Class.forName("java.lang.String"); System.out.println(cls1 == cls2);//true System.out.println(cls1 == cls3);//true System.out.println(cls1.isPrimitive());//false System.out.println(int.class.isPrimitive());//true System.out.println(int.class == Integer.class);//false System.out.println(int.class == Integer.Type);//true System.out.println(int[].class.isPrimitive());//false System.out.println(int[].class.isArray());//true }
}
0 0
- 黑马程序员——Java基础—反射机制
- 黑马程序员——JAVA反射机制基础
- 黑马程序员——Java基础---反射机制
- 黑马程序员——java基础笔记:反射机制
- 黑马程序员——Java 反射机制
- 黑马程序员——-Java反射机制-
- 黑马程序员——java反射机制
- 黑马程序员——Java反射机制
- 黑马程序员—Java中的反射机制
- 黑马程序员—关于java反射机制
- 黑马程序员------Java基础学习------反射机制
- 黑马程序员--java基础:反射机制
- 黑马程序员------------------JAVA基础-------反射机制
- 黑马程序员---java基础---反射机制
- 黑马程序员——java基础---反射
- 黑马程序员——Java基础---反射
- 黑马程序员——Java基础--- 反射
- 黑马程序员——JAVA基础 反射
- tar压缩文件
- mapreduce作业reduce被大量kill掉
- oc NSString和NSMutableString基本用法
- 用Python解压缩文件
- Z-Stack 中ZigBee 设备的 IEEE 地址 的初始化,读取,设置
- 黑马程序员——JAVA反射机制基础
- PowerShell清空IIS日志
- python压缩与读取.tar.bz2压缩包
- 原型模式(ProtoType) - Java里的对象复制
- mac10.10配置apache环境
- Eclipse 建立自己的Library
- 12/15/2014-读书笔记-《站在发展的前沿——新一代互联网思维》
- ZOJ3623:Battle Ships(完全背包)
- python压缩和读取.tar.bz2格式的压缩包