[JSOI2008]球形空間產生器
阿新 • • 發佈:2021-12-15
一、獲取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); } }