黑马程序员————java基础之反射和正则
来源:互联网 发布:好书推荐 大数据 编辑:程序博客网 时间:2024/05/19 21:16
-Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
反射
java反射是在运行过程中,对于任意一个类都能知道这个类的所以属性和方法,对于任意一个类都能调用他的属性和方法,这种动态获取信息和调用对象方法的功能在java中叫做反射。
用于描述字节码的类就是Class类,创建对象,可以提取字节码文件中的内容。想要对一个类文件进行解剖,只要获取到该类的字节码文件对象即可。
获取字节码文件的3中方式
(1)用Object类中的getClass方法,不过要明确具体的类
<span style="font-family:SimSun;font-size:12px;">Person p = new Person();Class clazz = p.getClass();</span>(2)任何数据类型都具备一个静态的属性.class来获取其对应的Class对象。
<span style="font-family:SimSun;font-size:12px;">Class clazz=Person.class</span>(3)通过给定字符串的名称,调用class类中的forName。
String str ="cn.itcast.bean.Person";Class clazz =Class.forName(str);调用类的构造函数
Object obj =Clazz.newInstance当对象不是使用空参构造函数,通过指定的构造函数初始化,我们要先获取该构造函数getConstructor(parameterTypes);
Constructor c =class.getConstructor(int.class,String.class);//通过该构造器对象的newInstance方法进行对象的初始化。 Object obj = constructor.newInstance(31,"小红");获取字节码文件中字段
getField只能获取所有可访问公共字段,private获取不到。
Field field = claszz.getField("age");//getDeclaredField可以获取到公共字段,也可以获取到私有字段。 Field field = clazz.getDeclaredField("age"); //对私有字段的访问取消权限检查,暴力访问。 field.setAccessible(true); Object obj = clazz.newInstance();为对象的属性赋值 field.set(obj,89); //获取某对象的某属性值 Object o = field.get(obj);获取字节码文件的方法
Method[] methods = clazz.getMethods();//获取的都是公有的方法 methods = clazz.getDeclaredMethods();//只获取本类中所有方法,包括私有。
Method method = clazz.getMethod("show",null);//获取空参数一般方法
正则
正则表达式用于操作字符串数据;通过一些特定符号表现
正则表达式常用构造摘要
字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
正则表达式对字符串的常见操作
1.匹配
其实使用的就是String类中的matches方法。
[]里面写的就是满足要求的字符,一个[]代表一个;{}里面写的是前一个[]的次数
正则的数字"\d"应该写成"\\d"。
2.切割
其实使用的就是String类中的split方法。
用的是字符串里面的replaceAll
在一个方法里面的两个参数,第二个参数想使用第一个参数里面内容可以用$
// \\b表示单词边界 String regex = "\\b[a-z]{3}\\b";//1. 将正则封装成对象 Pattern p = Pattern.compile(regex); //2. 通过正则对象获取匹配器对象Matcher m = p.match(str) //使用Matcher对象的方法对字符串进行操作。 //既然要获取三个字母组成的单词。 //查找:find(); while(m.find()){ System.out.println(m.group());//获取匹配的子序列.System.out.println(m.start()+";"+m.end());//返回匹配前初始索引,返回匹配后结束索引Pattern类为正则表达式的编译表示形式。指定为字符串的正则表达式必须首先被编译为此类的实
例。然后,可将得到的模式用于创建Matcher对象,依照正则表达式,该对象可以与任意字符序列匹
配。
练习:ip地址排序
192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55
思路:对于每一个lp段都给他加上两个零,然后再保留3个数字,通过切割切成几段,创建Treeset结合,将切出的元素存入结合中,然后在替换成原来形态输出。
public class RegexTest { public static void main(String[] args){show();1public static void show(){String ip= "192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55";ip = ip.replaceAll("(\\d+)","00$1");22. System.out.println(ip);23.24. //然后每一段保留数字3位。25. ip = ip.replaceAll("0*(\\d{3})","$1");26. System.out.println(ip);27.28. //1. 将ip地址切出。29. String[] ips = ip.split(" +");30.31. TreeSet<String> ts = new TreeSet<String>();32.33. for(String ips : ip){34. ts.add(ips);35. }36.37. for(String ip : ts){38. System.out.println(ips.replaceAll("0*(\\d+)","$1"));39. }40. }41. }
- 黑马程序员—java基础之反射与正则表达式
- 黑马程序员——java加强之反射和正则
- 黑马程序员————java基础之反射和正则
- 黑马程序员——java基础---反射、正则
- 黑马程序员——java基础加强之反射
- 黑马程序员——JAVA基础之反射
- 黑马程序员——java基础之反射
- 黑马程序员——Java基础之反射
- 黑马程序员——java基础---反射
- 黑马程序员——Java基础---反射
- 黑马程序员——Java基础--- 反射
- 黑马程序员——JAVA基础 反射
- 黑马程序员——Java基础---反射
- 黑马程序员——Java基础---反射
- 黑马程序员——Java基础---反射
- 黑马程序员——Java基础---反射
- 黑马程序员——Java基础---反射
- 黑马程序员——java基础---反射
- 使用AIDL实现进程间的通信之复杂类型传递
- ERROR 1396 (HY000): Operation CREATE USER failed for 'root'@'localhost'
- 十紀 二經 五綱 七緯
- curl网站开发指南
- 划分树模板+模板题--hdu4251
- 黑马程序员————java基础之反射和正则
- VB使用资源编辑器写入OCX与注册
- C++常量
- Ruby
- CAS原子操作实现无锁及性能分析
- Android中自定义dialog方法,可直接调用,更改样式
- 1038. 统计同成绩学生(20)
- Servlet的生命周期
- 产品健康度模型(4) 打分I