精华内容
下载资源
问答
  • 如何调用局部内部类中的方法

    千次阅读 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调用局部内部类中的方法

    千次阅读 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("学习");
    	}
    
    }
    
    

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

    展开全文
  • 如题,如何用print()方法调用m()里面的局部变量int a = 90;public class OuterClass { int a= 30; //成员方法 public void m() { int a = 90;... //局部内部类 class InnerClass3{ int a = 80;

    如题,如何用print()方法调用m()里面的局部变量int a = 90;

    public class OuterClass {
        int a= 30;
        //成员方法
        public void m() {
            int a = 90;
            //局部内部类
            class InnerClass3{
                int a = 80;
                public void print() {
                    int a = 70;
                    System.out.println(".................."+a);
                    System.out.println("............."+a);
                }
            }
        }
    }

    再问个没事找事的问题:
    如何调用最里面的方法d();

    class A{
        class B{
            public void b() {
                class C{
                    public void c() {
                        class D{
                            public void d() {
                                System.out.println("如何调用这个方法d()");
                            }
                        }
                    }
                }
            }
        }
    }
    展开全文
  • 因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在...

    * 局部内部类访问局部变量必须用final修饰
    * 局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
    因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用

    1.8之前的版本是需要加final,1.8之后不用加也可以使用。

    public class Demo2_InnerClass {
        public static void main(String[]args){
            Outher o=new Outher();
            o.method();
        }
    }
    
    class Outher{
        public void method(){
            int num=10;
            class Inner{
                public void print(){
                    System.out.println("局部内部类成员方法");
                    System.out.println("访问局部变量需要设置为final:"+num);
                }
            }
            Inner i=new Inner();//在方法中创建Inner对象
            i.print();
        }
       /* public void run(){//局部内部类,只能在其所在的方法中访问
            Inner i=new Inner();
            i.print();
        }*/
    }

     

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

    千次阅读 多人点赞 2018-07-15 16:13:30
    2、局部内部类(包含匿名内部)。 成员内部 定义格式: 修饰符 class 名称 { 修饰符 class 名称 { //... } //... } 注意: 内部使用外部,可以随意访问,但是外部使用内部要借助内部的对象...
  • B:在局部位置,可以创建内部对象,通过对象调用内部方法,来使用局部内部类功能 面试题: 局部内部类访问局部变量的注意事项? A:局部内部类访问局部变量必须用final修饰 B:为什么呢? 局部变量是...
  • JAVA局部内部类的使用

    千次阅读 2017-04-22 00:00:11
    我是在JDK8环境下实现的,与之前的版本规则有一些变化,所以在这里mark一下 public class localInnerClass{ public static void main(String []args)... //因为是顺序编译,要在内部类后面创建实例。 } }
  • 最近在看内部的时候,有一个疑惑:局部内部类和匿名内部只能访问final的局部变量,看了几篇博客,明白了很多,下面来分析一下:
  • 内部类和静态内部类调用方式

    千次阅读 2020-08-20 16:56:37
    一、静态内部类的创建需要依赖外部 Out.Ind j=new Out.Ind(); 二、非静态内部类 Outside in=new Outside(); //在通过外部对象创建一个内部类对象 Outside.Indoor oi =in.newIndoor();
  • 一、什么是内部 顾名思义,内部就是将写在其他的...内部分为成员内部局部内部类。内部也会生成.class文件。 1、成员内部 定义在外部中的成员位置,与中的成员变量相似,可通过外部对...
  • package Test;import java.util.Date;public class MyTread { /** * @author peter * @desc 启动多线程 推送消息到接口地址,匿名内部类调用外部方法属性 * @date 2017.09.13 */ public void test() { //
  • 局部内部类(包含匿名内部) 成员内部 定义格式: 修饰符 class 外部名称 { 修饰符 class 内部名称 { // .... } // .... } 内部的class文件命名为:外部$内部.class 使用成员内部 间接方式:...
  • Java 匿名内部类调用局部变量

    千次阅读 2018-04-16 17:30:02
    Java 8 之前,匿名内部类中使用 局部变量,需要强制使用 final 修饰 Java 8 开始匿名内部类使用的外部变量不再被强制用final修饰。 外部变量要么是final的;要么自初始化后值不会被改变 这两种都是可以在匿名...
  • * 标题:Java内部[成员内部局部内部类、匿名内部和静态内部] * * 作者:Nstar * * 时间:2020年3月13日 * * 内容: * * 问:什么是内部? * 答:在 Java 中,可以将一个定义在另一个里面或者一...
  • 这里所说的“匿名内部类”主要是指在其外部的成员方法内定义,同时完成实例化的,若其访问该成员方法中的局部变量,局部变量必须要被final修饰。 原因是编译程序实现上的困难:内部类对象的生命周期会超过局部...
  • 定义在A中的B就是内部类,B在A中的地位和其他成员相同,意思就是说可以相互调用  优点:通过内部类可以让java间接的实现多继承 创建内部类的对象 方法一 先获取内部类对象再调用方法 Outer out = ...
  • Test.java(测试):package cn.xxx.demo; public class Test { public static void main(String[] args) { Outer.Inner in = new Outer().new Inner();... // 调用内部类对象方法。 } } Outer.ja...
  • 我们都知道方法中的匿名/局部内部类是能够访问同一个方法中的局部变量的,但是为什么局部变量要加上一个final呢? 首先我们来研究一下变量生命周期的问题,局部变量的生命周期是当该方法被调用时在栈中被创建,当...
  • 一、 Java内部类分类: 1.非静态成员内部类内部类没有使用static关键字修饰,并且和外部的成员变量和方法属于同一级别,这样的是非静态成员内部类(可以使用权限修饰符修饰,和final、abstract关键字修饰)。 ...
  • 局部内部类是指定义在方法中的。 看下面的例子,哪些变量可以被局部内部类Inner访问并修改? public class Test{ private int a; static int b; public void func(){ int j=10; class Inner{ } } }...
  • 关于内部的问题: 局部内部类访问外部的局部变量问题 编程时,在线程中使用局部变量时候经常编译器会提示:局部变量必须声明为final [java] view plain copy package test; public class ThreadTest { ...
  • Java基础系列(三十):局部内部类

    千次阅读 2018-09-04 21:04:52
    局部内部类就是定义在某个方法内部的内部,它的作用域仅限于这个方法。 Why 当我们在外围中定义的内部仅仅在某个方法中使用了一次,这种情况下,我们就可以选择去使用局部内部类。 How 以上节课的例子...
  • 闭包和局部内部类的区别

    千次阅读 2019-07-03 20:43:34
    局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。 闭包(Closure)是一种能被调用的对象,它保存了创建它的作用域的信息。JAVA并不能显式地支持闭包,但是在...
  • 因为生命周期不一致, 局部变量直接存储...而局部内部类对局部变量的引用依然存在,如果局部内部类调用局部变量时,就会出错。加了final,可以确保局部内部类使用的变量与外层的局部变量区分开,解决了这个问题。 ...
  • 【内部局部内部类及应用

    千次阅读 2016-12-10 16:59:13
    定义在代码块,方法体内的局部内部类 局部内部类访问外部的成员使用:外部类名.this.成员名 对外部世界完全隐藏,只在其作用域内生成对象 局部不能加访问修饰符,因为它们不是成员 成员内部不能与外部...
  • 因为生命周期的原因。...首先,内部类和外部其实是处于同一个级别,内部类不会因为定义在方法中就会随着方法的执行完毕而跟随者被销毁。问题就来了,如果外部的方法中的变量不定义final,那么当...
  • 这一阶段大量使用内部类bean定义临时简单的策略接口,在外部bean中决定使用哪个策略,然后直接调用相应的接口方法,此前使用若干次未见问题,直到这次出现空指针,使用debug,发现内部类调用外部方法时,外部中注入的...
  • 首先描述下类内部方法互相调用,事务不生效的情况UserService测试接口package cn.sw.study.web.service;/** * Created by shaowei on 2017/4/26. */public interface UserService { void addInfo(); void add...
  • java——局部内部类

    2017-07-26 22:18:41
    2-在局部位置,可以创建内部对象,通过对象调用内部方法,来使用局部内部类功能。 面试题:  局部内部类访问局部变量的注意事项; **局部内部类访问局部变量必须用final修饰 因为:局部变量是随着方法的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 330,905
精华内容 132,362
关键字:

局部内部类调用