zoukankan      html  css  js  c++  java
  • 局部内部类对外部属性和变量的访问测试

    package test;
    /**
     * 
     * 局部内部类能不能访问外围方法或者属性的值 ?
     * 
     * 局部内部类可以访问属性 ,但是不能访问非final的局部变量 
     *
     */
    public class Test1 {
        private String attribute ;
        public void f(){
            final String localAttribute = "" ;
            class InnerClass {
                public InnerClass(){
                    System.out.println("attribute " + attribute );
                    attribute = attribute + "" ;
                    //Cannot refer to 
                    //the non-final local variable localAttribute 
                    //defined in an enclosing scope
                    System.out.println("localAttribute " + localAttribute );
                    localAttribute = localAttribute + "" ;
                }
            }
        }
    }
    /**
     * 测试任意代码块中的内部类访问属性和局部变量 
     */
    class TestIfLocalClass {
        private String attribute ;
        public TestIfLocalClass(){
            final String localAttribute = "" ;
            if(true){
                class IfLocalClass {
                    public IfLocalClass(){
                        System.out.println(attribute);
                        attribute = attribute + "" ;
                        System.out.println(localAttribute);
                        localAttribute = localAttribute + "" ;
                    }
                }
            }
        }
    }
    /**
     * 测试匿名内部类对外围属性和本地变量的访问 
     */
    interface TestAnonymousClass{
        public void f() ;
    }
    class TestAClass{
        private String attribute ;
        public TestAnonymousClass f(){
            final String localAttribute = "" ;
            return new TestAnonymousClass(){
                @Override
                public void f() {
                    System.out.println(attribute);
                    attribute = attribute + "" ;
                    System.out.println(localAttribute);
                    localAttribute = localAttribute + "" ;
                }
            } ;
        }
    }

    通过上面的测试可得,局部内部类能够访问和修改外部类的属性但是不能访问非final修饰的局部变量,可以访问final修饰的局部变量但是不能修改其值。

  • 相关阅读:
    Java--分布式系统高并发解决方案
    Eclipse 快捷键
    Java--基础命名空间
    Java--发送邮件
    Java--垃圾收集算法及内存分配策略
    Java--Vector类
    第四篇 express 安装esasticsearch
    第三篇elasticsearch分布式安装
    第二篇elasticsearch配置
    elasticsearch介绍
  • 原文地址:https://www.cnblogs.com/caiyao/p/4693332.html
Copyright © 2011-2022 走看看