文档章节

【基础】通过反射访问private成员和方法,private设计的

卯金刀GG
 卯金刀GG
发布于 06/24 12:59
字数 337
阅读 12
收藏 0
package com.test.reflect;

import java.lang.reflect.Method;

public class DemoPrivateInvoke {
	public static void main(String[] args) {
		printMethodPrivateInvoke(new Some());
	}
	
	public static void printMethodPrivateInvoke(Object obj) {
		Class c1 = obj.getClass();
		try {
			Method dm = c1.getDeclaredMethod("doSomingPrivate");
			dm.setAccessible(true);
			dm.invoke(obj);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
package com.test.reflect;

public class Some {
	public static String str3;
	private int num1;
	private String str1;
	public int num2;
	public String str2;
	
	public void doSoming() {
		System.out.println("doSoming");
	}
	
	private void doSomingPrivate() {
		System.out.println("doSomingPrivate");
	}
}

 

注意代码中的通过dm.setAccessible(true)这样在调用方法时他不会检查方法的修饰是public还是private。如果没有dm.setAccessible(true),那在invoke()调用方法时会报错,同样如果调用方法setAccessible()设置的是false,一样会报错。这样就实现了对私有方法的访问,那么问题来了,private的意义何在呢?

答:

private并不是解决安全问题的,如果想让解决代码的安全问题,请用别的办法。private的意义是OOP(面向对象编程)的封装概念。比如:有些地方会挂一个牌子“闲人免进”,但是没有警察看着,你进去也是可以的。对于本地化的文件,没有绝对的安全。最好的办法是放在服务器,提供接口来访问,通过服务器的路由,防火墙等技术,可以做到相对的安全。

 

 

 


 

© 著作权归作者所有

卯金刀GG
粉丝 26
博文 265
码字总数 72868
作品 0
昌平
程序员
私信 提问
java 反射 :setAccessible

写框架大多要用上。在写框架时,大多要调用用户自定义的类,并生成对象,调用用户的方法。由于框架事前不知道用户的类,因此需要反射。反射的主要功能,当用户指定了类位置与类名,就能生成该...

swearyd457
2013/10/10
2.1K
0
Unity C#基础之 反射反射,程序员的快乐

反射反射,程序员的快乐 这句话想必大家都经常听过,基本上在绝大多数的框架和一些设计模式中都能看到反射的身影(MVC、IOC、AOP、O/RM), 反射:是.Net Framework提供的一个帮助类库,可以...

su9257_海澜
2018/02/14
0
0
通过反射技术获得类中的所有属性

上周在项目里面考虑到效果的动态实现,由于之前只知道C#中的反射技术但是没用过,所以在动态获取类的属性成员时候就想不出好的方法来了,最后经过在网上的查询得到了好的解决方案===>就是使用...

gamecc666
08/15
0
0
Java基础知识——类装载器与反射机制

类装载器ClassLoader 类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件。 类装载器把一个类装入JVM中,要经过三步: 1.装载:查找和导入Class文件; 2.链接:执行校验、准...

札小白
2014/06/21
0
0
java的public,protect,缺省,private修饰符的访问权限

(1)对于public修饰符,它具有最大的访问权限,可以访问任何一个在CLASSPATH下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。 (2)对于protected修饰符...

YuanyuanL
2016/12/19
279
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
10
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
1K
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部