zoukankan      html  css  js  c++  java
  • 2020年9月2日 局部内部类

    /*
    * 四、局部内部类(最少使用的一种,几乎见不着)
    * 1、声明的位置很特殊:在方法体内
    *
    * 2、特点
    * (1)局部内部类的修饰符,只能有abstract或final
    * (2)有作用域
    * (3)如果局部内部类在静态方法中,不能使用外部类的非静态成员
    * (4)在局部内部中,可以使用当前局部内部类所在方法的局部变量,
    * 但是要求,这个局部变量必须是final的常量。
    *
    * 在Java8时,如果某个局部变量被局部内部类使用了,会自动添加final变为常量一旦变为常量,它的值就不能修改了。
    *
    * 为什么它要这么要求?加final
    * 避免局部内部类对象被返回到外部类的外面使用时,访问不到这个局部变量,所以要把这个局部变量变为final的常量。
    *
    */

    public class TestLocalInner {
        public static void main(String[] args) {
            Outer out = new Outer();
            Father in = out.test();//在外部类的外面虽然不能使用局部内部类,但是可以得到它的对象
            System.out.println(in.getClass());
            in.method();//在这里仍然可以访问到这个a,那么这个a就不能存在栈中(),得挪到方法区,变为常量
        }
    }
    abstract class Father{
        public abstract void method();
    }
    class Outer{
        private int i = 1;//成员变量,实例变量,非静态成员变量
        private static int j = 2;//成员变量,类变量,静态变量
        
        public Father test(){
    //        Inner in = new Inner();
            
            final int a = 10;//局部变量==>局部的常量
            
            //局部内部类
            class Inner extends Father{
                public void method(){
                    System.out.println(i);
                    System.out.println(j);
                    System.out.println(a);
                }
            }
            
            Inner in = new Inner();
            in.method();
            
            return in;
        }
        
        public void method(){
    //        Inner in = new Inner();
        }
        
        public static void fun(){
            //局部内部类
            class Inner{
                public void method(){
    //                System.out.println(i);//是因为fun方法是静态的
                    System.out.println(j);
                }
            }
        }
    }
  • 相关阅读:
    洛谷 P1057 传球游戏
    BZOJ 1801: [Ahoi2009]chess 中国象棋
    BZOJ 1806: [Ioi2007]Miners 矿工配餐
    51nod 1276 岛屿的数量
    BZOJ 1800: [Ahoi2009]fly 飞行棋
    路由控制和视图层
    django的零碎注意点
    Django框架简介
    Bootstrap框架
    jQuery基础知识
  • 原文地址:https://www.cnblogs.com/douyunpeng/p/13601147.html
Copyright © 2011-2022 走看看