当前位置: 主页 > JAVA语言

java匿名内部类详解-java匿名类

发布时间:2023-02-09 10:45   浏览次数:次   作者:佚名

文章目录

Java内部类:你真的需要了解方法内部类吗?

Java内部类,相信很多人都用过内部类,新线程使用的匿名内部类,但是很多人对内部类的一些概念处于模糊阶段java匿名内部类详解,比如方法内部类为什么要引用方法参数,方法参数必须设置为 final ,所以本文对内部类知识进行了系统的梳理,如果有用记得收藏。

公共内部类

普通内部类有两个要点要掌握

public class Main{
    public static void main(String args[]){
        Outer outer = new Outer();
        //外部类外部创建内部类
        Outer.Inner inner = outer.new Inner();
        inner.method();
    }
}
class Outer{
    private String value = "OuterValue";
    class Inner{

java匿名内部类详解_java 类加载详解_java匿名类

public void method(){ //持有父类引用,可以访问父类private变量value System.out.println(value); } //利用.this关键字,可以返回父类对象引用 public Outer outerObject(){ return Outer.this; } } }

方法内部类

直接在方法内部定义的内部类

public class Main{
    public static void main(String args[]){
        Outer outer = new Outer();

java匿名内部类详解_java匿名类_java 类加载详解

outer.outerMethod("param"); } } class Outer{ public void outerMethod(String value){ class Inner { public void innerMethod(){ //可以访问方法参数 //1.8以后,内部类访问的方法参数不必设置为final System.out.println(value); } } new Inner().innerMethod(); } }

java匿名类_java匿名内部类详解_java 类加载详解

匿名内部类

匿名内部类其实是一个重点java匿名内部类详解,也是我们经常用到的一个知识点。

比如新建一个线程

public class Main{
    public static void main(String args[]){
        Thread a = new Thread(new Runnable(){
            @Override
            public void run(){
                System.out.println("thread a is running;");
            }
        });
        a.start();
    }
}

上面代码的意思是创建一个实现了Runnable接口的匿名类对象,相当于下面的代码。 由于书写方便,我们经常使用第二种

java匿名类_java 类加载详解_java匿名内部类详解

public class Main{
    public static void main(String args[]){
        Thread a = new Thread(new RunnableImp());
        a.start();
    }
    static class RunnableImp implements Runnable{
        @Override
        public void run(){
            System.out.println("thread a is running;");
        }
    }
}

静态内部类

记住两点

public class Main{

java 类加载详解_java匿名类_java匿名内部类详解

Outer.Inner inner = new Outer.Inner(); } class Outer{ private String ordValue; private static String staValue; static class Inner{ { System.out.println(staValue); //这句编译通不过 //System.out.println(ordValue); } } }

参考Thinking in Java