这条线

b = new Test5(){{ value = 1 ;}};

创建一个扩展Test5的匿名类的实例.但是,由于值是私有的,因此匿名类无法访问其超类的实例变量.

由于Test5的匿名子类没有可见的变量值,编译器会在下一个范围内查找替代方法.在这种情况下,下一个范围属于静态main方法.编译器发现Test5的实例变量,并发出警告,因为无法从静态上下文引用实例变量.

你有两个选择:

>使实例变量可供匿名类访问:

受保护的int值;

>或使静态main方法可以访问变量:

private static int value;

我从你的问题中得出结论,第一个选择是你真正想做的事情.

@Tom:问题不在于首先搜索静态范围.如果是这种情况,则替代(1)将不起作用,因为仍然首先找到实例变量值,但仍然无法引用.

@Ken:你的instanceMethod()不能做,你期望它做什么!看看下面的代码:

class Test5A {

private int value;

public void instanceMethod() {

Test5A a = new Test5A() {{ value = 1; }}; // (A)

System.out.println(this.value);

System.out.println(a.value);

}

public static void main(String[] args) {

new Test5A().instanceMethod();

}

}

此示例代码模仿您的类的行为.如果编译并执行它,您将看到输出为“1 0”.

虽然(A)中的匿名子类的实例初始化程序看起来像是将一个赋值给它自己的值实例变量,但该变量实际上只能在匿名类的超类中可见.相反,在第(A)行,唯一一个名为value的可见变量是Test5A实例的实例变量,在该实例上调用instanceMethod().因此,它变为一个.

现在让我们提高价值的可见度:

class Test5B {

protected int value;

public void instanceMethod() {

Test5B a = new Test5B() {{ value = 1; }};

System.out.println(this.value);

System.out.println(a.value);

}

public static void main(String[] args) {

new Test5B().instanceMethod();

}

}

这次输出为“0 1”.实例变量值由匿名子类继承,并且对于其实例初始化程序是可见的.因此,将一个分配给正确的实例变量.

java私有instance_java – Instance Initializer与私有成员相关推荐

  1. abstract类中不可以有private的成员_我要告诉你:java接口中可以定义private私有方法...

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  2. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  3. 利用java反射调用类的的私有方法

    http://blog.csdn.net/sunyujia/article/details/2501709 今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为在反射看来根 ...

  4. java中私有变量和方法_Java 私有变量和私有方法

    作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com) 内容索引 访问私有变量 访问私有方法 在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是 Java ...

  5. java定义私有变量_Java Reflection(七):私有变量和私有方法

    在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是Java反射机制可以做到这一点.使用这个功能并不困难,在进行单元测试时这个功能非常有效.本节会向你展示如何使用这个功能. 注意:这个功能只 ...

  6. 利用Java反射机制调用类的私有方法

    利用Java反射机制调用类的私有方法 引言 来吧·展示 参考链接 引言 如何调用其他类的私有方法呢? 可以利用Java的反射机制,去调用其他类的私有方法 来吧·展示 package cn.learn. ...

  7. python私有方法应用场景_Python 私有属性和私有方法应用场景分析

    类的私有属性和方法 Python是个开放的语言,默认情况下所有的属性和方法都是公开的 或者叫公有方法,不像C++和 Java中有明确的public,private 关键字来区分私有公有. Python ...

  8. 从私有云到云的私有部署,重新定义后云时代的企业IT

    自从2006年AWS推出第一代公有云以来,经过12年的发展,到2018年开始进入后云时代.所谓后云时代,就是以公有云为代表的云技术堆栈已经成熟,技术架构逐渐达成产业共识,市场形成几大技术厂商主导市场的 ...

  9. python 私有变量得访问_Python 私有变量的访问和赋值

    首先我们这里先描述下: Python中,变量名类似__x__的,以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的(比如 __doc__, __init__等),不是priva ...

最新文章

  1. 【c语言】分解质因数
  2. 求高维方阵的绝对值最大特征值的方法:幂法(幂迭代)。
  3. Kaggle-MNIST之路
  4. 第一周——数据分析之表示 —— Numpy 数据存取与函数
  5. mysql命令导入导出数据_mysql命令行导入和导出数据
  6. 重入锁、死锁、活锁、公平非公平锁……一下子都给你屡清楚了
  7. vim下更省心地用中文
  8. (五)nginx设置静态文件不记录日志
  9. Ceph Block Device块设备操作
  10. Delphi的MessageBox对话框使用
  11. jquery中的全局事件
  12. 8. 大型网站架构演化
  13. 编译nanopi neo 或者M1 uboot 启动SylixOS系统
  14. SAP 物料成本核算冻结:料号. 不能过账,是否取消?消息 CK167
  15. Node之HTTPS客户端
  16. 2022年华为杯中国研究生数学建模竞赛A题思路
  17. 第一章 语音信号处理概述
  18. 一级域名和二级域名的区别
  19. 【定时同步系列5】Farrow内插器结构原理和MATLAB实现
  20. 【CSS-定位和浮动】

热门文章

  1. 《剑指offer》从尾到头打印链表
  2. C#Winform怎么让控件随着主界面大小变化
  3. protocol buffer介绍(protobuf)
  4. python科学计算笔记(二)pandas获取网络文件
  5. 从DSSM语义匹配到Google的双塔深度模型召回和广告场景中的双塔模型思考
  6. AMD cpu 下 Pytorch 多卡并行卡死问题解决
  7. C# 8.0的三个令人兴奋的新特性 1
  8. iOS - AsyncSocket 的使用
  9. Android日期对话框NumberPicker的用法教程
  10. 第二版全新博客园win phone 客户端