1. 程式人生 > 其它 >反射(2)

反射(2)

得到Class類的幾種方法

package com.reflection;/**
 * 測試Class類的建立方式有哪些
 * @author 長空扯淡
 */
public class Test02 {
    public static void main(String[] args) throws ClassNotFoundException {
        Person person = new Student();
        System.out.println(person.name);

        //方式一:通過物件獲得
        Class c1 = person.getClass();
        System.out.println(c1.hashCode());

        
//方式二:forName獲得 Class c2 = Class.forName("com.reflection.Student"); System.out.println(c2.hashCode()); //方式三:通過類名.class獲得 Class<Student> c3 = Student.class; System.out.println(c3.hashCode()); //方式四:基本內建型別的包裝類都有一個Type屬性 Class c4 = Integer.TYPE; System.out.println(c4);
//獲得父類型別 Class c5 = c1.getSuperclass(); System.out.println(c5); } } class Person{ public String name; public Person(){} public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } }
class Student extends Person{ public Student(){ this.name = "學生"; } } class Teacher extends Person{ public Teacher(){ this.name = "老師"; } }

所有型別的Class物件

package com.reflection;

import java.lang.annotation.ElementType;

//所有型別的class
public class Test03 {
    public static void main(String[] args) {
        Class c1 = Object.class;   //
        Class c2 = Comparable.class;   //介面
        Class c3 = String[].class;   //一維陣列
        Class c4 = int[][].class;    //二維陣列
        Class c5 = Override.class;    //註解
        Class c6 = ElementType.class;    //列舉
        Class c7 = Integer.class;   //基本資料型別
        Class c8 = void.class;   //void
        Class c9 = Class.class;   //Class
//只要元素型別與維度一樣,就是同一個Class
        int[] a = new int[10];
        int [] b = new int[100];
        System.out.println(a.getClass().hashCode());
        System.out.println(b.getClass().hashCode());
    }
}