日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java 反射field_Java基础--反射之Field

發(fā)布時間:2025/3/15 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 反射field_Java基础--反射之Field 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、Field

(1)Field

/**

* Field: 分裝了字段的信息

* 1. 獲取字段

* 1.1 Field[] fields = clazz.getDeclaredFields();

* 1.2 Field field = clazz.getDeclaredField("name");

*

* 2. 獲取指定對象的指定字段的值

* public Object get(Object obj)

* obj 為字段所在對象

* 3. 設(shè)置指定對象的指定字段的值

* public void set(Object obj, Object value)

* obj 字段所在對象

* value 要設(shè)置的值

*/

@Test

public void test10() throws Exception {

Class clazz = Class.forName("com.wang.reflection.Person");

//1.獲取字段

//1.1 獲取Field的數(shù)組

Field[] fields = clazz.getDeclaredFields();

for(Field field : fields) {

System.out.println("1.1 " + field);

}

//1.2 獲取指定名字的Field

Field field = clazz.getDeclaredField("name");

System.out.println("1.2 " + field.getName());

//2.獲取指定對象的Field的值

Person person = new Person("AAA", 22);

Object val = field.get(person);

System.out.println("2 " + val);

//3. 設(shè)置指定對象的Field值

field.set(person, "BBB");

System.out.println("3 " + person.getName());

//4. 若該字段是私有的,需要調(diào)用

Field field2 = clazz.getDeclaredField("age");

field2.setAccessible(true);

System.out.println("4 " + field2.get(person));

}

結(jié)果輸出:

(2)為私有屬性賦值

@Test

public void test11() throws Exception {

String className = "com.wang.reflection.Student";

String fieldName = "age";

Object val = 20;

//創(chuàng)建className所對應(yīng)的對象,并為其fieldName賦值為val

Object obj = null;

Class clazz = Class.forName(className);

Field field = null;

for(Class clazz2 = clazz; clazz2 != Object.class; clazz2 = clazz2.getSuperclass()) {

try {

field = clazz2.getDeclaredField(fieldName);

} catch (Exception e) {}

}

obj = clazz.newInstance();

field.setAccessible(true);

field.set(obj, val);

Student stu = (Student)obj;

System.out.println(stu.getAge());

}

二、Constructor

/**

* Constructor: 構(gòu)造器

*/

@Test

public void test12() throws Exception {

String className = "com.wang.reflection.Person";

Class clazz = Class.forName(className);

//1. 獲取構(gòu)造器對象

//1.1 獲取所有構(gòu)造器

Constructor [] constructors =

(Constructor[]) Class.forName(className).getConstructors();

for(Constructor cons : constructors) {

System.out.println("1.1 " + cons);

}

//1.2 獲取指定的構(gòu)造器

Constructor constructor = clazz.getConstructor(String.class,Integer.class);

System.out.println("1.2 " + constructor);

//2. 調(diào)用構(gòu)造器的newInstance方法創(chuàng)建對象

Object obj = constructor.newInstance("AAA", 18);

}

輸出:

總結(jié)

以上是生活随笔為你收集整理的java 反射field_Java基础--反射之Field的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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