精华内容
下载资源
问答
  • 匿名累不累
    2021-06-12 18:22:15
    1. 这里所说的“匿名内部类”主要是指在其外部类的成员方法内定义,同时完成实例化的类,若其访问该成员方法中的局部变量,局部变量必须要被final修饰。
    2. 原因是编译程序实现上的困难:内部类对象的生命周期会超过局部变量的生命周期。局部变量的生命周期:当该方法被调用时,该方法中的局部变量在栈中被创建,当方法调用结束时,退栈,这些局部变量全部死亡。而内部类对象生命周期与其它类一样:自创建一个匿名内部类对象,系统为该对象分配内存,直到没有引用变量指向分配给该对象的内存,它才会死亡(被JVM垃圾回收)。所以完全可能出现的一种情况是:成员方法已调用结束,局部变量已死亡,但匿名内部类的对象仍然活着。
    3. 如果匿名内部类的对象访问了同一个方法中的局部变量,就要求只要匿名内部类对象还活着,那么栈中的那些它要所访问的局部变量就不能“死亡”。
    4. 解决方法:匿名内部类对象可以访问同一个方法中被定义为final类型的局部变量。定义为final后,编译程序的实现方法:对于匿名内部类对象要访问的所有final类型局部变量,都拷贝成为该对象中的一个数据成员。这样,即使栈中局部变量已死亡,但被定义为final类型的局部变量的值永远不变,因而匿名内部类对象在局部变量死亡后,照样可以访问final类型的局部变量,因为它自己拷贝了一份,且与原局部变量的值始终一致。

    最后,Java 8更加智能:如果局部变量被匿名内部类访问,那么该局部变量相当于自动使用了final修饰。

    更多相关内容
  • 匿名累不累(匿名内部类) 正常情况下要调用一个接口中的方法需要这样: public class TestClass { public static void main(String[] args) { TestInterfaceImpl testInterface = new TestInterfaceImpl(); ...

    匿名累不累(匿名内部类)

    正常情况下要调用一个接口中的方法需要这样:

    
    public class TestClass {
        public static void main(String[] args) {
            TestInterfaceImpl testInterface = new TestInterfaceImpl();
            testInterface.show();
        }
    }
    
    interface TestInterface{
        void show();
    }
    
    class TestInterfaceImpl implements TestInterface{
        @Override
        public void show() {
            System.out.println("测试,重写的show方法");
        }
    }
    

    1.创建实现类对象去实现接口

    2.重写方法

    3.创建实现类对象

    4.调用重写的方法

    使用内部类的方式

    public class TestClass1 {
        public static void main(String[] args) {
            new TestInterface1() {
                @Override
                public void show() {
                    System.out.println("重写的show方法");
                }
            }.show();
        }
    }
    
    interface TestInterface1{
        void show();
    }
    

    匿名内部类的理解:

    • 将继承,重写,创建对象,放在一步执行

    • 匿名内部类的前提 : 需要存在一个接口或者类

    接口中有多个方法

    
    public class TestClass1 {
        public static void main(String[] args) {
            TestInterface1 testInterface1 =new TestInterface1() {
                @Override
                public void show() {
                    System.out.println("重写的show方法");
                }
    
                @Override
                public void show1() {
                    System.out.println("重写的show1方法");
                }
            };
            testInterface1.show();
            testInterface1.show1();
        }
    }
    
    interface TestInterface1{
        void show();
        void show1();
    }
    
    

    以多态的方式进行接收,然后在调用不同的方法.

    匿名内部类在开发中的使用场景

    public interface Swimming {
        void swim();
    }
    
    
    public class TestSwimming {
        public static void main(String[] args) {
    
            goSwimming(new Swimming() {
                @Override
                public void swim() {
                    System.out.println("游泳");
                }
            });
        }
    
        public static void goSwimming(Swimming swimming){
            swimming.swim();
        }
    }
    
    • 当方法的形式参数是接口或者抽象类是可以将匿名内部类作为实际参数进行传递
    展开全文
  • 受关系之”:知乎平台中的“匿名游戏”.pdf
  • TreeSet 的构造函数可以传一个比较器进去,为什么把这个比较器写成匿名累不累,eclipse 表示认不到。。不知道为什么。。。 TreeSet ts = new TreeSet(new Comparator(){ public int compare(Object o1, Object ...
  • 匿名内部类----java

    2021-04-26 20:30:35
    匿名内部类----java 匿名内部类就是内部类的简化写法,是一种特殊的局部内部类。 前提:存在一个类或者接口,这里的类可以是具体的类也可以是抽象...Comparator:外部比较器 可指定多个 需要Student实现该接口,而.

    匿名内部类----java

    匿名内部类就是内部类的简化写法,是一种特殊的局部内部类。

    前提:存在一个类或者接口,这里的类可以是具体的类也可以是抽象类。

    本质是:一个继承了该类或者实现该接口的子类匿名对象。

    适合那种只需要创建一次对象的类。

     

    Comparable:内部比较器 public classStudent implements Comparable{}内部比较器只能有一个,一般采用最经常使用的比较规则。

    Comparator:外部比较器 可指定多个 不需要Student实现该接口,而是定义专门的类、

     

    总结:

    1、匿名内部类可以实现一个接口,也可以继承一个类(可以是抽象类)。

    2、匿名内部类只能实现一个接口,而不是多个。

    3、必须实现所有方法,匿名内部类不能是抽象类。

    4、匿名内部类不可能有构造方法,因为类是匿名的。

    5、匿名内部类没有访问控制符。

    6、如果想实现构造方法的一些初始化功能,可可以通过代码块实现。

    7、如果要访问所在方法的局部变量,该变量需要使用final修饰。

     

    内部类的作用:

    1、内部类提供了更小的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。

    2、内部类可以访问外部类的私有属性,内部列被当成其外部类的成员。但外部类不能访问内部类的内部属性。

    3、接口只解决了多重继承的部分问题,而内部类使得多重继承的解决方案变的更加完整。

    4、用匿名内部类实现回调功能,我们通俗的讲解就是说在Java中,通常就是编写一个接口,然后你来实现这个接口,然后把这个接口

    的一个对象作为参数的形式传到另一个程序中,然后通过接口调用你的方法,匿名内部列就可以很好地展现量这一种回调功能。

     

    内部类使用场合:

    1、由于内部类提供了更好的封装性,并且可以很方便的访问外部类的属性,所以,在只为外部类提供服务的情况下可以优先考虑使用内部类。

    2、使用内部类间接实现多继承:每个内部类都能独立地继承一个类或者实现某些接口,所以无论外部类是否已经继承了某个类或者实现了某些

    接口,对于内部列都没有任何影响。

    展开全文
  • Java中的匿名内部类

    2020-04-14 22:54:37
    一、匿名内部类 匿名内部类:没有名字的内部的类。 前提:接口或继承父类。...A a = new A(){//从此处开始,就是匿名的呢不累 public void test(); };//到此处结束 a.test(); 一般匿名内部类适合:使用一次,创...

    一、匿名内部类

    匿名内部类:没有名字的内部的类。

    前提:接口或继承父类。

    直接new匿名内部类的对象

    interface A{
    	public void test();
    }
    
    //A a = new 实现类对象;
    A a  = new A(){//从此处开始,就是匿名的呢不累
        public void test();
    };//到此处结束
    a.test();
    

    一般匿名内部类适合:使用一次,创建一次对象。

    匿名内部类:编译之后产生字节码文件:

    内部类的字节码文件名的规则:先写外部类名,然后$,然后是内部类的名
    外部类$1.class
    外部类$2.class
    ....
    
    展开全文
  • 匿名内部类

    千次阅读 2022-04-20 14:07:49
    匿名内部类名命: 虽然这是匿名内部类,但是仍然可以利用多态来给匿名内部类名命的哈! 匿名内部类的好处:匿名内部类,经常作为参数,或返回值,使用比较方便。 一个类中可以嵌套一个接口: 匿名内部类是局部内部...
  • Java匿名

    2021-02-12 19:45:08
    匿名类,正如名字一样在java中没有名字标识的类,当然了编译后还是会安排一个名字的。下面是一个关于匿名类的简单例子:public static void main(String[] args) throws InterruptedException {Thread t=new Thread...
  • Java 匿名

    千次阅读 2022-02-14 17:38:06
    匿名类是能有名字的类,它们能被引用,只能在创建时用 new 语句来声明它们。 使用匿名内部类我们必须要继承一个父类或者实现一个接口 匿名内部类中是能定义构造函数的。 匿名内部类中能存在任何的静态...
  • 16.学内部类累不累?

    2021-05-07 00:49:32
    抽象类 抽象类无法直接创建对象,只能被子类继承后,可以...父类中抽象方法定义时可以有方法体,子类必须重写父类的抽象方法 父类 // 抽象方法 public abstract void info(); 子类 @Override public void inf
  • java匿名类使用

    2021-03-26 14:45:22
    经典使用:本例经常用匿名内部类使用:等于传入一个函数指针,执行一个callback.将子函数中的result,传回给class的成员变量private List setConfigValues(...) {handler.apply(new SetAttrAssistant() {//传入匿名...
  • 哈Kareha是一个在日本流行的匿名留言板。 无需注册即可发布。 它可以在两种模式下操作,即图像板或文本板。 Kareha是一个令人难以置信的令人印象深刻的成就,许多功能都在推动Perl的发展,主要是依赖于核心而...
  • 匿名内部类在我们JAVA程序员的日常工作中经常要用到,但是很多时候也只是照本宣科地用,虽然也在用,但往往忽略了以下几点:为什么能这么用?匿名内部类的语法是怎样的?有哪些限制?因此,最近,我在完成了手头的...
  • 内部类分为:成员内部类、静态内部类、局部内部类、匿名内部类(也是局部内部类一种) 一.成员内部类 成员内部类和成员属性和成员方法是同级别的。例如: public class Outer { private String name; public void ...
  • 内部类你学着累不

    2020-08-14 16:32:18
    匿名内部类 成员内部类 如何直接访问内部类的成员。 外部类名.内部类名 对象名 = 外部类对象.内部类对象; class Outer { private int num = 10; class Inner { public void show() { System.out.println...
  • 4.8主要讲了static关键字,并且具体介绍了静态字段,静态属性,静态方法,静态类,静态构造方法,单例模式,具体是采用什么方式... 4.10匿名类:使用匿名类的方式创建实例,可以将一组只读属性封装到单个对象中。 ...
  • PHP匿名类的用法

    2021-01-14 16:06:23
    在PHP7之后,PHP中加入了匿名类的特性...我们先来看看匿名类的简单使用。// 直接定义$objA = new class{public function getName(){echo "I'm objA";}};$objA->getName();// 方法中返回function testA(){return n...
  • 内部类

    2019-07-25 11:20:19
    内部类(俗称累不累) 问: 答: 嵌套在外部类中的一个类:例如:桃子的核相当于内部类,只属于这一个桃子。 是Java独有的一种编程思想,为了达到更高的封装 某个类,只想被其中一个类所使用,将其定义为内部类 ...
  • 匿名内部类使用

    2022-08-29 21:48:09
    内部类,匿名内部类
  • 线程池里的每一个线程代码结束后,并会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。 如何实现线程池程序呢? 1.创建线程池对象,JDK新增了一个Executors工厂类来产生线程池,有如下几个静态...
  • Java——匿名内部类

    2018-05-23 16:32:11
    概念:匿名内部类是一个没有名字的内部类。它将内部类的定义和创建一个内部类的实例合二为一,一步实现。代码讲解:感受一下内部类的好处吧:正常写:public void start(Stage primaryStage)//启动方法 { btEnlarge...
  • 匿名内部类使用的局部变量要用final修饰以及jdk8的变动
  • 匿名内部类,没有类的名称,必须借助接口或者父类 like = new ILike(){ @Override public void lambda() { System.out.println("5.匿名内部类"); } }; like.lambda(); //6.用lambda简化 like = ()->{ System.out....
  • oc-匿名对象

    2019-10-03 06:31:21
    每次执行[对象 new] 都会在内存中创建新的对象,因为上图中输出的车子速度为0; 转载于:https://www.cnblogs.com/My-Cloud/p/4461435.html

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,856
精华内容 3,142
关键字:

匿名累不累