1. 程式人生 > 實用技巧 >java反射機制與String.equal方法等知識點強化

java反射機制與String.equal方法等知識點強化

直接定義的型別的值 是存在常量區域中的
  例如:
  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();
        }

心得:三個小訓練的痛苦遠遠沒有失敗的那一刻難受