精华内容
下载资源
问答
  • 匿名内部类是静态的吗
    千次阅读
    2018-06-12 08:18:56

    内部类

    成员内部类可访问外部类所有的方法和成员变量。

    不能有静态的方法和成员变量。

    静态内部类:

    只能访问外部类的静态成员变量与静态方法。

    静态内部类的非静态成员可访问外部类的静态变量,而不可访问外部类的非静态变量。

    匿名内部类:

    没有类名,没有class关键字也没有extends和implements等关键字修饰。

    类的定义和对象的实例化同时进行。

    更多相关内容
  • 一、什么是内部类?or 内部类的概念 内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。...3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。 三、 内部类的分类 成员内部

    一、什么是内部类?or 内部类的概念

    内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。

    public class TestA{
        class TestB {}
    }
    

    二、 为什么需要内部类?or 内部类有什么作用?

    1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。
    2、内部类可以对同一个包中的其他类隐藏起来。
    3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。

    三、 内部类的分类

    成员内部类,局部内部类,匿名内部类,静态内部类

    3.1 成员内部类

    成员内部类:存在于某个类的内部,与全局属性或者方法同级的内部类就是成员内部类。
    举一个成员内部类实例:

    public class Person{
        public void run(){}
        public class DoWork implements Work{}
    }
    

    成员内部类特点:

    1、(重要)成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括静态成员和私有成员)。!!很重要
    2、成员内部类和外部类的属性和方法名同名时,外部类的属性和方法会隐藏;但可以通过外部类.this.成员变量的方式访问外部类的属性和方法。
    3、 外部类必须通过成员内部类的对象来访问内部类的属性和方法。
    4、 成员内部类对象会隐式的引用一个外部类对象。(可以解释第一点)
    5、 成员内部类可以有public\private\protected以及默认访问权限。

    3.2 局部内部类

    举一个局部内部类实例:

    public class Person{
        public void run(){
             class DoWork implements Work{}
        }
    }
    

    注意:和成员内部类的区别,局部内部类在方法里面

    局部内部类:是定义在一个方法或者一个作用域里面的类。它与成员内部类的区别在于局部内部类的访问仅在于方法内或者作用域内。
    局部内部类的特点:

    1、 不能有private、public、protected和static等修饰符,与局部变量类似。
    2、只能在定义局部内部类的方法或者作用域中实例化;
    3、 局部内部类的对象不能使用该内部类所在方法或者作用域的非final局部变量(为什么?);

    3.3 匿名内部类
    举一个匿名内部类实例:

    public class Person{
        public DoWork doSomething(){
            return new DoWork(){
                public void do(){}
            };
        }
    }
    

    什么是匿名内部类:不定义类的名字,在使用的地方直接定义对象。
    匿名内部类的特点:

    1、唯一一种没有构造器的类;匿名内部类在编译时,编译器会自动起名xxx$1.class;
    2、 匿名内部类不能存在任何静态的变量、方法等;
    3、 匿名内部类是局部内部类的特例;
    4、大部分匿名内部类用于接口返回;

    3.4 静态内部类

    举一个静态内部类实例:

    public class Person{
        public void run(){}
        public static class DoWork implements Work{}
    }
    

    注意和成员内部类的区别
    静态内部类:在成员内部类的基础上加上一个static关键字就是静态内部类。
    静态内部类的特点:

    1、不需要依赖外部类。
    2、不能使用外部类的非静态属性和方法。

    例题:

    下列说法正确的是(AB)?

    A、对于局部内部类,只有在方法的局部变量被标记为final或局部变量是effctively final的,内部类才能使用它们
    B、 成员内部类位于外部类内部,可以直接调用外部类的所有方法(静态方法和非静态方法)
    C、由于匿名内部类只能用在方法内部,所以匿名内部类的用法与局部内部类是一致的
    D、静态内部类可以直接访问外部类的非静态成员

    展开全文
  • 主要介绍了java 内部类详解及实例代码的相关资料,需要的朋友可以参考下
  • 并介绍了static与静态内部的关系、静态内部匿名内部类的区别 一、static关键字 static关键子可以修饰方法、成员变量、和,分别对应: 静态方法:静态方法不依赖于任何对象就可以进行访问,对于静态方法来说...

    static是java中常用的一个关键字,本文总结了static关键字修饰的方法、成员变量、类等的特点。并介绍了static与静态内部类的关系、静态内部类和匿名内部类的区别

    一、static关键字

    static关键子可以修饰方法、成员变量、和类,分别对应:

    • 静态方法:静态方法不依赖于任何对象就可以进行访问,对于静态方法来说,是没有this的。由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法。
    • 静态变量:静态变量是类的属性,被所有对象共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。
    • 静态内部类:static修饰的类只能为内部类,普通类无法用static关键字修饰。访问方式为(new 外部类名.内部类的方法())。
      • 内部类:用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。
      • 1、静态内部类只能访问外部类的静态成员 2、静态内部类的创建不需要外部类的实例 3、静态内部类只管该类与外部类的相互关系,静态内部类本身和普通类没有任何区别 3、一个类只有被引用时才会被JVM加载初始化,因此内部类也是一样的,只有使用的时候JVM才会去加载它,这个过程是线程安全的。

    二、静态内部类与匿名内部类

    首先了解抽象内部类的概念:

    • 抽象类是不能被实例化的类,抽象必须被继承,也就是只能实例化抽象类的子类。
    • 抽象类中可以不含有抽象方法,但含有抽象方法的类必须是抽象类。
    • 抽象类不能直接被实例化,但是可以通过匿名内部类的方式实例化,如:
      • public abstract class MyAbstractclass {}
      • MyAbstractclass是一个抽象类。不能在Main方法中直接实例化这个抽象类。
      • 但是可以 MyAbstractclass my=new MyAbstractclass() {};

    上诉的写法就是匿名内部类的使用方法,同为内部类,匿名内部类与静态内部类是不同的。
    * **匿名类是没有有名称的类,创建时,使用new语句的一部分来声明。因此上面的代码其实声明了一个匿名类,然后这个匿名类继承了抽象类MyAbstractclass。因此{}中可以写这个类的实现细节。

    三、匿名内部类和lambda表达式的区别

    • 1、匿名内部类可以针对方法和接口,而lambda表达式只能针对接口
    • 2、如果接口有多个待实现的方法,那么不能使用lambda表达式
    • 3、匿名内部类再javac编译后会生成一个class文件,而lambda表达式不会
    展开全文
  • * 标题:Java内部[成员内部、局部内部匿名内部类静态内部] * * 作者:Nstar * * 时间:2020年3月13日 * * 内容: * * 问:什么是内部? * 答:在 Java 中,可以将一个定义在另一个里面或者一...
    /**
     * 标题:Java内部类[成员内部类、局部内部类、匿名内部类和静态内部类]
     *  * 作者:Nstar
     *  * 时间:2020年3月13日
     *  * 内容:
     *  * 问:什么是内部类?
     * 答:在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
     */
    public class Test13 {    //测试类,用于测试案例
        public static void main(String[] args) {
             Test_A ts= new Test_A();       //成员内部类实现 ,首先new一个外部类得对象,
             Test_A.Test_B ab = ts.new Test_B();   //得到外部类对象之后可以通过外部类对象创建内部类对象,
            //因为内部类得形成时依赖于外部类。
             ab.spek();   //通过对象调用方法
    
    
            Test_E.Test_F ts_f= new Test_E.Test_F();    //此案例得实现是基于内部静态类实现得
            //因为内部类使用static关键字修饰,所以它的对象创建不需要依赖于外部类
                       ts_f.print_f();   //通过对象调用方法
    
    
            Myintface mi = new Myintface(){    //内部匿名类实现,
    //            语法:new 接口名/类名()
    //            {
    //             匿名内部类的类体
    //             }
                @Override    //  Java注解,不写也可以
                public void fun(){     //重写接口中的fun抽象方法
                    System.out.println("匿名内部类");
                }
            };   //千万不要忘掉分号,因为创建的匿名内部类是一个语句
                       mi.fun();   //通过对象调用匿名内部类的方法
        }
        }
    
    class Test_A{    // [成员内部类案例]
        // Test_A类属于Test_B类的外部类,如果Test_A类去访问Test_B的成员或方法,必须先创建一个成员内部类的对象
        class Test_B{    //Test_A类的内部成员类
            // 此类可以无条件访问Test_A类的方法和成员包括private修饰的方法和成员
            void spek(){    //内部类Test_B的方法
                System.out.println("成员内部类,Test_B类的方法!");
            }
        }
    }
    class Test_C{   //[局部内部类案例]
        void test_c(){  //类Test_C的方法
            class Test_D{  //Test_D属于局部内部类  ,访问权限仅限于test_c方法中
                //局部内部类就像是方法里面的一个局部变量一样,是不能有 public、protected、private 以及 static 修饰符的。
                void test_d1(){     //局部内部类的方法
                    System.out.println("Test_D类的方法!");
                }
            }
        }
    }
    class Test_E{    //[静态内部类案例]
        static class Test_F{     //因为被static修饰后,创建它的对象时不需要依赖于Test_E类,创建对象时不需要先new一个Test_E类的对象
            void print_f(){
                System.out.println("Test_F静态内部类的方法");
            }
        }
    
    }
    interface Myintface{
        void fun();   //记住,Java规定,接口中除了默认方法和静态方法,其它方法全抽象
    }
    
    
    
    
    
    
    展开全文
  • 在那些修改中,引人注目的是内部类匿名类。如运用得当,它们可使程序更易理解和维护。本文介绍内部类匿名类在Java代码中是如何具体工作的,如何正确使用它们,以及如何避免一些常见的错误。 下面来看看这些特性...
  • Java基础_内部类静态内部成员内部局部内部类匿名内部类 内部 使用内部减少了命名冲突 一个内部可以定义在一个中一个方法中甚至一个表达式中 内部分为四种 静态内部(static inner classes) 成员内部...
  • 下面类B是类A的内部类。即内部类对象引用了实例化该内部对象的外围类对象。 public class A{ class B {} } 2 为什么需要内部类?(来自JAVA核心技术) 内部类方法可以访问该类定义所在的作用域中的数据,包括私有...
  • Java 内部 分四种:成员内部、局部内部静态内部匿名内部类。 1、成员内部:即作为外部的一个成员存在,与外部的属性、方法并列。 注意:成员内部中不能定义静态变量,但可以访问外部的所有成员...
  • Java的静态内部就是在定义的中添加一个static,此时就是静态内部了,下面用一个例子来详细的讲解Java的匿名内部类 package com.zzuli.JavaSe; /** * @author liugang * @version 1.0 * @date 2020/11/27 ...
  • 内部匿名内部类

    2022-02-12 14:31:51
    内部匿名内部类
  • java内部分为: 成员内部静态嵌套、方法内部匿名内部类。这篇文章主要介绍了Java中的匿名内部类的相关资料,需要的朋友可以参考下
  • 静态内部类静态内部类 首先先说一下非静态内部类静态内部类 这两者斗是依附于一个外部的,然后在该外部里面实现自身的定义,在实现上的区别就是 static 修饰与否的区别: public class InnerClassTest ...
  • 这篇文章是对自己学习的一个总结,学习资料是... 什么情况下使用内部类:如果一个内部类只在某个外部中可以使用到,一旦这个内部类离开这个外部后就没有意义,那么这个内部类就可以定义成内部类。比如创建一个C...
  • 放在一个内部我们就叫内部类。...定义在类内部的非静态类,就是成员内部类。 public class Out { private static int a; private int b; public class Inner { public void print() { System.out...
  • 内部(InnerClass)----静态内部、成员内部、方法内部匿名内部类 Java进阶知识系列文章: Java进阶知识 —— 算法复杂度o(1), o(n), o(logn), o(nlogn) Java进阶知识 —— 垃圾回收机制 Java进阶知识 —— ...
  • 中定义,在一个内部定义一个完整的就叫做内部类 例如: public class TestInner { public static void main(String[] args) { Outer o = new Outer(); Outer.Inner inner = o.new Inner(); inner...
  • 在Java中非静态内部 | 匿名内部类都默认持有外部的引用,使用不当的话会使外部一直被某对象持有引用,从而在其该被GC回收时却不被回收,也最终导致了内存泄漏。 我们经常用到的AsyncTask、Runnable、Handler...
  • 分四种:成员内部、局部内部静态内部匿名内部类。 1、成员内部: 即作为外部的一个成员存在,与外部的属性、方法并列。 注意:成员内部中不能定义静态变量,但可以访问外部的所有成员。 public ...
  • 一、内部类 内部类(innerclasses):把一个放在另一个内部定义    内部类可以使用public、default、protected 、private以及static修饰。而外部顶级(我们以前接触的)只能使用public和default修饰。 注意 ...
  • Java 内部整理(静态内部、成员内部、局部内部匿名内部类) 一、内部: 在Java中,将一个的定义放在另一个的定义内部,这就是内部。内部本身就是一个的属性。 举个栗子: public class Outer { ...
  • 如题,在实际开发中,关于静态类静态方法、内部匿名内部类、非静态类一般都会遇到,特别是你在研究开源框架源码的时候很是常见,它是内聚性的体现。本文针对这些“概念”的实战,做些总结。
  • 我们常说的内部类就是最普通的内部类,而非局部匿名静态的。如: public class outer{ //外部 private String name; private int age; class inner{ //内部类 … } } 内部类可以访问外部的方法和属性,即使...
  • 1、静态类就是静态内部类如果一个要被声明为static的,那么只有一种情况,就是**静态内部类**。如果在外部声明为static,编译会报错,提示外部前面不允许使用修饰符static。
  • 关于匿名内部类的一些理解

    千次阅读 2021-09-21 15:51:21
    内部就是将一个定义在某个或者方法里面,一共分为四种:成员内部、局部内部匿名内部类静态内部 其中局部内部就是将一个定义在了一个方法之中,类似于 class Demo{ public void test(){ class ...
  • 匿名内部类

    2021-08-23 14:11:59
    静态内部类:类似于静态变量 ​ 实例内部类:类似于实例变量 ​ 局部内部类:类似于局部变量 public class ClassTest { //这些内部,所以被称为内部类 //静态内部类 static class Inner1 { } //...
  • 静态内部类的非静态成员可以访问外部静态变量,而不可访问外部的非静态变量。非静态内部类的非静态成员可以访问外部的非静态变量。 成员内部类可以随意使用外部的成员方法及成员变量,尽管这些成员被...
  • java匿名匿名内部类详解

    千次阅读 2021-03-09 06:35:27
    匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明。其语法形式如下:new(){//的主体};这种形式的 new 语句声明一个新的匿名类,它对一个给定的进行扩展,或者实现一个给定的接口。使用匿名类可使...
  • JAVA匿名内部类笔记(适合初学者)
  • 内部共有:本地内部(定义在方法里面的)、实例内部静态内部匿名内部类 目录 1. 实例内部 2. 静态内部 3. 匿名内部类 —————— 分 ——— 割 ——— 线 ————— 1. 实例内部 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,882
精华内容 46,352
关键字:

匿名内部类是静态的吗