日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

JAVA反射机制初步理解

發(fā)布時間:2025/3/15 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA反射机制初步理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Java中我們這樣聲明一個類,如人類

package cn.com.lcx.test;public class Person {public String sex = "男";private String name;private int age;public Person() {super();}public Person(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void say(){System.out.println("姓名:"+name+",年齡:"+age+","+sex);} }

這是一個Person類型,java 類庫中有 String類型,

不管是我們自定義的 類型還是 java類庫中的類型 它們都有 構(gòu)造函數(shù)、成員函數(shù)、成員屬性,java中對象是對客觀事物的抽象,類是對對象的抽象,所以java將所有的類型抽象成這樣一個類型:Class類型。

我們用Person 類聲明一個對象,Person p = new Person(); 這代表了一個具體的人類對象。

而我們的Class 類的對象就是具體的類如Person類,或者可以說是 Person類的那份二進制代碼。我們可以通過以下3種方式聲明Class 類的對象

Person person = new Person(); Class personClass1 = Person.class;//類名.class Class personClass2 = person.getClass();//Person類對象的getClass方法 Class personClass3 = Class.forName("cn.com.lcx.test.Person");//類完整路徑

這樣我們就獲取到了Person類的代碼,Class api可以通過如下方法獲取到 Class對象的構(gòu)造函數(shù)、成員函數(shù)、成員屬性等類元素的反射對象。

反射對象類,都在java.refect包總定義,主要有以下3個反射類:

Constructor.class:類中構(gòu)造函數(shù)反射類

Method.class:類中方法反射類

Field.class:類的成員屬性反射類

反射類和普通類一樣都是對共有東西的抽象。

普通的方式訪問成員函數(shù)或者成員屬性是通過具體的對象去進行訪問,

而反射是方法/屬性對象針對某個具體對象進行調(diào)用或者訪問的,這普通的方式好像是反著的,可能這就是反射的由來吧。

下面舉個簡單的例子進行拋磚引玉

package cn.com.lcx.test;import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method;public class Refect {@SuppressWarnings({ "rawtypes", "unchecked" })public static void main(String[] args) throws Exception {//普通方式:實例化對象、調(diào)用方法、訪問屬性Person person = new Person("普通人",0);//構(gòu)造函數(shù)調(diào)用person.sex = "男";//訪問屬性person.say();//調(diào)用方法Class personClass1 = Person.class;//類名.classClass personClass2 = person.getClass();//Person類對象的getClass方法Class personClass3 = Class.forName("cn.com.lcx.test.Person");//類完整路徑//Person類的構(gòu)造函數(shù)反射類對象Constructor personConstructor = personClass1.getConstructor(String.class,int.class);System.out.println("通過反射實例化對象---------");//通過構(gòu)造函數(shù)反射類對象實例化Person類對象Person person1 =(Person) personConstructor.newInstance("張一",1);Person person2 = (Person) personConstructor.newInstance("張二",2);Person person3 = (Person) personConstructor.newInstance("張三",3);person1.say();person2.say();person3.say();System.out.println("通過反射實現(xiàn)對對象成員方法調(diào)用---------");//Person類的成員函數(shù)反射類對象Method method = personClass2.getMethod("setName",String.class);method.invoke(person1, "李一");method.invoke(person2, "李二");method.invoke(person3, "李三");person1.say();person2.say();person3.say();System.out.println("通過反射實現(xiàn)對成員屬性的訪問---------");//Person類的成員屬性反射類對象Field field = personClass3.getField("sex");//獲取公有屬性/*** 獲取私有屬性或者私有方法用getDeclaredXXX方法,* 如果想訪問私有成員那么該屬性對象或者方法對象要設(shè)置setAccessible(true)方法*/Field fieldPrivate = personClass3.getDeclaredField("name");fieldPrivate.setAccessible(true);//設(shè)置可以訪問私有屬性fieldPrivate.set(person, "反射人");person.say();field.set(person1, "男人");field.set(person2, "女人");field.set(person3, "人妖");person1.say();person2.say();person3.say();} }

總結(jié)

以上是生活随笔為你收集整理的JAVA反射机制初步理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。