反射機制:在程序運行狀態下,動態獲取信息,動態調用對象的功能。是對類的解剖
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 = "[email protected]";
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;
}
}