自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java反射機(jī)制剖析:功能以及舉例

開(kāi)發(fā) 后端
從《Java反射機(jī)制剖析:定義和API》的API我們看到了許多接口和類(lèi),我們能夠通過(guò)這些接口做些什么呢

《Java反射機(jī)制剖析:定義和API》的API我們看到了許多接口和類(lèi),我們能夠通過(guò)這些接口做些什么呢?

從上篇API中我們能看到它能夠完成下面的這些功能:

1) 獲得類(lèi)

A. 運(yùn)用getClass() (每個(gè)class都有此函數(shù))

i. String str = "abc";

ii. Class c1 = str.getClass();

B. 運(yùn)用Class.forName() (static method 最常被使用)

i. Class c1 = Class.forName ("java.lang.String");

ii. Class c2 = Class.forName ("java.awt.Button");

C. 運(yùn)用 .class 語(yǔ)法

i. Class c1 = String.class;

ii. Class c2 = java.awt.Button.class;

iii. Class c4 = int.class;

iv. Class c5 = int[].class;

D. 運(yùn)用 TYPE語(yǔ)法 ( primitive wrapper classes 基本數(shù)據(jù)類(lèi)型包裝類(lèi)的 TYPE語(yǔ)法)

i. Class c1 = Boolean.TYPE;

2) 獲得屬性

以下四個(gè)方法可以獲得屬性,主要參見(jiàn)的是Java.lang.class

Public  Field  getField

(String name)

返回一個(gè) Field 對(duì)象,它反映此 Class 對(duì)象所表示的類(lèi)或接口的指定公共成員字段

public Field[] getFields()

返回一個(gè)包含某些 Field 對(duì)象的數(shù)組,這些對(duì)象反映此 Class 對(duì)象所表示的類(lèi)或接口的所有可訪問(wèn)公共字段

Public  Field

getDeclaredField(String name)

返回一個(gè) Field 對(duì)象,該對(duì)象反映此 Class 對(duì)象所表示的類(lèi)或接口的指定已聲明字段

public  Field[]

getDeclaredFields()

返回 Field 對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此 Class 對(duì)象所表示的類(lèi)或接口所聲明的所有字段

3) 獲得方法()

以下四個(gè)方法可以獲得方法,要參見(jiàn)的是Java.lang.class

public  Method

getMethod(String name,

... )

返回一個(gè) Method 對(duì)象,它反映此 Class 對(duì)象所表示的類(lèi)或接口的指定公共成員方法

public Method[] getMethods()

返回一個(gè)包含某些 Method 對(duì)象的數(shù)組,這些對(duì)象反映此 Class 對(duì)象所表示的類(lèi)或接口(包括那些由該類(lèi)或接口聲明的以及從超類(lèi)和超接口繼承的那些的類(lèi)或接口)的公共 member 方法

public Method

getDeclaredMethod(String name,…)

返回一個(gè) Method 對(duì)象,該對(duì)象反映此 Class 對(duì)象所表示的類(lèi)或接口的指定已聲明方法

public Method[]

getDeclaredMethods()

返回 Method 對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此 Class 對(duì)象表示的類(lèi)或接口聲明的所有方法,包括公共、保護(hù)、默認(rèn)(包)訪問(wèn)和私有方法,但不包括繼承的方法

4) 獲取類(lèi)的構(gòu)造器

以下四個(gè)方法可以獲得方法,要參見(jiàn)的是Java.lang.class

public  Constructor

getConstructor(Class<?>... )

返回一個(gè) Constructor 對(duì)象,它反映此 Class 對(duì)象所表示的類(lèi)的指定公共構(gòu)造方法

public  Constructor<?>[]

getConstructors()

返回一個(gè)包含某些 Constructor 對(duì)象的數(shù)組,這些對(duì)象反映此 Class 對(duì)象所表示的類(lèi)的所有公共構(gòu)造方法

Public  Constructor<T>

getDeclaredConstructor(Class<?>...)

返回一個(gè) Constructor 對(duì)象,該對(duì)象反映此 Class 對(duì)象所表示的類(lèi)或接口的指定構(gòu)造方法

public  Constructor<?>[]

getDeclaredConstructors()

返回 Constructor 對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此 Class 對(duì)象表示的類(lèi)聲明的所有構(gòu)造方法。它們是公共、保護(hù)、默認(rèn)(包)訪問(wèn)和私有構(gòu)造方法

示例代碼:

  1. import java.lang.reflect.Constructor;  
  2. public class TestConstructor {  
  3.     /**  
  4.      * @param args  
  5.      * @throws ClassNotFoundException   
  6.      * @throws SecurityException   
  7.      * @throws NoSuchMethodException   
  8.      */ 
  9.     public static void main(String[] args) throws Exception {  
  10.         // TODO Auto-generated method stub  
  11.         Class classType=Class.forName(args[0]);  
  12.         Constructor Constructor= classType.getConstructor();  
  13.           
  14.             System.out.println(Constructor.toString());  
  15.           
  16.     }  

5) 新建類(lèi)的實(shí)例

調(diào)用類(lèi)的Class對(duì)象的newInstance方法

  1. import java.lang.reflect.Constructor;  
  2.  
  3.  
  4. public class TestConstructor {  
  5.     /**  
  6.      * @param args  
  7.      * @throws ClassNotFoundException   
  8.      * @throws SecurityException   
  9.      * @throws NoSuchMethodException   
  10.      */ 
  11.     public static void main(String[] args) throws Exception {  
  12.         // TODO Auto-generated method stub  
  13.         Class classType=Class.forName(args[0]);  
  14.         //Constructor Constructor= classType.getConstructor();  
  15.         Object inst=classType.newInstance();  
  16.         System.out.println(inst);     
  17.     }  

調(diào)用默認(rèn)Constructor對(duì)象的newInstance方法

  1. import java.lang.reflect.Constructor;  
  2.  
  3.  
  4. public class TestConstructor {  
  5.     /**  
  6.      * @param args  
  7.      * @throws ClassNotFoundException   
  8.      * @throws SecurityException   
  9.      * @throws NoSuchMethodException   
  10.      */ 
  11.     public static void main(String[] args) throws Exception {  
  12.         // TODO Auto-generated method stub  
  13.         Class classType=Class.forName(args[0]);  
  14.         Constructor Constructor= classType.getConstructor();  
  15.         Object inst=Constructor.newInstance();  
  16.         System.out.println(inst);     
  17.     }  

調(diào)用帶參數(shù)Constructor對(duì)象的newInstance方法

  1. Class classType=User.class 
  2. Constructor constructor2 =  
  3.         classType.getDeclaredConstructor(int.class, String.class);  
  4.  
  5. Object inst = constructor2.newInstance(1"123");  
  6.  
  7. System.out.println(inst); 

原文鏈接:http://blog.csdn.net/lfsf802/article/details/7239711

【編輯推薦】

  1. Java反射機(jī)制剖析:定義和API
  2. Java遠(yuǎn)程方法調(diào)用RMI
  3. Java處理字符串搜索嵌套結(jié)構(gòu)的方法
  4. Java編程:常見(jiàn)問(wèn)題匯總
  5. Java迷題:等于,還是不等于?
責(zé)任編輯:林師授 來(lái)源: lfsf802的博客
相關(guān)推薦

2012-02-08 10:12:19

Java反射

2010-09-17 12:39:51

JAVA反射機(jī)制

2012-02-08 09:44:52

Java反射

2012-02-08 10:37:42

Java反射

2010-09-17 13:02:11

JAVA反射機(jī)制

2010-07-13 16:24:55

SQL Server快

2010-02-22 15:01:26

智能交換機(jī)

2012-04-05 13:50:38

Java

2017-03-24 09:44:33

Java反射機(jī)制

2017-05-17 15:28:15

Java反射機(jī)制

2011-09-27 10:23:24

Java反射機(jī)制

2011-03-09 09:11:52

java反射機(jī)制

2011-04-01 14:50:56

Java的反射機(jī)制

2009-06-17 13:57:54

java實(shí)例Reflection

2020-09-16 07:00:00

Android 11AndroidAndroid

2025-02-27 00:37:06

2022-10-21 14:12:06

2022-06-08 06:38:00

iPadOS 16SafariiCloud

2020-04-27 07:28:00

Java反射動(dòng)態(tài)代理

2023-11-01 13:48:00

反射java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)