Java进阶(极客)——反射机制(二)Field 对象的机制与实现

1、Field对象概述:
     1.1java.lang.reflect.Field,是用于表示类中,接口中属性对象的类
     1.2可以操作类中私有以及共有等全部属性和属性信息
2、Field对象的常用方法
     getName();//获得属性名称
     getType();//获得属性类型
     get(Object obj);//获取obj对象中这个的属性值

     set(Object obj, Object value);//像obj对象中这个属性赋值为value

     setAccessible(true);//启用访问控制权限,掉私有属性之前必须设置


FieldTest:

package com.zhh.fanshe.main;

import java.lang.reflect.Field;

import com.zhh.fanshe.domain.Book;
/**
 * Field 对象的机制与实现
 */
public class FieldTest {

	
	public static void main(String[] args) {
		Book book = new Book();
		book.setId(1);
		book.setName("三国演义");
		book.setType("小说");
		//show1_1(Book.class);
		show2(book);

	}
	/**
	 * 方式1
	 * 该方法用于使用传递过来的Class对象获取类中的属性值
	 */
	public static void show1(Class cl) {
		Field[] field=cl.getDeclaredFields();//可以获取到私有属性
		for (Field f:field) {
			System.out.println(f.getName());
			System.out.println(f.getType());
			/* 属性:
			 * id    
               int
               name
                                       属性类型
               class java.lang.String
               type
               class java.lang.String
			 * 
			 */
			
			
		}
		

	}
	/**
	 * 方式2
	 *该方法用于使用传递过来的Class对象获取类中的属性值
	 */
	public static void show1_1(Class cl) {
		Field[] field=cl.getFields();//不能获取私有属性
		for (Field f:field) {
			System.out.println(f.getName());
			System.out.println(f.getType());
			/* 打印出来的日志:
			 * id     属性名    
               int    属性类型
               
               name                    
               class java.lang.String
               
               type
               class java.lang.String
			 * 
			 */
			
		}
		
		

	}
	/**该方法用于使用传递过来的实体类对象 获取属性 以及属性的值
	 * 
	 * @param ob
	 */
		public static void show2(Object ob){
			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();
			}
		}
	

}//class

Book:

package com.zhh.fanshe.domain;

public class Book {
    public int     id;
    private String name;
    private String type;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        System.out.println("getName方法被调用了");
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public void test(String name, int i) {
        System.out.println(name);
        System.out.println(i);

    }

}


源码下载:

http://download.csdn.net/detail/zhaihaohao1/8852965

参考视频:
http://www.jikexueyuan.com/course/530.html



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值