java反射机制入门02

Field对象的机制与实现

1、Field对象概述

  1)Java.lang.reflect.Field类,是用于表示类中、接口中属性对象的类。

  2)可以操作类中私有,以及公有等全部属性和属性的信息。 

2、Field对象的常用方法介绍

方法名 释义
getName() 获取属性名称
getType() 获取属性类型
get(Object obj) 取得obj对象中这个属性的值
set(Object obj,Object value) 向boj这个属性赋值value
setAccessible(boolean) 启用/禁用访问控制权限

 

 

 

 

 

 

 

package com.rainmer.main;



import java.lang.reflect.Field;



import com.rainmer.bean.Book;



public class FieldTest {

    //改方法用于使用传递过来的Class对象获取类中的属性

    public void show(Class c1){

        Field[] fi = c1.getDeclaredFields();//可以获取所有属性,无论公有还是私有

        System.out.println("~~~~~~~~~~~~获取所有有属性(包括私有)~~~~~~~~~~~~~~");

        for(Field ff : fi){

            System.out.println(ff.getName());

            System.out.println(ff.getType());

        }

        System.out.println("~~~~~~~~~~~~只能获取共有属性~~~~~~~~~~~~~~");

        Field[] fi1 = c1.getFields();//只能获取共有属性

        for (Field ff : fi1) {

            System.out.println(ff.getName());//属性名称

            System.out.println(ff.getType());//属性类型

        }

    }

    

    //该方法用于使用传递过来的实体类对象获取属性以及属性的值

    public void show(Object ob){

        System.out.println("~~~~~~~~~~~~~~~通过实体类对象获取属性以及属性的值~~~~~~~~~~~~~~~~~~~");

        Class cl = ob.getClass();

        Field[] fi = cl.getDeclaredFields();

        try{

            for (Field ff : fi) {

                ff.setAccessible(true);//启用访问权限,并不是把私有属性变成共有属性

                System.out.println(ff.getName()+"值"+ff.get(ob));

            }

        }catch(Exception e){

            e.printStackTrace();

        }

    }

    

    public static void main(String[] args) {

        Book bo = new Book();

        bo.setId(1);

        bo.setName("斗破苍穹");

        bo.setType("玄幻");

        

        FieldTest ft = new FieldTest();

        ft.show(Book.class);

        ft.show(bo);

        

    }

}

 

运行结果:

调用了setName方法
~~~~~~~~~~~~获取所有有属性(包括私有)~~~~~~~~~~~~~~
id
int
name
class java.lang.String
type
class java.lang.String
~~~~~~~~~~~~只能获取共有属性~~~~~~~~~~~~~~
type
class java.lang.String
~~~~~~~~~~~~~~~通过实体类对象获取属性以及属性的值~~~~~~~~~~~~~~~~~~~
id值1
name值斗破苍穹
type值玄幻

你可能感兴趣的:(java反射机制)