首页
学习
活动
专区
工具
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接口 创建了这个没有名字对象 匿名部类使用场景 通常在方法形式参数是接口或者抽象类时,也可以将匿名部类作为参数传递。

64730
  • 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

    匿名部类定制化特性

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

    25310

    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接口匿名部类实现

    92130

    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:将匿名部类作为参数形式传递

    43630

    部类来自类和对象补充)

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

    6710

    第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("匿名"); } }); } } 什么是匿名对象,匿名对象是对象简化形式...静态内部类只能访问外部类静态成员和本内部类成员;且不能访问外部类非静态成员。 局部内部类: 局部,在一个方法中类,为局部内部类,局部内部类不能用访问修饰符,作用域在定义区域

    60720

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

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

    90650

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

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

    1.3K30

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

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

    6.6K20

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

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

    65310

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

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

    25620

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

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

    1.3K00

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

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

    2.9K30

    java部类和静态内部类(嵌套类)

    部类 可以将一个类定义放在另一个类定义内部,这就是内部类; 嵌套类是其封闭类成员。非静态嵌套类(内部类)可以访问封闭类其他成员,即使它们被声明为私有的也是如此。...(回想一下,只能声明外部类public或将其包装为私有。) 2. 静态内部类 再一个普通类里面,给内部类加上static关键字修饰; 与类方法和变量一样,静态嵌套类与其外部类相关联。...两者区别 内部类只是外部类成员变量,通俗讲,就是你只能通过先调用外部类才能去拿到这个类(但是这是和组合还是有区别的)。 但是静态内部类就像是一个普通类一样。可以直接调用,直接去new对象。 4....(包括 本地和 匿名类)进行序列化。...总结 嵌套类:内部类和静态内部类部类属于外部类成员,必须依赖与外部对象来实现,静态内部类,不依赖,可以自己单独实现。 static 修饰 变量,类,方法,代码块。 共性全局性。

    1.7K20
    领券