首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

来自匿名内部类的外部类的关键字

在Java中,匿名内部类可以访问外部类的成员变量和方法,但是不能直接访问外部类的静态成员变量和方法。为了访问外部类的静态成员变量和方法,可以使用外部类的关键字。

例如,假设有一个外部类A,其中有一个静态成员变量x和一个静态方法y,现在在外部类A的内部创建一个匿名内部类B,如下所示:

代码语言:java
复制
public class A {
    public static int x = 10;
    public static void y() {
        System.out.println("Hello, world!");
    }
    public void method() {
        B b = new B();
    }
    private class B {
        public void print() {
            System.out.println(A.x);
            A.y();
        }
    }
}

在上面的代码中,匿名内部类B可以通过A.x和A.y()来访问外部类A的静态成员变量和方法。这里的A.x和A.y()就是外部类的关键字。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java_内部类、匿名内部类的使用

内部类的分类 成员内部类,类定义在了成员位置 (类中方法外称为成员位置) 局部内部类,类定义在方法内 成员内部类 :定义在类中方法外的类。...class 内部类 { // 成员变量 // 成员方法 } } } 匿名内部类 匿名内部类 :是内部类的简化写法。...它的本质是一个 带具体实现的父类或者父接口的匿名的子类对象 匿名内部类必须继承一个父类或者实现一个父接口。...new 父类名或者接口名(){ // 方法重写 @Override public void method() { // 执行语句 } }; 以接口为例,匿名内部类的使用...定义一个没有名字的内部类 这个类实现了Swim接口 创建了这个没有名字的类的对象 匿名内部类的使用场景 通常在方法的形式参数是接口或者抽象类时,也可以将匿名内部类作为参数传递。

66430
  • 匿名内部类的定制化特性

    那么有没有一种更加灵活的方式呐。哎...这就要介绍我们今天说的匿名内部类了。我们完全可以提供一个接口,然后在代码中直接针对此接口实例化一个对象,但是这个对象肯定会让你是实现里边的方法。...先截图看一下: 定义接口: public interface TestAB { //定义接口 String fetchInfo(String name); } 2.匿名内部类实现接口...{ @Override public String fetchInfo(String name) { return "匿名内部类实现类..."+ UUID.randomUUID().toString()+" "+name; } }); } //调用匿名内部类的方法 private static...我们呐完全可以在这个接口里添加一些其他的元素,比如虚方法,或者父类等,将一些可以通过一定数量的参数的入参的普适计算途径得到一个大致的数据结构,然后将其封装成为我们匿名内部类方法所识别的类或者基于共同父类的参数类

    25710

    Android(Java) | 你真的熟悉Java匿名内部类吗(Java匿名内部类的限制)

    ,会引用外部类实例 只能捕获外部作用域内的final变量 创建时只有单一方法的接口可以用Lambda转换 a.匿名内部类的名字 表面上是没有引用名的, 但其实是有用于定位的“名字”, ?...**即使使用Java 10 的var关键字来定义, 只能继承一个父类或实现一个接口 >- 父类是非静态的类型,则需父类外部实例来初始化 >- 如果定义在非静态作用域内,会引用外部类实例 >-...即使使用Java 10 的var关键字来定义, 也是不行的, 这种类型还是不能被接受: (在处理 var时,编译器先是查看表达式右边部分, 也就是所谓的构造器,并将它作为变量的类型,然后将该类型写入字节码当中..., 所以OuterClass()的实例也会在这里(左上第四行)new出来; 而下方的Client$1就是上述所说的匿名内部类的类型了, Client$1的命名格式其实就是刚刚说的外部内名$匿名内部类序号...; 00 01 10 11 捕获 匿名内部类 所在方法内(外部作用域) 的 局部变量快照的情况 匿名内部类重写父类方法时,引用到的外部方法体内的局部final变量 通常,要求要被捕获的局部变量

    1.8K60

    java中的匿名内部类总结

    匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象方法...这个时候就引入了匿名内部类 实例2:匿名内部类的基本实现 abstract class Person { public abstract void eat(); } public class...这样便可以省略一个类的书写 并且,匿名内部类还能用于接口上 实例3:在接口上使用匿名内部类 interface Person { public void eat(); } public...,那么其子类中的方法都可以使用匿名内部类来实现 最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口 实例4:Thread类的匿名内部类实现 public...} } }; t.start(); } } 运行结果:1 2 3 4 5 实例5:Runnable接口的匿名内部类实现

    93130

    Java中,匿名内部类在开发中的使用以及匿名内部类的面试题

    匿名内部类在开发中的使用   我们在开发的时候,会看到抽象类,或者接口作为方法的形式参数。   而这个时候,我们知道实际需要的是一个子类的对象。...如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式进行简化。   Android开发中这种格式见得多,   JavaEE开发中见得少。 为什么呢?...因为匿名内部类的好处是:     匿名内部类用完之后就是垃圾(即只能用一次),就可以立即被垃圾回收器回收,     栈内存没有东西指向你,Android的手机内存小,要及时让这个对象被回收。...7 因为匿名内部类的好处是: 8 匿名内部类用完之后就是垃圾(即只能用一次),就可以立即被垃圾回收器回收, 9 栈内存没有东西指向你,...: 42 //匿名内部类的本质是该类的子类或者实现该接口的实现类(子类)的匿名对象。

    1.5K20

    匿名内部类方式实现线程的创建

    创建一个线程有多重方式,本文采用匿名内部类的方式创建。...匿名内部类 匿名定义:没有名称 内部类定义:写在其他类内部的类 匿名内部类的作用:简化代码 把子类继承父类,重写父类方法,创建子类对象合成一步完成; 把实现一个接口的接口类,重写接口中的方法,创建实现类对象合并一步完成...匿名内部类最终产物:子类/实现类对象,而这个类没有名字 匿名内部类还可以作为参数传递 格式: new 父类/接口(){   重写父类方法/实现接口中的方法 } 我们就用匿名内部类来创建线程 1:继承Thread...类 2:实现Runnable接口 3:将匿名内部类作为参数形式传递 1:继承Thread类 Thread(){     () {         System..println()} }.start()...2:实现Runnable接口 Runnable r = Runnable() {     () {         System..println()} }Thread(r).start() 3:将匿名内部类作为参数形式传递

    45130

    内部类(来自类和对象的补充)

    分为以下四种: 实例(成员)内部类,静态内部类,局部(方法)内部类,匿名内部类。...如添加OutClass outclass=new OutClass();而后将在内部类中且原本来自外部类的实例变量和实例方法前加上outclass. 就可以了。...几乎不会使用,所以我们不必过多了解 匿名内部类 ​​​​​​​匿名内部类是指在使用时才定义并同时实例化的内部类,没有显式的类名。...其语法格式如下: ​ 接口 类名 = new 接口() { // 匿名内部类的成员变量和方法 }; ​ 注意实施该接口的类被隐藏了,没有显示出来(以及implements也没显示出来),我们new...下面直接看匿名内部类的使用: public class Main { public static void main(String[] args) { // 创建一个接口对象,并实现其方法

    7210

    静态类、静态方法、内部类、匿名内部类、非静态类的一些实践

    作者:A哥(YourBatman) 目录 前言 正文 静态内部类 vs 内部类 静态方法 vs 非静态方法 匿名内部类 内部类和静态内部类的区别 静态类 和普通内部类的区别 内部类的面试题 总结 前言...如题,在实际开发中,关于静态类、静态方法、内部类、匿名内部类、非静态类一般都会遇到,特别是你在研究开源框架源码的时候很是常见,它是内聚性的体现。本文针对这些“概念”的实战,做些总结。...但如果这个类是内部类,是可以这样写的:public static class A 静态内部类 vs 内部类 静态内部类:只是为了降低包的深度,方便类的使用,实现高内聚。...API的回调函数以静态函数的形式封装到类的内部 匿名内部类 那么,匿名内部类有什么好处呢?...c=a.new C(); 内部类的面试题 送一道匿名内部类的面试题: 按照要求,补齐代码 interface Inter { void show(); } class Outer {

    95050

    第38节:hashCode()与toString()与equals()函数的作用,内部类和匿名内部类

    内部类的使用方法是什么呢?如何使用匿名内部类呢?...: 静态内部类;局部内部类;成员内部类;匿名内部类 class A{ // 外部类的变量 int i; class B{ // 内部类的变量 int j; // 内部类的方法...int funB(){ int result = A.this.i + j; return result; } 匿名内部类: 是一种特殊的局部内部类。...b.fun(new A(){ public void doSomething(){ System.out.println("匿名"); } }); } } 什么是匿名对象,匿名对象是对象的简化形式...静态内部类只能访问外部类的静态成员和本内部类的成员;且不能访问外部类的非静态成员。 局部内部类: 局部,在一个方法中内的类,为局部内部类,局部内部类不能用访问修饰符,作用域在定义的它的区域内。

    61520

    匿名内部类导致内存泄露的面试题

    所以引用关系链上最终的Activity对象在没有被回收的情况下越来越多,就会导致OOM。 But why? 为什么会持有外部类? 其实这是个值得思考的问题,理清这个问题也就明白匿名内部类的设计初衷了。...非静态匿名内部类持有外部类可以总结为以下两个作用 · 当类B仅在类A内使用,匿名内部类可以让外部不知道类B的存在,从而减少代码的维护 · 类B持有类A,那么B就可以使用A中的变量,比如上面的代码,在Runnable...到这里就明白了为什么非静态匿名内部类会导致内存泄露了。 那么为什么静态匿名内部类不会呢?...既然如此,那么静态匿名内部类是如何引用外部类的变量呢?...总结 Java的匿名内部类让代码更容易维护更清晰,但是非静态的内部类会持有外部类的引用,从而导致可能出现OOM。通过把内部类改为static,可以去掉对外部类的引用,同时能继续使用外部类的变量。

    6.7K20

    java内部类的作用(三)----定义使用回调函数的时候比较便捷---匿名内部类(anonymous)

    首先我们需要了解什么叫匿名内部类:定义(JAVA核心技术上是这样说的) 匿名内部类(anonymous inner calss):将局部内部类的使用再深入一步。...假如只创建这个类的一个对象,就不必命名了。这种类被称为匿名内部类。 话很少,说的也很浅显,可能读完了还不知道什么叫匿名内部类?...是的,确实有这种感觉, 重点就两个: 1.只创建这个类的一个对象;->这个是从局部内部类中延伸来的,整个代码中只有一次创建,没有说明什么 2.不必命名:->匿名内部类是没有名字的。...我们知道创建类是需要用到一个构造器的,构造器的名字与类名是同名的。 现在匿名内部类没有名字,肯定用不了构造器的。也就是说匿名内部类一定没有构造器的。...这里就告诉我们,是不是所有的类都有构造器呢,不一定,匿名内部类不能有构造器! 1.利用接口 换句话说,我们构造匿名内部类是没有参数的,或者把参数直接传递给超类的构造器的,想想,这在什么中用到呢?

    1.4K30

    Java的内部类和匿名类 , 您了解过吗?

    最初在大二入门Java的时候,我就了解过Java的匿名类和内部类,那时候觉得这些都是理论性的东西,实际开发不一定能用到,于是就淡化了。...内部类可以是静态的,通常用 protected 或者 private 关键字修饰,外部类只能使用public或者系统默认权限。...如果你对Java的访问权限不熟悉,可以看一下我这篇文章《一文搞懂Java的 构造方法 和 访问权限》 内部类主要有四种,分别是成员内部类、方法内部类、静态内部类、匿名内部类。...---- 2.2 静态内部类 在讲解静态内部类之前,先讲解一下静态,也就是static关键字。 static是静态的意思。在Java语言中,static关键字修饰的成员是可以被所有对象共享的。...; } } 运行结果如下图所示,即效果同第三小节的方法内部类。 匿名内部类是一种特殊的内部类,这种类没有名字,通过new关键字直接创建某一个类的匿名子类的对象来使用。

    28820

    java内部类和静态内部类区别_静态内部类对象的创建

    从之前的学习中,我们应该对静态这个关键字有一定的了解,静态代表它是属于类的,而不是属于实例的。我们可以通过类名直接对静态的玩意儿直接进行引用,但这里的Node静态内部类却是私有的。...为了找到静态内部类和普通内部类的区别,我使用jad工具,自己重写一个类似的Node类,对其进行反编译后发现: 普通内部类版本: private class List$Node { List...,存在一个隐藏的外部类引用字段,在构造内部类时,用于指向外部类的引用。...每次生成一个非静态的内部类实例,都会有这样的操作。 恰巧Node类只是外部类的一个组件,他不需要引用外部类的任何字段,所以,把它声明成静态的能减小不必要的消耗。...所以,在定义一个内部类时,如果该内部类不需要引用外部类的非静态属性/方法,则应该将它声明为静态的。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    65810

    【小家java】静态类、静态方法、内部类、匿名内部类、非静态类的一些实践

    但如果这个类是内部类,是可以这样写的:public static class A 静态内部类的作用:只是为了降低包的深度,方便类的使用,实现高内聚。...API的回调函数以静态函数的形式封装到类的内部 那么,匿名内部类有什么好处呢?...除了只能使用一次,其实还有其他用处哦~ 当你想使用一个类的protected 方法时,但是目前你的类又和他不同包且也不能继承他,这时候匿名类就派上用场了,你可以声明一个匿名类继承该类,并定义一个方法然后调用父类方法即可...访问外部类的成员 静态内部类只能够访问外部类的静态成员,而非静态内部类则可以访问外部类的所有成员(方法,属性)。...送一道匿名内部类的面试题: 按照要求,补齐代码 interface Inter { void show(); } class Outer { //补齐代码 } class OuterDemo

    3.1K30

    java匿名内部类变量要使用final的原因(转载)

    add()函数其实是透过this关键字来访问对象的成员字 段的。 如果对闭包有疑问,可以看这个更详细的回答: 闭包(计算机科学)是什么? - 胖胖的回答 3....别扭的匿名内部类 但Java匿名内部类就做得比较尴尬。下面这个例子中,getAnnoInner负责返回一个匿名内部类的引用。...匿名内部类因为是匿名,所以不能显式地声明构造函数,也不能往构造函数里传参数。...说支持了闭包,是因为编译器编译的时候其实悄悄对函数做了手脚,偷偷把外部环境方法的x和y局部变量,拷贝了一份到匿名内部类里。如下面的代码所示。...其他和匿名内部类相似的结构 《Think in Java》书里,只点出了匿名内部类来自外部闭包环境的自由变量必须是final的。但实际上,其他几种不太常用的内部类形式,也都有这个特性。

    1.4K00

    Java中的嵌套类、内部类、静态内部类

    内部类与静态嵌套类虽然都是嵌套类,但在使用上是有一些区别的。 内部类 比如有如下内部类的定义, class OuterClass {     ...    ...这样innerObject就可以访问outerObject内的所有成员属性以及方法了。  那如果想直接跳过外围类去初始化内部类会怎么样呢?...静态嵌套类   有些人把静态嵌套类成为静态内部类,其实静态内部类这个称呼不严谨,因为内部类都是非静态的。...由于静态嵌套类没有像内部类那样绑定外部类对象,所以也就不存在静态嵌套类不能访问其外围类的成员这种说法。  ...综上所述,虽然内部类和静态嵌套类都属于嵌套类,但是二者有本质区别:内部类的实例化对象需要绑定一个外围类的实例化对象,而静态嵌套类的实例化对象不能也无法绑定外围类的实例化对象。

    1.7K50
    领券