黑马程序员_反射技术和正则表达式
2013-09-24 10:29
681 查看
-----------------
android培训、java培训、期待与您交流! ----------
如何获取Class对象呢?
方式一:
通过对象的getClass方法进行获取。
麻烦在于每次是不是都需要具体的类和该类的对象,以及调用getClass方法。
方式二:
任何数据类型都具备着一个静态的属性class,这个属性直接获取到该类型的对应Class对象。
比第一种简单,不用创建对象,不用调用getClass方法。
但是还是要使用具体的类,和该类中的一个静态属性class完成。
方式三:
这种方式较为简单,只要知道的类的名称即可。
不需要使用该类,也不需要去调用具体的属性和行为。就可以获取到Class 对象了。
这种仅知道类名就可以获取该类字节码对象的方式,更有利于扩展。
通过Class创建对象:
1,查找并加载Person.class文件进内存,并将该文件封装成Class对象。
2,在依据Class对象创建该类具体的实例。
3,调用构造函数对对象进行初始化。
如果指定的类中没有空参数的构造函数。或者要创建的类对象需要通过指定的构造函数进行初始化。
这时就不能使用newInstance方法了。既然要通过指定的构造函数进行对象的初始化。就必须先获取这个构造函数。
如何获取字段,并对字段进行赋值和获取。
访问类中的方法
Person类的代码:
正则表达式:就是用操作字符串数据的规则表达式。
规则:就是用一些符号组成,每个符号都代表着特有的含义。其实这些符号想当于对应着底层一段代码。对外提供符号是简化了操作。
弊端:必须要先学习这些符号。符号多了,阅读性会较差。
正则表达式对字符串的常见操作:
1,匹配。
使用的是String类中的matchers方法。
2,切割。
使用的是String类中的split方法。
3,替换。
使用的是String类中的replaceAll方法。
4,获取。
将匹配的规则的内容获取出来。
使用到正则表达式对象。Pattern
使用步骤:
先将正则表达式编译成Pattern对象。
通过Pattern对象的matcher方法获取Matcher匹配器对象。
通过匹配器对象的方法,将正则规则作用到字符串上以便于操作。
需求:对QQ号进行校验。要求:5~15 位,不能以0开头,必须是数字。
regex = "[1-9][0-9]{4,14}";
192.108.90.34 10.10.10.10 5.5.5.5 30.107.100.5
对ip地址字符串中的ip地址进行排序。按照ip的分类顺序
为了排序方便。最好让ip中的每一段都是三位,这样就可以用字典顺序进行排序了。
给每一段进行补零的操作。
而每一段需要的补的零又不一样多,咋办?
干脆,都按最多的两个零补。
然后在每一段保留最后三位。
android培训、java培训、期待与您交流! ----------
如何获取Class对象呢?
方式一:
通过对象的getClass方法进行获取。
麻烦在于每次是不是都需要具体的类和该类的对象,以及调用getClass方法。
Person p = new Person(); Class clazz = p.getClass();
方式二:
任何数据类型都具备着一个静态的属性class,这个属性直接获取到该类型的对应Class对象。
比第一种简单,不用创建对象,不用调用getClass方法。
但是还是要使用具体的类,和该类中的一个静态属性class完成。
Class clazz = Person.class;
方式三:
这种方式较为简单,只要知道的类的名称即可。
不需要使用该类,也不需要去调用具体的属性和行为。就可以获取到Class 对象了。
这种仅知道类名就可以获取该类字节码对象的方式,更有利于扩展。
String className = "cn.itcast.bean.Person"; Class clazz = Class.forName(className);
通过Class创建对象:
1,查找并加载Person.class文件进内存,并将该文件封装成Class对象。
2,在依据Class对象创建该类具体的实例。
3,调用构造函数对对象进行初始化。
String className = "cn.itcast.bean.Person"; Class clazz = Class.forName(className);
Object obj = clazz.newInstance();
如果指定的类中没有空参数的构造函数。或者要创建的类对象需要通过指定的构造函数进行初始化。
这时就不能使用newInstance方法了。既然要通过指定的构造函数进行对象的初始化。就必须先获取这个构造函数。
String className = "cn.itcast.bean.Person"; Class clazz = Class.forName(className);
//获取指定类中的指定的构造函数。
Constructor constructor = clazz.getConstructor(String.class,int.class);
//创建对象。对象的建立都需要构造函数的初始化。 怎么创建对象可以通过构造器对象完成。
Object obj = constructor.newInstance("lisi",20);
如何获取字段,并对字段进行赋值和获取。
String className = "cn.itcast.bean.Person"; Class clazz = Class.forName(className);
//获取该类中的名称为age的字段
Field ageField = clazz.getDeclaredField("age");
//System.out.println(ageField);
//想要给该变量赋值。 必须先要有对象。
Object obj = clazz.newInstance();
//对该私有字段进行取消权限检查的能力。
ageField.setAccessible(true);//暴力访问。
ageField.set(obj, 19);
Object o = ageField.get(obj);
System.out.println(o);
访问类中的方法
String className = "cn.itcast.bean.Person"; Class clazz = Class.forName(className);
Method method = clazz.getMethod("toString", null);
//获取能调用该方法的对象。
Object obj = clazz.newInstance();
Object returnValue = method.invoke(obj, null);
System.out.println(returnValue);
String className = "cn.itcast.bean.Person"; Class clazz = Class.forName(className);
Method method = clazz.getMethod("show", null);
method.invoke(null, null);
String className = "cn.itcast.bean.Person"; Class clazz = Class.forName(className);
Method method = clazz.getMethod("function", String.class,int.class);
Object obj = clazz.newInstance();
method.invoke(obj, "haha",89);
Person类的代码:
public class Person { private String name; private int age; public Person() { super(); System.out.println("person run"); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String toString() { return name+":"+age; } public static void show(){ System.out.println("person static show run"); } public void function(String a,int b){ System.out.println("person param function "+a+","+b); } private void prviateShow(){ System.out.println("person private show run"); } }
正则表达式:就是用操作字符串数据的规则表达式。
规则:就是用一些符号组成,每个符号都代表着特有的含义。其实这些符号想当于对应着底层一段代码。对外提供符号是简化了操作。
弊端:必须要先学习这些符号。符号多了,阅读性会较差。
正则表达式对字符串的常见操作:
1,匹配。
使用的是String类中的matchers方法。
2,切割。
使用的是String类中的split方法。
3,替换。
使用的是String类中的replaceAll方法。
4,获取。
将匹配的规则的内容获取出来。
使用到正则表达式对象。Pattern
使用步骤:
先将正则表达式编译成Pattern对象。
通过Pattern对象的matcher方法获取Matcher匹配器对象。
通过匹配器对象的方法,将正则规则作用到字符串上以便于操作。
需求:对QQ号进行校验。要求:5~15 位,不能以0开头,必须是数字。
regex = "[1-9][0-9]{4,14}";
package com.itheima.regex.demo; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexDemo3 { public static void main(String[] args) { checkTel(); splitDemo(); replaceAllDemo(); getDemo(); } public static void getDemo(){ String str = "da jia zhu yi le ,yao pai wei dian ying la !"; String reg = "\\b[a-z]{3}\\b";//三个字母组成的单词都取出来。 //正则规则被编译成Pattern对象。 Pattern p = Pattern.compile(reg); //通过正则对象的方法matcher和字符串想关联获取匹配器对象。 Matcher m = p.matcher(str); //使用匹配器的方法对字符串进行操作。 while(m.find()){ System.out.println(m.start()+"---"+m.group()+"----"+m.end()); } } //替换演示。 public static void replaceAllDemo(){ // String str = "werqqtyuzzzio"; // str = str.replaceAll("(.)\\1+","$1");//后一个参数可以通过$数字 引用前一个参数中的组。 String str = "15812345678"; str = str.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2"); System.out.println(str); } //切割演示, public static void splitDemo(){ // String str = "23 19 -1 9 56"; // String[] arr = str.split(" +"); // String str = "zhangsan.lisi.wangwu"; // String[] arr = str.split("\\."); String str = "werqqtyuzzzio"; String[] arr = str.split("(.)\\1+"); for(String s : arr){ System.out.println(s); } } //匹配演示。对手机号码进行校验。 public static void checkTel(){ String str = "158000001111"; String reg = "1[358]\\d{9}"; boolean b = str.matches(reg); System.out.println(str+":"+b); } }
192.108.90.34 10.10.10.10 5.5.5.5 30.107.100.5
对ip地址字符串中的ip地址进行排序。按照ip的分类顺序
为了排序方便。最好让ip中的每一段都是三位,这样就可以用字典顺序进行排序了。
给每一段进行补零的操作。
而每一段需要的补的零又不一样多,咋办?
干脆,都按最多的两个零补。
然后在每一段保留最后三位。
String ip = "192.108.90.34 10.10.10.10 5.5.5.5 30.107.100.5"; ip = ip.replaceAll("(\\d+)", "00$1"); System.out.println(ip); ip = ip.replaceAll("0*(\\d{3})","$1"); System.out.println(ip); String[] ips = ip.split(" +"); Arrays.sort(ips); for(String i : ips 4000 ){ System.out.println(i.replaceAll("0*(\\d+)", "$1")); }
相关文章推荐
- 黑马程序员——Java基础:反射、JDK1.5新特性、正则表达式
- 黑马程序员-----JAVA 反射、正则表达式
- 黑马程序员--反射与正则表达式
- 黑马程序员 - 技术 blog20 之 Java正则表达式 by 八戒
- 黑马程序员—java技术blog—第七篇:正则表达式
- 黑马程序员—java基础之反射与正则表达式
- 黑马程序员学习log第九篇基础知识:JAVA的面向对象之正则表达式及反射总结
- JAVASE--正则表达式、反射技术
- 黑马程序员——Java基础正则表达式、反射
- 黑马程序员——正则表达式、反射
- 黑马程序员--java技术--正则表达式
- 黑马程序员——反射+正则表达式
- 黑马程序员_正则表达式和反射
- 黑马程序员《java基础总结(十六)》(网络编程<反射、正则表达式>)
- 黑马程序员--java技术blog---第十篇:正则表达式
- 黑马程序员技术博客之正则表达式
- 黑马程序员————正则表达式 反射(day27)
- 黑马程序员 ---------- Java网络技术之 ---正则表达式 (Day06)
- 黑马程序员--Java基础--正则表达式、反射机制
- java基础知识---网络编程、反射技术、正则表达式