文档章节

Java reflect-Java 反射

Oscarfff
 Oscarfff
发布于 2015/06/04 16:28
字数 404
阅读 58
收藏 0

一、通过reflect 实例化对象

按照老习惯,先上代码

package com.yuan.refletion;

class A {
	public int count;
    public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	public A(int start) {
        count = start;
        System.out.println("A 构造方法:"+count);
    }
    public void increase(int step) {
        count = count + step;
    }
}

测试 Java 反射

package com.yuan.refletion;

import java.lang.reflect.*;

class B {
	public static void main(String args[]) {
		A Aa = new A(0); //一般做法
		Aa.increase(2);
		System.out.println("Normal -> " + Aa.getCount());
		try {
		    Constructor<A> constructor = A.class.getConstructor(int.class); //获取构造方法
		    A AReflect =(A)constructor.newInstance(10); //创建对象
		    Method method = A.class.getMethod("increase", int.class);  //获取方法
		    method.invoke(AReflect, 15); //调用方法
		    Field field = A.class.getField("count"); //获取域
		    System.out.println("Reflect -> " + field.getInt(AReflect)); //获取域的值
		} catch (Exception e) { 
		    e.printStackTrace();
		} 
	}
}

output:

A 构造方法:0

Normal -> 2

A 构造方法:10

Reflect -> 25

二、通过setAccessable 方法越过权限检查访问类里面的私有变量

package com.yuan.refletion;

class A {
	private int count;//设置为私有变量
        public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	public A(int start) {
        count = start;
        System.out.println("A 构造方法:"+count);
    }
    public void increase(int step) {
        count = count + step;
    }
}

测试

package com.yuan.refletion;
import java.lang.reflect.*;
class B {
	public static void main(String args[]) {
		A Aa = new A(0); //一般做法
		Aa.increase(2);
		System.out.println("Normal -> " + Aa.getCount());
		try {
		    Constructor<A> constructor = A.class.getConstructor(int.class); //获取构造方法
		    A AReflect =(A)constructor.newInstance(10); //创建对象
		    Method method = A.class.getMethod("increase", int.class);  //获取方法
		    method.invoke(AReflect, 15); //调用方法
		    
		    Field field =A.class.getDeclaredField("count");//这个应该可以获取到所有的变量
		    //A.class.getField("count"); //获取域
		    field.setAccessible(true);//设置是否有权限获取
		    System.out.println("Reflect -> " + field.getInt(AReflect)); //获取域的值
		} catch (Exception e) { 
		    e.printStackTrace();
		} 
	}
}


本文转载自:http://www.infoq.com/cn/articles/cf-java-reflection-dynamic-proxy

共有 人打赏支持
Oscarfff
粉丝 72
博文 815
码字总数 96913
作品 0
崇明
后端工程师
Java面试基础篇——第十篇:反射的原理

什么是Java的反射机制?指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。对于任意一个对象,都能调用它的任意一个方法。这种动态获取信息,以及动态调用对象方法的功能叫Jav...

developlee的潇洒人生
07/24
0
0
云妹总结了一些最最最常见的Java面试题供大家参考

云妹导读:String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性 String类中使用字符数组:private final cha...

阿里云科技快讯
08/17
0
0
最最最常见的Java面试题总结——第二周

String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性   String类中使用字符数组:保存字符串,所以String对象是...

Amsour丶
08/13
0
0
Android 4.4(KK)中利用APP打开关闭数据流量

在Android 4.4中,在app中打开或关闭数据流量 如果有这方面需求可以参考。 思路 利用JAVA的反射机制(Reflection),来调用CONNECTIVITY_SERVICE完成相关操作。 关于JAVA的反射机制,可以参考...

W_X
2014/12/17
0
4
从 java bean 的内省到 dbutils 的应用

java bean 内省的基础 java bean 的内省,其实可以算是反射的一种基础应用,关于 java 的反射,无非就是获得对应的类、属性、方法、修饰符等的应用,对于 java 的反射探讨,可以点击参考 ja...

peiquan
07/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 识别慢性能的宏

Page Profiling 给你了有关页面在载入的时候操作缓慢的邪教,你可以将下面的内容添加到调试(debug)级别: Version 3.1 及其后续版本 设置包名字为 com.atlassian.renderer.v2.components.M...

honeymose
12分钟前
0
0
day93-20180920-英语流利阅读-待学习

时尚之觞:外表光鲜靓丽,其实穷得要命 Lala 2018-09-20 1.今日导读 讲到时尚界,我们脑海里浮现的可能都是模特和设计师光鲜靓丽、从容潇洒的模样。可是,最近在法国出版的一本书却颠覆了我们...

飞鱼说编程
27分钟前
0
0
maven的pom.xml用解决版本问题

maven管理库依赖,有个好处就是连同库的依赖的全部jar文件一起下载,免去手工添加的麻烦,但同时也带来了同一个jar会被下载了不同版本的问题,好在pom的配置里面允许用<exclusion>来排除一些...

JAVA码猿
51分钟前
1
0
20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
2
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
42
11

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部