-
局部内部类调用局部变量的注意事项
2020-09-28 20:42:48局部内部类调用局部变量的注意事项 package 内部类; class Outer { public void fun() { //外部类的成员方法 int a = 20; final int b = 30; class Inner { //成员方法的局部内部类 public void fun1() { //...局部内部类调用局部变量的注意事项
package 内部类; class Outer { public void fun() { //外部类的成员方法 int a = 20; final int b = 30; class Inner { //成员方法的局部内部类 public void fun1() { //内部类的方法 //内部类调用局部变量时,局部变量必须是有效final的 System.out.println(a); //Java8+以后如果局部变量是事实不变的也可不用加final 修饰符 System.out.println(b); } } } }
原因:方法中的局部变量随方法储存在栈中,而类创建的对象储存在堆中,当方法调用完毕后,局部变量会随方法一起消失,如果局部变量发生变化了,类的对象不知道它是否发生变化,所以只能局部变量的。
-
Java 成员内部类 局部内部类 匿名内部类定义和调用
2020-03-30 13:05:31下面是匿名内部类的调用 如果接口里只有一种 抽象方法 那这样覆盖重写 还挺方便 … 起码不用 建立class 实现类了… 但这样 接口文件 就会多了啊 感觉很鸡肋啊 ...
下面是匿名内部类的调用
如果接口里只有一种 抽象方法 那这样覆盖重写 还挺方便 …
起码不用 建立class 实现类了… 但这样 接口文件 就会多了啊 感觉很鸡肋啊 -
Java基础——内部类(成员内部类、局部内部类、匿名内部类的定义和调用方式)
2020-04-20 20:23:44内部类分为成员内部类与局部内部类。 我们定义内部类时,就是一个正常定义类的过程,同样包含各种修饰符、继承与实现关系等。在内部类中可以直接访问外部类的所有成员。 ①成员内部类: 1、成员内部类,定义在外部...1、 什么是内部类
将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类。其他类也称为外部类。
2、内部类的分类
内部类分为成员内部类与局部内部类。
我们定义内部类时,就是一个正常定义类的过程,同样包含各种修饰符、继承与实现关系等。在内部类中可以直接访问外部类的所有成员。
①成员内部类:
1、成员内部类,定义在外部类中的成员位置。与类中的成员变量相似,可通过外部类对象进行访问
2、成员内部类可以使用成员修饰符:public、static…,它是一个类,可以继承、可以实现接口成员内部类定义格式:
class 外部类 { 修饰符 class 内部类 { //其他代码 } }
成员内部类代码演示:
public class Outer { private int i = 1; //外部类成员的位置,定义内部类 class Inner { public void inner() { System.out.println("内部类方法inner "+ i); } } }
调用规则:
-
内部类可以使用外部类成员,包括私有
-
外部类使用内部类必须建立内部类对象
访问方式:
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
结合上面成员内部类的例子,代码演示:
public class Outer_Test { public static void main(String[] args) { /* * 调用外部类中内部类的方法inner * * 依靠外部类对象找到内部类,利用内部类对象,调用内部类方法 * 访问方式: 外部类名.内部类名 变量名 = new 外部类名().new 内部类名(); 变量名.内部类方法; */ Outer.Inner in = new Outer().new Inner(); in.inner(); } }
②局部内部类:
1、局部内部类,定义在外部类方法中的局部位置。与访问方法中的局部变量相似,可通过调用方法进行访问
2、局部内部类,定义在外部类方法中的局部位置。与访问方法中的局部变量相似,可通过调用方法进行访问局部内部类定义格式
class 外部类 { 修饰符 返回值类型 方法名(参数) { class 内部类 { //其他代码 } } }
局部内部类代码演示:
public class JuBu_Outer { public void out() { class Inner{ public void inner() { System.out.println("局部内部类方法inner"); } } // 在外部类方法中,创建内部类对象 Inner in = new Inner(); in.inner(); } }
访问方式:
在外部类方法中,创建内部类对象,进行访问
结合上面局部内部类的例子,代码演示:
public class JuBu_Outer_Test { public static void main(String[] args) { //调用局部内部类方法inner new JuBu_Outer().out(); } }
3、内部类的实际使用——匿名内部类
一、定义的匿名内部类有两个含义:① 临时定义某一指定类型的子类
② 定义后即刻创建刚刚定义的这个子类的对象
③匿名内部类属于局部内部类二、定义匿名内部类的作用与格式
1、作用:匿名内部类是创建某个类型子类对象的快捷方式。
格式:
new 父类或接口(){ //进行方法重写 };
匿名内部类代码演示:
public interface NiMing_inter { //创建一个接口,里面有两个抽象方法 public abstract void smoking(); public abstract void playing(); }
public class NiMing_interTest { public static void main(String[] args) { //使用内部类实现smoking()、playing()方法 /* * 定义实现类、重写方法、建立实现类对象,合为一步完成 格式: new 父类或接口(){ //进行方法重写 }; */ new NiMing_inter() { //new 父类或接口() public void smoking() { //smoking方法重写 System.out.println("人在吸烟!"); } public void playing() { //playing方法重写 System.out.println("人在玩耍!"); } }.smoking();//调用重写方法 new NiMing_inter() { //new 父类或接口() public void smoking() { //smoking方法重写 System.out.println("人在吸烟!"); } public void playing() { //playing方法重写 System.out.println("人在玩耍!"); } }.playing();//调用重写方法 // 利用多肽性,父类引用 = 子类对象 System.out.println("\n——————多态性调用——————"); NiMing_inter i = new NiMing_inter() { public void smoking() { //smoking方法重写 System.out.println("人在吸烟!"); } public void playing() { //playing方法重写 System.out.println("人在玩耍!"); } }; i.smoking(); i.playing(); } }
从new开始,到;(分号)结束,创建了接口NiMing_inter实现类的对象:
new NiMing_inter() { //new 父类或接口() public void smoking() { //smoking方法重写 System.out.println("人在吸烟!"); } public void playing() { //playing方法重写 System.out.println("人在玩耍!"); } };
以上代码也是NiMing_inter的子类匿名对象
原因:
1、使用匿名对象的方式,将定义子类与创建子类对象两个步骤由一个格式一次完成。
2、虽然是两个步骤,但是两个步骤是连在一起完成的。
3、匿名内部类如果不定义变量引用,则也是匿名对象。 -
-
java调用局部内部类中的方法
2019-08-09 12:21:26局部内部类中方法的调用使用Junit单元测试
局部内部类封装在外部类的一个方法中,此方法一般会有一个返回值,返回该局部类类型package com.yzy.innerclass; import org.junit.Test; /** * @className LocalInnerClass.java * @author yangsir * @version V1.0 * @date 2019年8月9日-上午12:03:03 * @description 如何调用局部内部类 */ public class LocalInnerClass { @Test public void test1() { // 1常规 Work w = new Student();// 父类引用指向子类对象 w.doWork();// 调用子类重写的接口中的方法 // 匿名类的对象 Work w1 = new Work() { @Override public void doWork() { System.out.println("工作"); } }; w1.doWork();// 调用匿名类的方法 System.out.println("==================================================="); } @Test public void test2() { // 2匿名类的匿名对象 new Work() { @Override public void doWork() { System.out.println("工作"); } }.doWork();// 直接用new().work的形式,要重写doWork方法 System.out.println("==================================================="); } @Test public void test3() { // 1.调用局部内部类 // Work work = new LocalInnerClass().getWork(); //new Teacher(); //创建一个局部内部类对象 // work.doWork();//调用getWork方法输出讲课(已注释) // 2.调用 Work work = new LocalInnerClass().getWork();// 创建一个局部内部类对象 work.doWork();// 调用 } // 局部内部类 public Work getWork() { // 1局部内部类 // class Teacher implements Work{//局部内部类实现接口,重写doWork方法,返回值为Teacher // @Override // public void doWork() { // System.out.println("讲课"); // } // } // return new Teacher();//返回一个Teacher对象 // 2局部内部类 匿名类的匿名对象 return new Work() {// 直接return一个匿名对象,然后重写里面的方法即可,注意这里的括号 @Override public void doWork() { System.out.println("员工在工作"); } }; } } interface Work { // 一个接口 void doWork(); } class Student implements Work {// 实现接口的类,有自己的方法 @Override public void doWork() { System.out.println("学习"); } }
下面放一位小姐姐的总结图
-
关于java方法中的局部匿名内部类调用局部变量的问题
2019-01-15 23:49:45大家都知道,java的规范中是不允许局部匿名内部类来调用非final的类型局部变量的,这点并没什么好说的毕竟是规范嘛。我们要无条件的遵守。 问题是官方的文档中还有一个词与之先关,“与final”相同效果的变量。之前... -
java 局部内部类常用么_详细分析Java内部类——局部内部类
2021-02-28 18:34:38今天介绍第二种内部类——局部内部类。局部内部类是什么?顾名思义,那就是定义在局部内部的类...局部内部类同样可以无限制调用外部类的方法和属性。可以使用abstract修饰,声明为抽象类。举个栗子:public class O... -
局部内部类 局部内部类访问局部变量必须用final修饰
2017-07-15 22:25:56B:在局部位置,可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能 面试题: 局部内部类访问局部变量的注意事项? A:局部内部类访问局部变量必须用final修饰 B:为什么呢? 局部变量是... -
局部内部类 java_【Java入门提高篇】Day7 Java内部类——局部内部类
2021-03-06 02:45:19今天介绍第二种内部类——局部内部类。局部内部类是什么?顾名思义,那就是定义在局部内部的类...局部内部类同样可以无限制调用外部类的方法和属性。可以使用abstract修饰,声明为抽象类。举个栗子:public classOu... -
局部内部类
2019-10-08 00:34:57访问:可以在包含局部内部类的方法中直接创建局部内部类的对象调用局部内部类的成员。 注意:局部内部类只能访问所在函数的final属性。 匿名内部类 匿名内部类:就是没有类名字的内部类。 匿名内部类作用:... -
Java 匿名内部类调用局部变量
2018-04-16 17:30:02Java 8 之前,匿名内部类中使用 局部变量,需要强制使用 final 修饰 Java 8 开始匿名内部类使用的外部变量不再被强制用final修饰。 外部变量要么是final的;要么自初始化后值不会被改变 这两种都是可以在匿名... -
如何调用局部内部类中的方法
2018-04-01 10:12:57内部类:将类写在其他类的内部,可以写在其他类的成员位置和局部位置局部内部类:将类写在其他类的局部方法中例如public class outer { public void out(){ int i=2; class Inner{ int a=1; public void ... -
jdk1.8之后内部类调用局部方法不用final
2019-07-31 18:03:59局部内部类如果要去访问局部变量,那么局部变量必须声明为final类型。 具体可以看下java内部类介绍 也就是 public class demo { public static void main(String[] args) { doSomething(); } private static ... -
匿名内部类 调用方法内局部变量
2014-08-04 08:43:00局部匿名类在源代码编译后也是要生成对应的class文件的(一般会是A$1.class这种形式的...于是干脆就要求“匿名内部类调用的方法内局部变量必须为final”,这样A$1.class访问A类方法局部变量部分就直接用常量来表示 ... -
局部内部类,匿名内部类,常用类Object
2020-10-20 08:48:41文章目录局部内部类:局部内部类注意的事项:匿名内部类匿名内部类格式匿名内部类本质常用类-Object 局部内部类: 在局部位置中定义的类 局部内部类注意的事项: 局部内部类的成员可以直接访问外部类的成员,包括私有 ... -
成员内部类 局部内部类 匿名内部类
2018-08-25 22:58:00局部内部类(匿名内部类) ============================================ 成员内部类 定义在成员位置的类 内用外,随意访问 ; 外用内,需要内部类对象 如何使用成员内部类 1. 间接方式: 通过外部类对象调用外部... -
内部类——局部内部类
2019-04-04 00:02:00其中,在调用时候,也是只能通过这个局部内部类的所属方法来调用它: 小结类的权限修饰关键字: 局部内部类访问其所属方法的局部变量,需要使用final关键字修饰,这边final可以不写,写了即为常量,只要... -
java 局部内部类总结
2020-11-11 17:06:39局部内部类可以调用外部类的成员(在局部内部类的方法中编写调用代码)。 二、如何创建局部内部类对象? 在方法中创建局部内部类之后,直接在方法中创建局部内部类对象。 三、如何调用局部内部类? 创建外部类对象,... -
成员内部类以及局部内部类
2019-06-13 17:04:02Demo01: ... /*内部类:一个事物的内部包含另外一个事物... 局部内部类(包含匿名内部类) 成员内部类的使用: 1.间接调用:通过创建外部类对象,调用外部类方法使用内部类 2.直接调用,直接创建一个内部类对象 ...