一天偶尔在网上找到一个jar包,反编译后出现了如下的代码:

public void defineAnonymousInnerClass(String name)

{

new Thread(name) {  //extra constructor argument "name"

public void run() {

System.out.println(this.val$name); //"this.val$"  is extra

}

}

.start();

}

当看到红色的部分时,我就纠结了。这是什么东西还能这么使用?后来在百度上搜索答案,却始终不得答案。最终在google找到了答案。

链接地址:http://www.mindfiresolutions.com/A-tip-on-val$-field-in-Java-decompiled-code-1725.php

其实,我是被编译器给玩了。这些代码都是编译器反编译的时候自己添加上去的。

第一个问题:匿名内部类要使用外面的参数,必须要加final。而代码中却没有加。

第二个问题:new Thread 这个类没有带参数的构造器。

第三个问题:this.val$这种用法很怪异,val$是哪里来的。

这些问题都是反编译器给我们搞的鬼。

我们在学习匿名内部类的时候都知道,匿名内部类要使用外部的变量,或者参数,这个变量和参数都必须是final类型。而且匿名内部类没有构造器他的构造器是继承于父类,这就还有一个问题就是那我们如何初始化内名内部类中的变量,只需要使用“{}”在里面初始化变量不需要任何修饰。再就是在匿名内部类中this表示当前对象,如果要使用外部类对象需要加上Outclass.this这才是外部对象。

所以以上代码我们做如下修改:

public void defineAnonymousInnerClass(final String name)//参数加上final

{

new Thread() {  //额外的参数去掉

public void run() {

System.out.println(name); //"this.val$"  多余的去掉

}

}

.start();

}

这时我们就可以正常运行了,其实都是编译器搞的鬼。

这是我第一次写博客,如有写的不对的地方请各位大侠们指教。

java val$name_匿名内部类 this.val$的问题相关推荐

  1. java中的匿名内部类

    匿名内部类在java编码中不是很常见,它可一让类实现多继承的特性(多个父类~1个子类) java中的匿名内部类总结 http://www.cnblogs.com/nerxious/archive/20 ...

  2. Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解。

    Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解. 什么是匿名内部类? 顾名思义 匿名 就是没有名字,一个没有名字的内部类,称为匿名内部类. 下面先看一个例子,比如说你 ...

  3. Java内部类(匿名内部类)

    Java内部类(匿名内部类) 一.内部类 二.静态内部类 三.成员内部类 四.局部内部类(了解即可) 五.匿名内部类(重要) 一.内部类 1.概述 内部类就是一个定义在一个类里面的类,里面的类可以理解 ...

  4. Java内部类和匿名内部类的用法

    Java内部类和匿名内部类的用法     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51981163 一.内部类:   ...

  5. Java 匿名类(匿名内部类)

    Java 匿名类(匿名内部类) 学习的参考博文:无恨之都 1. 初识 匿名类 标准说法: 内部类包括:成员类.局部类.匿名类(匿名内部类). 匿名类概念: 匿名类可以使你的代码更加简洁 (JDK8之后 ...

  6. java学习之匿名内部类与包装类

    匿名内部类: 所谓匿名内部类,顾名思义指的就是定义在类内部的匿名类,现有的spring框架开发以及java图形界面都经常用到匿名内部类. 下面来看一个代码: interface A{public vo ...

  7. Java类与匿名内部类

    大家好,这篇文章我们主要向大家介绍Java基础中的Object类.匿名内部类.构造方法的继承知识,一起来学习下吧! 一.Object类 Object类是所有类的父类,所有类都继承Object类. Ob ...

  8. Java静态内部类、匿名内部类、成员式内部类和局部内部类

    内部类可以是静态(static)的,可以使用 public.protected 和 private 访问控制符,而外部类只能使用 public,或者默认. 成员式内部类 在外部类内部直接定义(不在方法 ...

  9. java void eat_java匿名内部类

    java匿名内部类一般是没有变量指向的对象,只能使用一次 如下代码,为了使用抽象类People的eat方法还要去继承然后复写eat方式,非常麻烦.对于接口也是如此. package com.lubby ...

最新文章

  1. 配置国内 Docker Registry Mirror
  2. JavaMail邮件发送不成功的那些坑人情况及分析说明
  3. HACMP 认证学习系列,第 2 部分-1:计划与设计
  4. php实现隐藏字符串的功能
  5. 理解tcp关闭连接中的time_wait状态
  6. 5个构建Spring Boot API的实用技巧
  7. ACM 杰出会员姬水旺:量子化学和物理的深度学习
  8. java接口可以接两个吗,接口可以在Java中扩展多个接口吗?
  9. java lambda 变量_java – 从lambda表达式引用的局部变量必须...
  10. python爬虫爬取网页图片_Python之多线程爬虫抓取网页图片
  11. zen3 服务器芯片,7nm+工艺Zen3两线出击:EPYC服务器先发 锐龙5000紧跟
  12. Unity快速安装教程
  13. diskgenius数据恢复软件,亲测可用!
  14. 夜神模拟器连不上android studio了
  15. html 排版标签、文本格式化标签、图像标签、链接标签、注释标签、路径、锚点定位、base文本标签、pre标签、特殊字符
  16. Python获取当前时间
  17. 用户分类以及用户活跃度的衡量方法
  18. 锐捷服务器虚拟化技术_交换机虚拟化技术.ppt
  19. Ubuntu-安装输入法
  20. 知识付费APP的崛起

热门文章

  1. TensorFlow常用Python扩展包
  2. Python:Selenium和PhantomJS
  3. RecyclerView 判断滑动到顶部和底部
  4. Error: module pages/utils/util is not defined
  5. mqtt+htttp+websocket
  6. mysql的时间存储格式
  7. Python元组字典
  8. codeforces-1132 (div2)
  9. PE文件结构详解(三)
  10. 2022-2028年中国密集型光波复用(DWDM)设备行业市场前瞻与投资战略规划分析报告