一、final 1、final可以用来修饰类,方法,成员变量, 2、final修饰类不可以被继承,但是可以继承其他类。...3、final修饰的方法不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加final。 4、final修饰的变量称为常量,这些变量只能赋值一次。...三、匿名对象 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。...例:new Person(); 1、只能使用一次 2、匿名对象可以作为方法接收的参数、方法返回值使用 四、内部类 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类...//调用外部类中的puffBall方法 p.puffBall(); } 六、匿名内部类 匿名内部类的本质是一个实现了接口或继承了某个类的子类匿名对象. public
Java学习之final与匿名内部类 0x00 前言 续上几篇文章,得知子类继承父类后是可以在父类的基础上进行改写的,那么在程序中有些东西可能是不能让我们给轻易给改动的,那么Java给提供了final关键字...内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类名 和$符号 。 匿名内部类 匿名内部类是内部类的简化写法。...他的本质是一个带有具体实现父类或父类接口的匿名子对象。 在代码中比较常用的可能就是匿名内部类。...前提条件是匿名内部类必须继承一个父类或者是父接口。...,如多线程创建的时候,因为线程不能被多次调用,可以直接使用匿名内部类进行创建。
原文链接:https://www.cnblogs.com/devilwind/p/8635946.html java为什么匿名内部类的参数引用时final(转) https://blog.csdn.net...别扭的匿名内部类 但Java匿名内部类就做得比较尴尬。下面这个例子中,getAnnoInner负责返回一个匿名内部类的引用。...匿名内部类因为是匿名,所以不能显式地声明构造函数,也不能往构造函数里传参数。...这就说明,外部方法getAnnoInner()事实上已经对内部类AnnoInner构成了一个闭包。 但这里别扭的地方是这两个x和y都必须用final修饰,不可以修改。...其他和匿名内部类相似的结构 《Think in Java》书里,只点出了匿名内部类来自外部闭包环境的自由变量必须是final的。但实际上,其他几种不太常用的内部类形式,也都有这个特性。
内部类:在一个类的内部定义了另外的类,称为内部类。 匿名内部类指的是没有名字的内部类。 为了清楚内部类的主要作用,下面首先来观察如下的程序: ? ?
学过Java的同学肯定听说过匿名内部类, 不过不知道有没有仔细的深究过它, 比如为什么称之为匿名? 为什么也算是一个类,而且是内部类? 它和内部类有什么区别?...匿名内部类 先来看一段匿名内部类的代码, 这里需要先定义一个抽象类, abstract class Person { public abstract void doSomething(); }...Student person = new Student(); person.doSomething(); 匿名内部类的核心 使用匿名内部类,省去了新建一个类的过程。...final class Demo$1 extends Person { Demo$1(); Code: 0: aload_0 1: invokespecial #1...所以现在知道匿名跟内部类是什么意思了吧。
这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。 在使用匿名内部类时,要记住以下几个原则: ·匿名内部类不能有构造方法。 ...·匿名内部类不能定义任何静态成员、方法和类。 ·匿名内部类不能是public,protected,private,static。 ·只能创建匿名内部类的一个实例。 ...·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。 ·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。 ...·内部类只能访问外部类的静态变量或静态方法。 匿名类和内部类中的中的this : 有时候,我们会用到一些内部类和匿名类。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。...这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名 3.匿名内部类的作用 Java的内部类和C++中的嵌套类有本质的不同:C++的嵌套类没有指向包装类的句柄。
public void m0(){ System.out.println("2"); } }.m0(); } } 匿名内部类...,就是没有名字的类,在运行的时候,会提示里面有两个类,一个AInter一个AInter$1,这个AInter$1就是这个匿名内部类 例子中重写了m0方法,一般用来简化代码编写,但个人觉得可读性降低了 使用前提
anonymousinnerclass(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?...匿名内部类在实现时必须借助一个接口或者一个抽象类或者一个普通类来构造,从这过层次上讲匿名内部类是实现了接口或者继承了类,但是不能通过extends或implement关键词来继承类或实现接口。...几点说明: 一、由于匿名内部类没有名字,所以它没有构造函数。因为没有构造函数,所以它必须完全借用父类的构造函数来实例化,匿名内部类完全把创建对象的任务交给了父类去完成。...二、在匿名内部类里创建新的方法没有太大意义,但它可以通过覆盖父类的方法达到神奇效果,如上例所示。这是多态性的体现。...三、因为匿名内部类没有名字,所以无法进行向下的强制类型转换,持有对一个匿名内部类对象引用的变量类型一定是它的直接或间接父类类型。 四、注意匿名内部类的声明是在编译时进行的,实例化在运行时进行。
Java 匿名内部类 匿名内部类的存在作用; interface Mesage{ public void print() ; } class Message implements Mesage...msg.print() ; } } 正常的规律一个接口或者抽象类需要有子类,子类要覆写所有的抽象方法;但如果,message子类只使用唯一的一次;所以,可以采用匿名内部类的方式进行代码的简化...public static void fun(Message msg) { msg.print() ; } } 上述的简便方法,称为 匿名内部类...使用匿名内部类前提是:必须基于接口或抽象类的应用;可以简约了一个继承/接口实现的子类的产生。...匿名内部类定义在方法中,方法的参数或者变量,要被匿名内部类所访问,必须加上 final 关键字。 匿名内部类帮助我们减少了无用的且必要的类的定义。
1、概述 各位都知道,匿名内部类在使用的时候需要使用外部的变量,该变量必须被final修饰,否则编译报错。实际使用中,有时候确实还给我们造成了不少麻烦,可大家可曾想过这是为什么吗?...用final修饰的成员变量表示常量,存在内存中的常量区(常量区位于堆区)(jvm内存结构),放在常量区里面,所以效率上相对来说会高那么一点。 为什么匿名内部类用的变量必须final呢?...,因为程序的运行由外而内的,所以外部根本无法确定内部这时到底有没有这个东西。...对final的使用补充解释,可参考博文java中final关键字使用详解 备注:匿名内部类在编译时也是会生成一个.class文件的哦。具体可参考我做的一个例子:匿名内部类生成.class文件吗?...3、使用场景 匿名内部类的使用也是非常非常多的,所以理解为什么,能够更好的使用内部类,从而可以更优美的去规划自己的代码结构 4、最后 任何一向规定、规范都不是凭空制定而且也不可能随便下定义的。
Main.java package insof; public class Main { public static void main(String[] args) { //匿名内部类...} @Override public void test() { System.out.println("匿名子类...} }; System.out.println(p.name); p.test(); } } 输出: 执行的是构造方法 jack 匿名子类
匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象方法...这个时候就引入了匿名内部类 实例2:匿名内部类的基本实现 abstract class Person { public abstract void eat(); } public class Demo...实例3:在接口上使用匿名内部类 interface Person { public void eat(); } public class Demo { public static void main...最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口 实例4:Thread类的匿名内部类实现 public class Demo { public static...= 1; i <= 5; i++) { System.out.print(i + " "); } } }; t.start(); } } 运行结果:1 2 3 4 5 实例5:Runnable接口的匿名内部类实现
匿名内部类 就是局部内部类的简化写法。 前提:存在一个类或者接口。 这里的类可以是具体类也可以是抽象类。...格式: new 类名或者接口名() { 重写方法; } 匿名内部类的本质是什么呢? ...答:是一个继承了该类的子类或者实现了该接口的实现类(子类)的匿名对象。 简言之:匿名内部类是一个子类的匿名对象。 再简言之:匿名内部类是子类的对象。...小结:匿名内部类是一个结合体,是子类和对象的结合体。 示例代码如下所示: ?
如果非要定义则可以用final修饰 public static final int f = 6; methodA(); methodB...因为实例内部类是依赖于外部类对象的。而static修饰的变量是不依赖于对象的。因此这两者有矛盾。 如果非要有static修饰的成员变量。则可以用final修饰。因为被final修饰的是常量。...二、匿名内部类 2.1匿名内部类简单介绍 匿名内部类涉及到了接口的知识。 我们可以认为,匿名内部类,实现了某个接口,并且重写了接口中的方法。...1.并且在创建这个匿名内部类之后。我们可以在匿名内部类的结尾的 } 来调用匿名内部类中的方法。 2.也可以通过这个接口接收这个类,再来调用匿名内部类中的方法。...注意事项: 在匿名内部类中,能够访问的成员变量是没有被修改的数据(默认在这里能访问的是被final修饰的。但也能访问没有被修改的成员变量)。有个专业术语叫变量的捕获
匿名内部类 :是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 子类对象。...如果接口的实现类(或者是父类的子类)只需要使用唯一的一次, 那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】。...匿名内部类的定义格式: 接口名称 对象名 = new 接口名称() { // 覆盖重写所有抽象方法 }; 对格式“new 接口名称() {…}”进行解析: new代表创建对象的动作 接口名称就是匿名内部类需要实现哪个接口...{…}这才是匿名内部类的内容 另外还要注意几点问题: 匿名内部类,在【创建对象】的时候,只能使用唯一一次。...匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】 强调:匿名内部类和匿名对象不是一回事!!!
2.局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。...**总结下来有这几点: (1)局部内部类可以直接访问外部类的所有成员,包含私有的; (2)不能添加修饰符,因为它是一个局部变量,局部变量是不能使用修饰符的,但是可以用final修饰,因为局部变量是可以使用...final修饰的。...(4)局部内部类访问外部类的成员属性或者方法时,直接访问; (5)外部类访问局部内部类的成员属性或者方法时,通过先创建对象,再访问,且必须要在作用域内。...匿名内部类是唯一一种没有构造器的类。正因为其没有构造器,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调。 匿名内部类在编译的时候由系统自动起名为 Outer$1.class。
Connection initialValue(){ return DriveManager.getConnection(DB_URL); } }; 二、问题的解决 此处语法是Java的匿名子类...匿名子类的格式是就是 方法名(new 构造器){ 调用方法/重写方法 } public class Demo_ThreadLocal { public static void main...method3(){ System.out.println("333333333333"); } } 如果子类构造器中对父类方法进行重写,那么就调用重写的方法,这就是匿名子类的语法特性与目的...我们既可以在匿名子类中进行调用父类的方法,也可以在匿名子类中重写父类的方法以及直接调用父类方法。
内部类的分类 成员内部类,类定义在了成员位置 (类中方法外称为成员位置) 局部内部类,类定义在方法内 成员内部类 :定义在类中方法外的类。...class 内部类 { // 成员变量 // 成员方法 } } } 匿名内部类 匿名内部类 :是内部类的简化写法。...它的本质是一个 带具体实现的父类或者父接口的匿名的子类对象 匿名内部类必须继承一个父类或者实现一个父接口。...new 父类名或者接口名(){ // 方法重写 @Override public void method() { // 执行语句 } }; 以接口为例,匿名内部类的使用...定义一个没有名字的内部类 这个类实现了Swim接口 创建了这个没有名字的类的对象 匿名内部类的使用场景 通常在方法的形式参数是接口或者抽象类时,也可以将匿名内部类作为参数传递。
而内部类分为成员内部类,局部内部类(Local Classes)和匿名内部类(Anonymous Classes)。...int TYPE = 0; //允许 } } 2)、局部内部类: 指内部类定义在方法体内,只能在该方法或条件的作用域内才能使用,退出这写作用域就无法引用。...局部类不仅可以访问外部类的所有成员,还可以访问方法体的局部变量,但必须是final修饰的局部变量。 为什么局部类访问局部变量,变量必须加上final?...但为什么加上final就可以保证能访问呢?...3)、匿名内部类: 为了免去给内部类命名,或者只想使用一次,就可以选择使用匿名内部类。
文章目录 内部类 什么是内部类 成员内部类 访问特点 匿名内部类 前提 格式 使用方式 内部类 什么是内部类 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。...比如,PersonHeart.class 匿名内部类 匿名内部类 :是内部类的简化写法。它的本质是一个带具体实现的父类或者父接口的 匿名的 子类对象。开发中,最常用到的内部类就是匿名内部类了。...匿名内部类就是做这样的快捷方式。 前提 匿名内部类必须继承一个父类或者实现一个父接口。...格式 new 父类名或者接口名(){ // 方法重写 @Override public void method() { // 执行语句 } }; 使用方式 以接口为例,匿名内部类的使用...,代码如下: 定义接口: public abstract class FlyAble{ public abstract void fly(); } 创建匿名内部类,并调用: public class
领取专属 10元无门槛券
手把手带您无忧上云