zoukankan      html  css  js  c++  java
  • JAVA基础补漏--内部类

    成员内部类

    public class InnerClass {
    
        public static void main(String[] args) {
    
            System.out.println("+++++++++++++++++++++++");
    
            Outer.Inner oi = new Outer().new Inner();
            oi.methodInner();
        }
    
    }
    
    
    public class Outer {
    
        int num = 10;
    
        public class Inner{
    
            int num = 20;
    
            public void methodInner(){
                int num =30;
                System.out.println(num);
                System.out.println(this.num);
                System.out.println(Outer.this.num);
            }
        }
    }
    
    

    局部内部类

    public class InnerClass {
    
        public static void main(String[] args) {
    
            Outer out = new Outer();
            out.methodOuter();
        }
    
    
    }
    
    
    public class Outer {
    
        int num = 10;
    
        public void methodOuter(){
    
             class Inner{
    
                 int num = 10;
                 public void methodInner(){
                     System.out.println(num);
                 }
    
            }
    
            Inner in = new Inner();
             in.methodInner();
        }
    
    }
    

    权限修饰符

    外部类:public / default

    成员内部类:public protect default private

    局部内部类:什么都不能用

    局部内部类,如果希望访问所在方法的局部变量,这个局变量必是final的。如果这个变量不变,final可不写。

    原因

    1.new 的对象在堆内存中。
    2.局部变量跟着方法走,在栈内部中。
    3.方法运行结束后,立即出栈,局部变量会消失。
    4.但是内部类的方法要使用,必须要new一个对象,new出来对象在内存中一直存在,直到垃圾回收,这时局部变量可能已经销毁了。如果要使用,就自己要拷贝一个,但如果变量总变,没有办法拷贝,如果是final,则可以直接拷贝。

    public class Outer {
        
        public void methodOuter{
            
            final int num = 10;
            
            class Inner{
                
                public void methodInner(){
                    
                    System.out.println(num);
                }
            }
        }
        
    }
    

    匿名内部类

    如果接口实现类(或者父类的子类)只使用一次,这时候可以省略类的定义,而使用匿名内部类。

    格式:

    接口类名称 对象 = new 接口名称(){
    //覆盖重写所有抽象方法
    }

    public class main {
    
        public static void main(String[] args) {
    
    
    
            myInterface obj = new myInterface() {
                @Override
                public void method() {
                    System.out.println("Inner method");
                }
                
            };
    
            obj.method();
            
            new myInterface(){
    
                @Override
                public void method() {
                    System.out.println("匿名对象使用匿名内部类");
                }
            }.method();
    
        }
    }
    
    
  • 相关阅读:
    jmeter分布式配置
    APP自动化测试获取包名的两种方法
    Monkey自动化测试命令
    jmeter之http请求用csv读取中文乱码
    jmeter断言之响应code:200
    使用 form 和 iframe 实现图片上传回显
    sublime3 破解
    在cmd下面执行.py文件时提示ModuleNotFoundError 但是 IDE 不报错
    windows 开启 nginx 监听80 端口 以及 禁用 http 服务后,无法重启 HTTP 服务,提示 系统错误 123,文件目录、卷标出错
    python打包exe
  • 原文地址:https://www.cnblogs.com/comeluder/p/10441919.html
Copyright © 2011-2022 走看看