反射机制:在程序运行状态下,动态获取信息,动态调用对象的功能。是对类的解剖
Class<T>类:对字节码文件(类)的描述。封装了类的所有信息。
public class ClassDemo {
/*
* 用反射机制模拟电脑运行
* 1.定义一个接口
* 3.使用接口
* 4.读取配置文件,实例化接口子类。 <pre name="code" class="html"> * 2....实现接口....
*/public static void main(String[] args) throws IOException, Exception {Computer c = new Computer();// 读取配置文件Properties pro = new Properties();FileReader fr = new FileReader("usb.properties");pro.load(fr);// 根据读取到的类名,实例化接口子类。for (int i = 0; i < pro.size(); i++) {// 获取类名String usbName = pro.getProperty("usb" + (i + 1));// 获取该类名所对应的字节码文件Class clazz = Class.forName(usbName);// 创建该类的一个实例,泛型不指定Object,强转。InterfaceUsb usb = (InterfaceUsb) clazz.newInstance();c.useUsb(usb);}}}
/*
* 定义一个Usb接口。
*/
public interface InterfaceUsb {
public void open();
public void close();
}
/*
* 使用usb接口
*/
public class Computer {
Computer() {
System.out.println("运行电脑");
}
// 使用Usb
public void useUsb(InterfaceUsb usb) {
if (usb != null) {
usb.open();
usb.close();
}
}
}
/*
* 实现usb接口
*/
public class Mouse implements InterfaceUsb {
public void open() {
System.out.println("插入鼠标");
}
public void close() {
System.out.println("拔出鼠标");
}
}
正则表达式(regex):用于操作字符串数据。匹配、替换、获取、查找、、、
Pattern类:正则表达式的编译表示形式。指定为字符串的正则表达式必须首先被编译为此类的实例。
--模式--将一个字符串转换成一个正则表达式--
Matcher类:匹配器、、根据 Pattern 执行匹配操作的引擎。
--描述正则表达式如何操作字符串数据。
、、正则表达式小案例、、、、
import java.util.TreeSet;
public class RegexTest {
public static void main(String[] args) {
// 1.治疗口吃。将"我我..我我...来来..来...了.了了..了.了..了"转成"我来了"
String str1 = "我我..我我...来来..来...了.了了..了.了..了";
str1 = changeString(str1);
System.out.println(str1);// 我来了
// 2.对ip地址排序"127.0.0.1 189.3.5.4 8.8.8.8 255.36.21.8"
String ip_str = "127.0.0.1 189.3.5.4 8.8.8.8 255.36.21.8";
sortIp(ip_str);
/****************
* 8.8.8.8 * 127.0.0.1 * 189.3.5.4 * 255.36.21.8 *
****************/
// 3.校验邮箱
String email = "123asd@q.q.com";
boolean b = checkEmail(email);
System.out.println(b);
/*
* 4.网页爬虫
* 使用URL统一资源定位符的 openStream()读取URL引用的资源
* 正则获取...
* 创建一个Pattern...
* 获取Matcher...和要匹配的数据关联
* 保存匹配的数据
*/
}
private static boolean checkEmail(String email) {
return email.matches("[\\w]+@[\\w]+(\\.[\\w]+)+");
}
private static void sortIp(String ip_str) {
// 先补0
ip_str = ip_str.replaceAll("(\\d+)", "00$1");
// 保留后三位
ip_str = ip_str.replaceAll("0*(\\d{3})", "$1");
// 再切割
String[] ips = ip_str.split(" +");
// 排序想到 TreeSet 集合
TreeSet<String> ts = new TreeSet<String>();
for (String ip : ips) {
ts.add(ip);
}
for (String ip : ts) {
ip = ip.replaceAll("0*(\\d+)", "$1");
System.out.println(ip);
}
}
/*
* 治疗口吃
*/
private static String changeString(String str1) {
// 删除..即替换成空
str1 = str1.replaceAll("\\.+", "");
// 删除重复,即将多个相同字替换成一个
str1 = str1.replaceAll("(.)\\1*", "$1");
return str1;
}
}