精华内容
下载资源
问答
  • 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("学习");
    	}
    
    }
    
    

    下面放一位小姐姐的总结图
    内部类

    展开全文
  • B:在局部位置,可以创建内部对象,通过对象调用内部方法,来使用局部内部类功能 面试题: 局部内部类访问局部变量的注意事项? A:局部内部类访问局部变量必须用final修饰 B:为什么呢? 局部变量是...
    /*
    	局部内部类
    		A:可以直接访问外部类的成员
    		B:在局部位置,可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能
    	
    	面试题:
    		局部内部类访问局部变量的注意事项?
    		A:局部内部类访问局部变量必须用final修饰
    		B:为什么呢?
    			局部变量是随着方法的调用而调用,随着调用完毕而消失。
    			而堆内存的内容并不会立即消失。所以,我们加final修饰。
    			加入final修饰后,这个变量就成了常量。既然是常量。你消失了。
    			我在内存中存储的是数据20,所以,我还是有数据在使用。
    */
    class Outer {
    	private int num  = 10;
    	
    	public void method() {
    		//int num2 = 20;
    		//final int num2 = 20;
    		class Inner {
    			public void show() {
    				System.out.println(num);
    				//从内部类中访问本地变量num2; 需要被声明为最终类型
    				System.out.println(num2);//20
    			}
    		}
    		
    		//System.out.println(num2);
    		
    		Inner i = new Inner();
    		i.show();
    	}
    }
    
    class InnerClassDemo5 {
    	public static void main(String[] args) {
    		Outer o = new Outer();
    		o.method();
    	}
    }

    展开全文
  • 大家都知道,java的规范中是不允许局部匿名内部类调用非final的类型局部变量的,这点并没什么好说的毕竟是规范嘛。我们要无条件的遵守。 问题是官方的文档中还有一个词与之先关,“与final”相同效果的变量。之前...

    大家都知道,java的规范中是不允许局部匿名内部类来调用非final的类型局部变量的,这点并没什么好说的毕竟是规范嘛。我们要无条件的遵守。

    问题是官方的文档中还有一个词与之先关,“与final”相同效果的变量。之前很纳闷,它要表达什么意思呢。

    直到一次写代码的经历,本来局部匿名类中的方法调用一个局部变量没有问题,但当我的局部变量由于在获取值时要抛异常,所以就try了一下,导致声明与赋值由两个语句完成。突然我的内部类的方法报错了,告诉我无法访问非final类型的变量。我知道jdk6-7是编译不过,但我的是jdk8啊,应该没问题。可为什么会出现这个问题呢?在一路回撤操作中,突然发现是由于局部变量的赋值方式。比如 Object obj = null;obj=new Person();和Object obj = new Person();的区别。现在我明白什么叫与final相同效果了。不知道理解对对不对,应该指的就是初始化方式吧。要与final类型相同。

    展开全文
  • 如何调用局部内部类中的方法

    千次阅读 2018-04-01 10:12:57
    内部:将写在其他的内部,可以写在其他的成员位置和局部位置局部内部类:将写在其他的局部方法中例如public class outer { public void out(){ int i=2; class Inner{ int a=1; public void ...

    内部类:将类写在其他类的内部,可以写在其他类的成员位置和局部位置

    局部内部类:将类写在其他类的局部方法中

    例如

    public class outer {
    	public void out(){
    		int i=2;
    		class Inner{
    			int a=1;
    			public void inner(){
    				System.out.println(a);
    			}		
    		}
    	}
    }

    其中Inner就是局部内部类

    那么如何调用Inner类中的inner()方法呢?

    我们知道,在main方法中是没有办法直接调用类的方法中的局部变量,例如上面代码中的局部变量i是没有办法直接调用的。但是可以修改out()方法的返回值调用i。

    而局部内部类调用,只能在out()方法中new一个对象来调用。

    例如

    public class outer {
    	public void out(){
    		int i=2;
    		class Inner{
    			int a=1;
    			public void inner(){
    				System.out.println(a);
    			}		
    		}
    		Inner in=new Inner();
    		in.inner();
    	}
    }

    或者使用匿名对象调用

    public class outer {
    	public void out(){
    		int i=2;
    		class Inner{
    			int a=1;
    			public void inner(){
    				System.out.println(a);
    			}		
    		}
    		new Inner().inner();
    	}
    }
    注意 匿名对象没有引用变量,只能使用一次,每次创建一个匿名对象都在堆中分配内存,都具有不同的内存地址。创建多了比较浪费资源。
    展开全文
  • java内部之成员内部局部内部类和匿名内部

    千次阅读 多人点赞 2018-07-15 16:13:30
    2、局部内部类(包含匿名内部)。 成员内部 定义格式: 修饰符 class 名称 { 修饰符 class 名称 { //... } //... } 注意: 内部使用外部,可以随意访问,但是外部使用内部要借助内部的对象...
  • 局部内部类(包含匿名内部) 成员内部 定义格式: 修饰符 class 外部名称 { 修饰符 class 内部名称 { // .... } // .... } 内部的class文件命名为:外部$内部.class 使用成员内部 间接方式:...
  • 内部局部内部类

    千次阅读 2018-08-19 08:31:22
    内部局部内部类 1、什么是内部 将一个A定义在另一个B里面,里面的那个A就称为内部,B则称为外部。 1.成员内部 :定义在中方法外的。 定义格式:  class 外部 {  class内部{ } ...
  • 如题,如何用print()方法调用m()里面的局部变量int a = 90;public class OuterClass { int a= 30; //成员方法 public void m() { int a = 90;... //局部内部类 class InnerClass3{ int a = 80;
  • Java 匿名内部类调用局部变量

    千次阅读 2018-04-16 17:30:02
    Java 8 之前,匿名内部类中使用 局部变量,需要强制使用 final 修饰 Java 8 开始匿名内部类使用的外部变量不再被强制用final修饰。 外部变量要么是final的;要么自初始化后值不会被改变 这两种都是可以在匿名...
  • java——局部内部类

    2017-07-26 22:18:41
    2-在局部位置,可以创建内部对象,通过对象调用内部方法,来使用局部内部类功能。 面试题:  局部内部类访问局部变量的注意事项; **局部内部类访问局部变量必须用final修饰 因为:局部变量是随着方法的...
  • 局部内部类如果要去访问局部变量,那么局部变量必须声明为final类型。 具体可以看下java内部介绍 也就是 public class demo { public static void main(String[] args) { doSomething(); } private static ...
  • Java 内部分四种:成员内部局部内部类、静态内部和匿名内部
  • 【内部局部内部类及应用

    千次阅读 2016-12-10 16:59:13
    定义在代码块,方法体内的局部内部类 局部内部类访问外部的成员使用:外部类名.this.成员名 对外部世界完全隐藏,只在其作用域内生成对象 局部不能加访问修饰符,因为它们不是成员 成员内部不能与外部...
  • 1. 局部内部类 局部内部类是在一个方法内部声明的一个 局部内部类中可以访问外部的成员变量及方法 局部内部类中如果要访问该内部所在方法中的局部变量,那么这个局部变量就必须是final修饰的 示例: ...
  • * 标题:Java内部[成员内部局部内部类、匿名内部和静态内部] * * 作者:Nstar * * 时间:2020年3月13日 * * 内容: * * 问:什么是内部? * 答:在 Java 中,可以将一个定义在另一个里面或者一...
  • java 局部内部类的使用规范 java 局部内部类的使用规范
  • 定义在A中的B就是内部类,B在A中的地位和其他成员相同,意思就是说可以相互调用  优点:通过内部类可以让java间接的实现多继承 创建内部类的对象 方法一 先获取内部类对象再调用方法 Outer out = ...
  • 局部内部类访问局部变量细节

    千次阅读 2015-09-13 21:12:20
    class People //file InnerClassTest.java { private int a = 21; public void method() { String go = "running og";... class Hand //局部内部类 { public void show() { System.out.print
  • 内部类调用外部方法时传参是可以传参的,不管外部方法是private,还是public;而且内部类里可以修改外部的成员变量。 如果外部方法无法得到内部类局部变量的值,那应该是哪里写错了。
  • 形如下图中的: 那么为什么匿名内部局部内部类只能访问被final修饰的局部变量呢?根本原因是内部的生命周期可能会超过局部变量的生命周期。局部变量的生命周期是当调用方法f()的时候,j...
  • 我们都知道方法中的匿名/局部内部类是能够访问同一个方法中的局部变量的,但是为什么局部变量要加上一个final呢? 首先我们来研究一下变量生命周期的问题,局部变量的生命周期是当该方法被调用时在栈中被创建,当...
  • B:在局部位置,可以创建内部对象,通过对象调用内部方法,来使用局部内部类功能。 面试题: 局部内部类访问局部变量的注意事项 A:局部内部类访问局部变量必须用final修饰 B:为什么呢? 因为局部变量会...
  • 一、什么是内部 顾名思义,内部就是将写在其他的...内部分为成员内部局部内部类。内部也会生成.class文件。 1、成员内部 定义在外部中的成员位置,与中的成员变量相似,可通过外部对...
  • 因为生命周期不一致, 局部变量直接存储...而局部内部类对局部变量的引用依然存在,如果局部内部类调用局部变量时,就会出错。加了final,可以确保局部内部类使用的变量与外层的局部变量区分开,解决了这个问题。 ...
  • 一、私有内部类: class Out { private int age = 12; private class In { public void print() { System.out.println(age); } } public void outPrint() { new
  • package Test;import java.util.Date;public class MyTread { /** * @author peter * @desc 启动多线程 推送消息到接口地址,匿名内部类调用外部方法属性 * @date 2017.09.13 */ public void test() { //
  •  成员内部局部内部类、静态内部、匿名内部  ③内部作为外部的一个成员,并依附于外部而存在。包括:成员内部局部内部类、匿名内部  ④内部可以由private、public、protected、d

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 328,068
精华内容 131,227
关键字:

局部内部类怎么调用