- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java:失效的private修饰符解析
Java:失效的private修饰符
本文主要介绍Java 失效的private修饰符,这里整理了相关资料说明private 修饰符的作用,如何使用并与C++ 做比较,有兴趣的小伙伴可以参考下
在Java编程中,使用private关键字修饰了某个成员,只有这个成员所在的类和这个类的方法可以使用,其他的类都无法访问到这个private成员。
上面描述了private修饰符的基本职能,今天来研究一下private功能失效的情况。
Java内部类
在Java中相信很多人都用过内部类,Java允许在一个类里面定义另一个类,类里面的类就是内部类,也叫做嵌套类。一个简单的内部类实现可以如下
?
1
2
3
4 class OuterClass {
class InnerClass{
}
} 今天的问题和Java内部类相关,只涉及到部分和本文研究相关的内部类知识,具体关于Java内部类后续的文章会介绍。
第一次失效?
一个我们在编程中经常用到的场景,就是在一个内部类里面访问外部类的private成员变量或者方法,这是可以的。如下面的代码实现。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public class OuterClass {
private String language = en;
private String region = US;
public class InnerClass {
public void printOuterClassPrivateFields() {
String fields = language= + language + ;region= + region;
System.out.println(fields);
}
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.printOuterClassPrivateFields();
}
} 这是为什么呢,不是private修饰的成员只能被成员所述的类才能访问么?难道private真的失效了么?
编译器在捣鬼?
我们使用javap命令查看一下生成的两个class文件
OuterClass的反编译结果
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 15:30 $ javap -c OuterClass
Compiled from OuterClass.java
public class OuterClass extends java.lang.Object{
public OuterClass();
Code:
0: aload_0
1: invokespecial #11; //Method java/lang/Object.init:()V
4: aload_0
5: ldc #13; //String en
7: putfield #15; //Field language:Ljava/lang/String;
10: aload_0
11: ldc #17; //String US
13: putfield #19; //Field region:Ljava/lang/String;
16: return
public static void main(java.lang.String[]);
Code:
0: new #1; //class OuterClass
3: dup
4: invokespecial #27; //Method init:()V
7: astore_1
8: new #28; //class OuterClass$InnerClass
11: dup
12: aload_1
13: dup
14: invokevirtual #30; //Method java/lang/Object.getClass:()Ljava/lang/Class;
17: pop
18: invokespecial #34; //Method OuterClass$InnerClass.init:(LOuterClass;)V
21: astore_2
22: aload_2
23: invokevirtual #37; //Method Oute
您可能关注的文档
- jason地震反演软件培训解析.ppt
- Java 反射和动态代理解析.docx
- JAVA 课程设计蜘蛛纸牌报告终极修改版解析.doc
- javascript入门到精通4解析.ppt
- Java+mysql系统部署手册解析.doc
- javaJSP开发平台解析.ppt
- JavaScript学习笔记解析.doc
- JAVA、android开发常用英语汇总解析.doc
- JavaSE_12_异常处理解析.ppt
- JavaSE_30_反射和解析JSON解析.ppt
- 2025年度智慧城市建设抵押合同有效要件与物联网技术应用3篇.docx
- 2025年度智慧城市建设项目战略合作协议法律效力分析3篇.docx
- 2021年全国必威体育官网网址知识竞赛经典试题库及答案(共100题).pdf
- 2020年公路养护安全试题及答案.pdf
- 2020年XXX移动云中级培训方案经理培训认证习题题库.pdf
- 2025年度智慧城市建设招商引资合同性质与智能化技术应用3篇.docx
- 2025年度智能交通管理系统安装合同安装协议3篇.docx
- 2025年度智能交通系统建设战略合作3篇.docx
- 2025年度智能交通管理系统投资合作意向协议3篇.docx
- 湖北省鄂州市2024届高三第三次模拟考试数学试卷含解析.doc
文档评论(0)