zoukankan      html  css  js  c++  java
  • 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值玄幻

  • 相关阅读:
    C语言第0次作业
    c语言博客作业02循环结构
    C语言博客作业04数组
    存储过程,函数参数默认值的一些问题
    路线查询
    C# 猜数字
    使用 Ext.Net TreePanel,TabPanel控件 布局
    SQL SERVER 2005 动态行转列SQL
    CROSS APPLY 和OUTER APPLY 的区别
    处理表重复记录(查询和删除)
  • 原文地址:https://www.cnblogs.com/rainmer/p/4665253.html
Copyright © 2011-2022 走看看