导读

正文

java synthetic关键字。有synthetic标记的field和method是class内部使用的,正常的源代码里不会出现synthetic field。小颖编译工具用的就是jad.所有反编译工具都不能保证完全正确地反编译class。所以你不能要求太多。

下面我给大家介绍一下synthetic

下面的例子是最常见的synthetic field

class parent {

public void foo() {

}

class inner {

inner() {

foo();

}

}

}

非static的inner class里面都会有一个this$0的字段保存它的父对象。编译后的inner class 就像下面这样:

Java代码

class parent$inner{

synthetic parent this$0;

parent$inner(parent this$0)

{

this.this$0 = this$0;

this$0.foo();

}

}

所有父对象的非私有成员都通过 this$0来访问。

还有许多用到synthetic的地方。比如使用了assert 关键字的class会有一个synthetic static boolean $assertionsDisabled 字段

使用了assert的地方

assert condition;

在class里被编译成

Java代码

if(!$assertionsDisabled && !condition){

throw new AssertionError();

}

还有,在jvm里,所有class的私有成员都不允许在其他类里访问,包括它的inner class。在java语言里inner class是可以访问父类的私有成员的。在class里是用如下的方法实现的:

Java代码

class parent{

private int value = 0;

synthetic static int access$000(parent obj)

{

return value;

}

}

在inner class里通过access$000来访问value字段。

synthetic的概念

According to the JVM Spec: "A class member that does not appear in the source code must be marked using a Synthetic attribute." Also,"The Synthetic attribute was introduced in JDK release 1.1 to support nested classes and interfaces."

I know that nested classes are sometimes implemented using synthetic fields and synthetic contructors,e.g.an inner class may use a synthetic field to save a reference to its outer class instance,and it may generate a synthetic contructor to set that field correctly. I'm not sure if it Java still uses synthetic constructors or methods for this,but I'm pretty sure I did see them used in the past. I don't know why they might need synthetic classes here. On the other hand,something like RMI or java.lang.reflect.Proxy should probably create synthetic classes,since those classes don't actually appear in source code. I just ran a test where Proxy did not create a synthetic instance,but I believe that's probably a bug.

Hmm,we discussed this some time ago back here. It seems like Sun is just ignoring this synthetic attribute,for classes at least,and we should too.

注意上文的第一处黑体部分,一个类的复合属性表示他支持嵌套的类或者接口。

注意上文的第二处黑体部分,说明符合这个概念就是OO思想中的类的复合,也就是只要含有其它类的引用即为复合。

总结

以上就是本文关于Java编程中的synthetic关键字的全部内容,希望对大家能有所帮助。感谢大家对本站的支持。

相关

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

java synthetic_浅谈Java编程中的synthetic关键字相关推荐

  1. html 怪异模式,CSS_浅谈CSS编程中的怪异模式,怪异模式盒模型 今天学习了 - phpStudy...

    浅谈CSS编程中的怪异模式 怪异模式盒模型 今天学习了一下css3的box-sizing属性,顺便又温习了一下css的盒模型,最后觉得有必要对盒模型做一个全面整理. 先不考虑css3的情况,盒模型一共 ...

  2. python程序调用写好的代码_扣丁学堂浅谈Python编程中NotImplementedError的使用方法...

    扣丁学堂浅谈Python编程中NotImplementedError的使用方法 2018-07-04 14:08:02 2559浏览 本篇文章扣丁学堂 Python编程中raise可以实现报出错误的功 ...

  3. 【Java】浅谈Java的GUI开发

    GUI是什么? 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面. 图形用户界面是一种人与计算机通信的界面显示格 ...

  4. 浅谈软件编程中的8大数据结构

    文章目录 前言 一.为什么要研究数据结构 二.数据结构的分类 1.数组(Array) 2.链表(Linked List) 3.队列(Queue) 4.栈(Stack) 5.散列表(Hash) 6.树( ...

  5. java fork_浅谈Java的Fork/Join并发框架

    前几天有写到整合并发结果的文章,于是联想到了Fork/Join.因为在我看来整合并发结果其实就是Fork/Join中的Join步骤.所以今天我就把自己对Fork/Join一些浅显的理解记录下来. 1. ...

  6. 浅谈windows 编程中SendMessage函数的妙用!!!

    windows编程中SendMessage函数是非常重要的,而且这个对于理解windows的消息机制也很重要.本文用代码的方式实现了一些功能,借以说明此函数之妙用.说明不当之处,希望批评指正,谢谢! ...

  7. 浅谈并行编程中的任务分解模式

     并行编程使用线程来使得多个操作能够同时运行.并行编程主要包括应用程序中线程设计,开发和部署以及线程间相互协调和各自的操作. 在下文中我们将讨论怎样分割适合线程化大小的编程任务来多任务化一个应用程 ...

  8. 【Java】浅谈Java的I/O体系

    文章目录 流(Stream) 流的分类 java.io.* I/O体系的四大抽象类 流的分类总结表 流的层次结构图 字节输入流的层次结构图 字节输出流的层次结构图 字符输入流的层次结构图 字符输出流的 ...

  9. java什么是枚举_【JAVA】浅谈java枚举类

    一.什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二.为什么不用静态常量来替代枚举类呢? public static final int SEASO ...

最新文章

  1. XPath实例教程四、[]的作用
  2. 2020中国人工智能年度评选正在征集!开放4大类别7大奖项
  3. 微信小程序通用开发框架小程序端包含若干基础组件
  4. java 回收策略_Java堆回收策略
  5. 【NLP】NER数据标注中的标签一致性验证
  6. linux 内核维护,Linux 4.18内核系列生命周期结束:用户需尽快更新内核
  7. xmpp 与服务器连接并身份验证成功
  8. Visual Studio 2005 插件编程(代码行数统计插件)之一
  9. 使用可变对象作为Java Map的key,会带来潜在风险的一个例子
  10. python验证码识别接口 服务器_python验证码识别模块
  11. 剑指 Offer 53 - I. 在排序数组中查找数字 I(二分法)
  12. AVS解码器在DSP平台上的优化
  13. Quickr for Portal相关网址
  14. 【经验心得】关于RPGmaker的工程解码
  15. kettlejava脚本的api_[翻译]KETTLE JAVA API :编程定制自己的Kettle转换(transformation)...
  16. java setenabled不好用,哪个更好,setEnabled或setUserInteractionEnabled?
  17. CNware防DDOS攻击介绍--云宏
  18. 电影:美国队长:复仇者先锋
  19. Springboot实现阿里云通信短信服务有关短信验证码的发送
  20. B区考研学校排名计算机,b区(b区考研学校排名)

热门文章

  1. 用switch语句计算利润提成问题
  2. ssh远程执行命令自动输入密码方式
  3. html与python后端交互,python后端中取表单
  4. “华米OV”罕见联手,“一头多充”照进现实
  5. Java并发编程——ForkJoin详解
  6. 电脑上怎么压缩jpg图片?什么软件压缩图片好用?
  7. 天方夜谭音乐播放器免授权
  8. 腾讯音乐IPO在即,然而音乐产业依然充满机会
  9. Android辅助功能---全局手势放大
  10. 冤枉啊!!!秒杀被判定违反了政策?,还不能申诉?