文档章节

关于外部访问类的静态属性

yeqiang2015
 yeqiang2015
发布于 2018/05/20 17:05
字数 379
阅读 23
收藏 0

今天遇到一个问题,别人问我如何在外部访问类的私有属性?

我很奇怪,我直接new这个对象不就可以获取了吗? new Person().getName();这样不就可以获取这个类的私有属性值了吗?

不过对方说不是这种方式,后来我查了下,可以通过反射的机制来获取该属性和方法:

类对象

public class Examp {
	
	public int pub = 3;
	
	private int a = 4;
	
	private String s = "123";
	
	
	
	public void demo01(){
		System.out.println("======demo01===========");
	}
	
	private void demo02(){
		System.out.println("======demo02===========");
	}
	
	private void demo03(String s){
		a++;
		System.out.println("======demo03===s:"+s+"========a:"+a);
	}
	
}

测试类:

public static void main(String args[]){ 
		Examp e=new Examp();  //初始化Exam实例  
	
		try {
            Field pub = e.getClass().getDeclaredField("pub");
            System.out.println("pub: "+pub.get(e));  
            Field  a = e.getClass().getDeclaredField("a");  
            Field s = e.getClass().getDeclaredField("s"); 
            a.setAccessible(true); 
            s.setAccessible(true);   
			
			System.out.println("s: "+s.get(e)); 
            s.set(e,"sss");  
            System.out.println("新的s: "+s.get(e)); 
			
            System.out.println("a: "+a.get(e));  
            a.set(e,8);  
            System.out.println("新的a: "+a.get(e));  
        } catch (NoSuchFieldException e1) {  
            e1.printStackTrace();  
        }catch (IllegalArgumentException e1) {  
            e1.printStackTrace();  
        } catch (IllegalAccessException e1) {  
            e1.printStackTrace();  
        }  
	
	
		try {  
              
            Method method1 = e.getClass().getDeclaredMethod("demo01");  
            method1.invoke(e);  
              
            Method method2 = e.getClass().getDeclaredMethod("demo02");  
            method2.setAccessible(true);  
            method2.invoke(e);  
              
            Method method3 = e.getClass().getDeclaredMethod("demo03",String.class);  
            method3.setAccessible(true);  
            method3.invoke(e,"ffff");  
        } catch (NoSuchMethodException e1) {  
            // TODO Auto-generated catch block  
            e1.printStackTrace();  
        } catch (SecurityException e1) {  
            // TODO Auto-generated catch block  
            e1.printStackTrace();  
        }catch (IllegalAccessException e1) {  
            // TODO Auto-generated catch block  
            e1.printStackTrace();  
        } catch (IllegalArgumentException e1) {  
            // TODO Auto-generated catch block  
            e1.printStackTrace();  
        } catch (InvocationTargetException e1) {  
            // TODO Auto-generated catch block  
            e1.printStackTrace();  
        }

	}

结果:

pub: 3
s: 123
新的s: sss
a: 4
新的a: 8
======demo01===========
======demo02===========
======demo03===s:ffff========a:9

如上可以获取类的属性,值和方法,不过这种方式就是说你必须知道这个类的属性或方法的名字

© 著作权归作者所有

yeqiang2015
粉丝 2
博文 21
码字总数 7740
作品 0
丰台
后端工程师
私信 提问
python类中方法和属性的分类概述

本文出自“阿敏其人”简书技术博客,转载请注明出处。 文/阿敏其人 一、类的创建 创建格式 . 来个例子 . . 类的属性和方法 初探 在类里面可以直接定义 属性 和 方法,跟其他语言类似。 方法 ...

阿敏其人
2018/08/10
0
0
Python中关于面向对象的相关知识

面向对象特点 注重对象与职责,不同对象,不同职责; 应对复杂项目开发,提供固定模版; 基于面向过程; 封装:根据功能将属性和方法封装到一个抽象的类中; 继承:实现代码复用,相同代码不...

村雨1943
2018/10/09
16
0
PHP中关于面向对象程序设计的相关简介

PHP面向对象程序设计 面向对象的程序设计(Object Oriented Programming) 一、面向对象程序设计的概念 PHP引进的面向对象的设计方法,将数据及处理数据的相应函数“封装”到一个“类(class...

PXZ6603
2016/08/20
0
0
PHP中关于面向对象程序设计的相关简介

PHP面向对象程序设计 面向对象的程序设计(Object Oriented Programming) 一、面向对象程序设计的概念 PHP引进的面向对象的设计方法,将数据及处理数据的相应函数“封装”到一个“类(class...

PXZ6603
2018/06/26
0
0
JavaScript 面向对象基础

1 关于对象的1 关于对象的静态属性、私有属性、局部变量、原型变量 的使用与区别 1)局部变量:是指在函数中用 var 声明过的变量,在函数运行完之后内存被自动回收! 2)私有属性:是指在函数...

learn_more
2014/10/12
41
0

没有更多内容

加载失败,请刷新页面

加载更多

作为一个(IT)程序员!聊天没有话题?试试这十二种技巧

首先呢?我是一名程序员,经常性和同事没话题。 因为每天都会有自己的任务要做,程序员对于其他行业来说;是相对来说比较忙的。你会经常看到程序员在发呆、调试密密麻麻代码、红色报错发呆;...

小英子wep
今天
14
0
【SpringBoot】产生背景及简介

一、SpringBoot介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要...

zw965
今天
5
0
简述并发编程分为三个核心问题:分工、同步、互斥。

总的来说,并发编程可以总结为三个核心问题:分工、同步、互斥。 所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共...

dust8080
今天
6
0
OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3.3K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部