当前位置: 首页 > 科技观察

Java程序员必备基础:内部类分析

时间:2023-03-13 21:11:33 科技观察

前言我整理了内部类的相关知识,比较全面,比较基础。希望大家一起学习,共同进步。1、什么是内部类?在Java中,一个类的定义可以放在另一个类的定义里面,这就是内部类。内部类本身是类的一个属性,定义方式与其他属性相同。内部类的一个例子:publicclassOuter{privateintradius=1;publicstaticintcount=2;publicOuter(){}classinner{publicvoidvisitOuter(){System.out.println("visitouterprivatemembervariable:"+radius);System.out.println("访问者静态变量:"+count);}}}二、内部类的类型内部类可以分为成员内部类、局部内部类、匿名内部类和静态内部类四种。静态内部类定义在类内部的静态类就是静态内部类。publicclassOuter{privatestaticintradius=1;staticclassStaticInner{publicvoidvisit(){System.out.println("visitouterstaticvariable:"+radius);}}}静态内部类可以访问外部类的所有静态变量,但不能访问非静态variablesoftheouterclass;创建静态内部类的方法,newouterclass.Staticinnerclass(),如下:Outer.StaticInnerinner=newOuter.StaticInner();inner.visit();成员内部类定义在类内部,且成员位置为非静态的类是成员内部类。publicclassOuter{privatestaticintradius=1;privateintcount=2;classInner{publicvoidvisit(){System.out.println("visitouterstaticvariable:"+radius);System.out.println("visitoutervariable:"+count);}}}成员内部类可以访问外部类的所有变量和方法,包括静态的和非静态的,私有的和公共的。成员内部类依赖于外部类的实例,其创建方法为外部类instance.newinnerclass(),如下:Outerouter=newOuter();Outer.Innerinner=outer.newInner();inner。visit();localinterior方法中定义的内部类是本地内部类。publicclassOuter{privateintout_a=1;privatestaticintSTATIC_b=2;publicvoidtestFunctionClass(){intinner_c=3;classInner{privatevoidfun(){System.out.println(out_a);System.out.println(STATIC_b);System.out.println(inner_c);}}Innerinner=newInner();inner.fun();}publicstaticvoidtestStaticFunctionClass(){intd=3;classInner{privatevoidfun(){//System.out.println(out_a);编译错误,定义在静态方法中本地类无法访问外层类的实例变量System.out.println(STATIC_b);System.out.println(d);}}Innerinner=newInner();inner.fun();}}定义在实例方法中局部类可以访问外部类的所有变量和方法,而定义在静态方法中的局部类只能访问外部类的静态变量和方法。局部内部类的创建方法,在对应的方法newinnerclass()中,如下:,在日常开发中用的比较多。publicclassOuter{privatevoidtest(finalinti){newService(){publicvoidmethod(){for(intj=0;jSystem.out.println("Threadrun()")).start();场景四:当一个类在使用该类时,除了它的外部类之外不再被其他类使用。如果一个类不能被其他类使用;或者由于某种原因,不能被其他类引用。那么我们可以考虑将其实现为一个内部类。数据库连接池就是这样一个典型的例子。6.常见的内部类面试题最后,我们来看一道经典的内部类面试题。publicclassOuter{privateintage=12;classInner{privateintage=13;publicvoidprint(){intage=14;System.out.println("局部变量:"+age);System.out.println("内部类变量:"+this.年龄);System.out.println("外部类变量:"+Outer.this.age);}}publicstaticvoidmain(String[]args){Outer.Innerin=newOuter().newInner();in.print();}}运行结果:

最新推荐
猜你喜欢