文章目录
0 前言
反射是指程序在运行时可以动态地获取和操作类、对象、方法、属性等信息的能力,它可以实现动态加载、代理、注解等技术。Java中提供了java.lang.reflect包来支持反射,其中包含了Class、Method、Field等类。
正则表达式是一种用于描述字符串模式的语法规则,它可以实现字符串的匹配、替换、分割等操作。Java中提供了java.util.regex包来支持正则表达式,其中包含了Pattern、Matcher等类。
本文将介绍Java高级特性中反射,正则表达式的基本概念、使用方法和示例代码,希望能够对读者有所帮助。
1 反射定义
背景:IDEA中获取某个类中的所有方法的提示就是利用反射的机制实现。
反射机制定义:
1.动态获取对象信息(成员变量,成员方法,构造方法)
2.调用对象信息(成员变量,成员方法,构造方法)
反射编程核心思想:
①获取Class类型的对象【字节码对象】
②通过字节码对象获取成员变量、成员方法、构造方法
2 反射用法
2.1 通过反射获取自定义类Class类型的对象
public static void main(String[] args) throws classNotFoundException{
//第一种方式(企业中应用频率最高)
Class aClass1 = Class.forName("com.zlt.test.Employee");
System.out.println(aClass1);
//第二种方式
Class aClass2 = Employee.class;
System.out.println(aClass2);
//第三种方式
Employee employee = new Employee();
Class aClass3 = employee.getClass();
System.out.println(aClass3);
}
2.2 通过反射获取内置类的Class类型的对象
public static void main(String[] args) throws classNotFoundException{
//第一种方式
Class aClass1 = Class.forName("java.lang.Thread");
System.out.println(aClass1);
//第二种方式
Class aClass2 = Thread.class;
System.out.println(aClass2);
//第三种方式
Thread thread = new Thread();
Class aClass3 = thread.getClass();
System.out.println(aClass3);
}
2.3 通过反射获取构造方法
public static void main(String[] args) throws classNotFoundException{
//1.已获取字节码对象
Class aClass = Class.forName("com.zlt.test.Employee");
//2.通过字节码对象调用getConstructors()获取构造方法
Constructor[] constructors = aClass.getConstructor();
//3.遍历获取构造方法列表
for(int i = 0;i < constructors.length;i++){
System.out.println(constructors[i]);
}
}
2.4 反射获取成员变量
public static void main(String[] args) throws ClassNotFoundException,NoSuchFieldException{
//1.获取字节码对象
Class aClass = Class.forName("com.zlt.test.Employee");
//2.获取成员变量
Field[] declaredFields = aClass.getDeclaredFields();
//3.遍历输出成员变量
for(int i = 0;i < declaredFields.length;i++){
System.out.println(declaredFields[i]);
}
Field ageField = aClass.getDeclaredField("age");
System.out.println("获取某个指定的成员变量"+ageField);
System.out.println("获取某个指定的成员变量的名称"+ageField.getName());
System.out.println("获取某个指定的成员变量的类型"+ageField.getType());
}
2.5 反射获取成员方法
public static void main(String[] args) throws ClassNotFoundException{
//1.获取字节码对象
Class aClass = Class.forName("com.zlt.test.Emplyee");
//2.获取成员变量
Method[] declaredMethods = aClass.getDeclaredMethods();
//3.遍历循环成员方法列表
for(int i = 0;i < declaredMethods.length;i++){
System.out.println(declaredMethods[i]);
}
}
3 正则表达式定义
定义:
1.文本模式
2.字母,数字或者特殊字符组成。
应用场景:
1.一般应用于注册等功能中的某些校验需求
2.检索,替换某些符合某个规则的文本
API文档:
java.lang.String
java.util.regex.Pattern
4 正则表达式用法
1).
定义:匹配任意字符
2)replaceAll
定义:通过正则匹配字符串进行替换某字符
3)[]{x,y}
或[]{y}
定义:[]内为字符范围,x为字符出现最小次数,y为字符出现最大次数。
如[a-z]{3,7},出现3到7次小写字母
4)略
详细内容见:Java 正则表达式