java反射機制與String.equal方法等知識點強化
阿新 • • 發佈:2020-08-21
直接定義的型別的值 是存在常量區域中的
例如:
int a="1";
String str="hello"; 與 String str=new String("str");的區別:
前者的值hello是存在常量區域中的 後者會先去靜態區域檢視是否有"hello"這個變數
如果有則直接將hello拿到堆裡來指向str 如果沒有這個值 則會自己定義一個在常量區域中 然後再拿到
堆裡面來再指向str
String.equals():
Object中的equals方法是比較兩者的記憶體地址 但是 String類中重寫了equals 方法 String 類中的
equals 方法 會將兩個字串變成 兩個char型別的陣列 然後再去對比兩個char型別陣列的值是否相等
所以說 Object中的equals方法等價於==,String的equals方法比較的是值是否相等
java反射機制主要功能:
1.在執行時判斷任意一個物件所屬的類
2.在執行時構造任意一個類的物件?
3.在執行時判斷任意一個類所具有的成員變數和方法(通過反射甚至可以呼叫private方法)
4.在執行時呼叫任意一個物件的方法
獲取Class類物件的方法原始碼:
public class Demo1 { public static void main(String[] args) throws ClassNotFoundException {//獲取Class類物件的四種方法 //1、 Object obj=new String(); System.out.println("obj.getClass():"+obj.getClass()); //2、 System.out.println("String.class:"+ String.class); //3、 System.out.println("Class.forName(\"java.lang.String\"):"+(Class.forName("java.lang.String")));//4、 System.out.println("ClassLoader.getSystemClassLoader():"+ClassLoader.getSystemClassLoader().loadClass("java.util.ArrayList")); } }
隨意輸入一個類輸出他的父類 原始碼:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { System.out.print("輸入任意類的名字:"); String className = br.readLine(); String xx= className.getClass().getName(); Class cls = Class.forName(xx); // 迴圈列印父類資訊,直到沒有父類 while (cls != null) { System.out.println(cls); cls = cls.getSuperclass(); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); }
心得:三個小訓練的痛苦遠遠沒有失敗的那一刻難受