黑马程序员学习笔记八——java高新技术
来源:互联网 发布:电脑怎么使用手机网络 编辑:程序博客网 时间:2024/06/10 14:44
1.增强for循环
结构
for(type 变量名:变量集合){···}
*注意:迭代变量必须在迭()定义,集合变量可以使数组,或实现Iterable接口的集合类。
例:
Field[] fields= obj.getClass().getFields();//建field数组。得到字节码对应的实例对象
for(Field field:fields){ //这里使用的就是增强for 循环
if(field.getType()==String.class){//对字节码比较用等号
String oldValue=(String)field.get(obj);
String newValue=oldValue.replace('b', 'a');//替换值
field.set(obj, newValue);//用新值替换旧值
}
}
2.反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method;其中class代表的时类对 象,Constructor-类的构造器对象,Field-类的属性对象,Method-类的方法对象。通过这四个对象我们可以粗略的看到一个类的各个组 成部分。
1.如何得到各个字节码对应的实例对象。
类名。class;对象。Getclass;class forName(“类名”)。
例如:
String str="123";
Class cls1=str.getClass();
Class cls2=String.class;
Class cls3=Class.forName("java.lang.String");
其中classforname(“类名”)为我们主要用到的。
Classforname ()作用是返回字节码。返回方式有两种:1.字节码曾经加载过,jvm直接返回。2.jvm 还没加载过,把加载字节码缓存jvm中以后直接加载。
2.数组类型的实例对象
System.out.println(int[].class.isArray());//是否数组类型
3.Constructor类
//返回够着函数对象
Constructorconstructor1=String.class.getConstructor(StringBuffer.class);//StringBuffer表示选择那个构造方法
//实例化
String str2=(String)constructor1.newInstance(newStringBuffer("yui"));//指出对应的构造方法 此StringBuffer表示用个哪个
Class.newInstance()方法:
例子:String obj = (String)Class.forName("java.lang.String").newInstance();
该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。
该方法内部的具体代码是怎样写的呢?用到了缓存机制来保存默认构造方法的实例对象。
3.Field类:Field类代表某个类中的一个成员变量。
例子:替换对象String 对应某一字符
private static void changeStringValue(Object obj) throws Exception{
Field[] fields= obj.getClass().getFields();//建field数组。得到字节码对应的实例对象
for(Field field:fields){
if(field.getType()==String.class){//对字节码比较用等号
String oldValue=(String)field.get(obj);
String newValue=oldValue.replace('b', 'a');//替换值
field.set(obj, newValue);//用新值替换旧值
}
}
}
4.Method类代表某个类中的一个成员方法
得到类中的某一个方法:
例:Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class);
在调用方法上通常我们用:str.charAt(num);用反射 就是charAt.invoke(str, 1);
*注意:如果传递给Method对象的invoke()方法的第一个参数为null,说明该Method对象对应的是一个静态方法。
*张老师讲的jdk 1.4和1.5区别:
Jdk1.5:public Object invoke(Object obj,Object... args) 可变参数,1.5的新特性
Jdk1.4:public Object invoke(Object obj,Object[] args),即按jdk1.4的语法,需要将一个数组作为参数传递给invoke方法时,数组中的每个元素分别对应被调用方法中的一个参数,所以,调用charAt方法的代码也可以用Jdk1.4改写为 charAt.invoke(“str“, new Object[]{1})形式。
- 黑马程序员学习笔记八——java高新技术
- 黑马程序员——java高新技术1学习笔记整理
- 黑马程序员——java高新技术2学习笔记整理
- 黑马程序员—JAVA高新技术视频笔记
- 黑马程序员------java学习笔记之高新技术
- 黑马程序员---Java高新技术学习笔记(中篇)
- 黑马程序员-java学习笔记-高新技术_2
- 黑马程序员-java学习笔记-高新技术
- 黑马程序员---Java高新技术学习笔记-1
- 黑马程序员---Java高新技术学习笔记-2
- 黑马程序员---Java高新技术学习笔记-3
- 黑马程序员—java高新技术
- 黑马程序员——高新技术加强学习笔记与心得
- 黑马程序员——JAVA学习笔记(八)
- 黑马程序员——Java高新技术视频笔记:反射
- 黑马程序员--Java高新技术笔记
- 黑马程序员——java高新技术学习日记(1)
- 黑马程序员——java高新技术学习日记(2)
- Java項目与Java web項目的.project文件
- RapidXml使用方法
- PHP伪静态的四种方法总结
- iphone程序内调用谷歌地图
- 系统字节序检测的两种方法
- 黑马程序员学习笔记八——java高新技术
- iphone调用系统电话、浏览器、地图、邮件等
- SIM300 AT
- 类目(Category)概述
- 让一个UIImageView响应点击事件
- 黑马程序员学习笔记七——多线程
- NSTimer的用法
- SQL注入式攻击
- JSP 引擎工作原理