黑马程序员技术交流社区

标题: 正则表达式和反射 [打印本页]

作者: xinzhang    时间: 2016-4-7 10:14
标题: 正则表达式和反射
正则表达式
|---用一些符号来操作字符串,书写方便,阅读星太差(里面的符号啥的,基本的几个认得就可以)
|---功能:1,匹配:使用matchs方法(具体方法代码自己看)
    2,切割:split
    3,获取功能:find
    4,替换功能:replaceAll
8,反射:(所有内容都会被问)
|---定义:就是把java类中的各种成分映射成相应的java类,说白了就是获得一个类里面的成员
|---获取字节码的方法:1,类名.class(System.class) 2,对象.getClass()  3,Class.forName("类名 比如java.util.Data")
|---反射是为了实现(代码自己看):1,在运行时判断任意一个对象所属的类。2,在运行时构造任意一个类的对象。
    3,在运行时判断任意一个类所具有的成员变量和方法。4,在运行时调用任意一个对象的方法
|---反射与内省区别?
反射可以操作各种不同的java类,那么内省只是通过反射来操作JavaBean的。JavaBean类里面操作的都是成员变量,都是通过setXXX和getXXX方法
来获取成员变量,这样的类用内省来操作会更简单。
|---反射及暴力反射  ,获得私有方法代码(这里用到反射)
暴力反射:类里面的变量私有了,通过普通的getField反射方法无法获得,只能通过getDeclaredField()获得
代码:package day_7_15;
import java.lang.reflect.Field;
class ReflectPoint{
private int x ,y;
ReflectPoint(int x ,int y){
  this.x=x;
  this.y=y;
}
}
public class ViolenceReflectDemo {
public static void main(String[] args) throws Exception, Exception{
  ReflectPoint point = new ReflectPoint(3,5);
  //field类代表某个类中的成员变量,这里是私有变量只能通过暴力反射的方法获得,getDeclaredField()方法
  Field field = point.getClass().getDeclaredField("y");//得到了方法看不见方法,需要判断
  //通过方法看见了,但是拿不到
  field.setAccessible(true);
  //y这个还有变量y的变量类对象来获取对象里的y  ,拿到了变量
  System.out.println(field.get(point));
}
}


作者: 小白想学javaEE    时间: 2016-4-7 11:52
反射中常用的获取字节码文件方式是Class.forName();这样配合配置文件能够更灵活,也提升了代码的扩展性。
反射还能越过泛型检查,是否是增加了不安全性,希望大神告知下
作者: xinzhang    时间: 2016-4-8 10:15
小白想学javaEE 发表于 2016-4-7 11:52
反射中常用的获取字节码文件方式是Class.forName();这样配合配置文件能够更灵活,也提升了代码的扩展性 ...

反射即强行获取,不建议使用,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2