1. 程式人生 > 其它 >[JSOI2008]球形空間產生器

[JSOI2008]球形空間產生器

一、獲取Class物件

獲取一個類對應的Class物件,有以下三種方式

  • 使用Class的forName方法,該方法需要一個字串引數,該字串是該類的全限定名
  • 呼叫該類的class屬性來獲取該類對應的Class物件
  • 呼叫該類某個物件的getClass()方法,該類是Object類的方法,所有的java物件都是可以呼叫的

具體的程式碼如下:

public class Hello {

    public static void main(String[] args) throws ClassNotFoundException {
        Class<?> aClass = Class.forName("com.ali.reflect.Hello");
        Class<Hello> helloClass = Hello.class;
        Class<? extends Hello> aClass1 = new Hello().getClass();

        System.out.println(aClass);        //class com.ali.reflect.Hello
        System.out.println(helloClass);    //class com.ali.reflect.Hello
        System.out.println(aClass1);      //class com.ali.reflect.Hello
    }
}

二、從Class類中獲取資訊

從類對應的Class物件可以獲取哪些資訊呢?主要如下:

  • 類所包含的構造方法
  • 類所包含的普通方法
  • 類上用到的annotation
  • 類所包含的內部類
  • 類所在的外部類
  • 類所實現的介面
  • 類所繼承的父類
  • 類的修飾符、所在包、類名等基本資訊
  • 判斷該類是否為介面、列舉、註解等型別

三、使用反射建立物件並操作物件

1、建立物件

使用Class物件來生成類的物件一般需要以下三步:

1.獲取該類的Class物件
2.利用Class物件的getConstructor方法類獲取指定的構造器
3.利用Constructor的newIntance方法來建立一個類的物件

程式碼如下:

public class Hello {
    public static void main(String[] args) throws {
        Class<?> aClass = Class.forName("com.ali.reflect.Hello");  //第一步
        Constructor<?> constructor = aClass.getConstructor();     //第二步 
        Object o = constructor.newInstance();                    //第三步
        System.out.println(o);                                  
    }
}