山东网站建设平台,免费网站建设步骤,网件路由器推荐,建材企业网站源码目录 一、成员内部类
二、静态内部类
三、局部内部类
四、匿名内部类 一、成员内部类
public class InnerClass {String name;private Integer age;static String hobby;/*** 成员内部类* 1、成员内部类中只能定义非静态属性和方法* 2、成员内部类中可以访问外部类的成员private Integer age;static String hobby;/*** 成员内部类* 1、成员内部类中只能定义非静态属性和方法* 2、成员内部类中可以访问外部类的成员私有的可以静态的也可以*/public class MemberInnerClass {//static int num; 报错int age 20;public void test() {//当本类中没有该属性则会去外部类中寻找该属性访问外部类属性System.out.println(访问外部类的成员变量 name); // null//当本类中有该属性此时访问的是内部类的 agethis代表的是 MemberInnerClassSystem.out.println(访问内部类的成员变量 age); // 20System.out.println(访问外部类的私有成员变量 InnerClass.this.age);// nullSystem.out.println(访问外部类的静态成员变量 hobby); // null}}
}
成员内部类的创建方式 二、静态内部类 静态内部类的创建方式 三、局部内部类
/*** 局部内部类定义在外部类方法中* 1、局部内部类中只能定义非静态属性和方法* 2、局部内部类中可以访问外部类的成员私有的可以静态的也可以* 3、局部内部类只能在方法内创建对象* 4、局部内部类只能访问 局部常量* 在jdk1.7版本中如果局部变量在局部内部类中使用必须要显式的加上final* 在jdk1.8版本中final是默认加上的* 因为局部变量在方法结束后就会被销毁而局部内部类的对象却要等到内存回收机制进行* 销毁所以如果是常量的话那么常量就会被存放在常量池中*/public void method() {int n 10;int m 10;m20;final int[] nums {1};final InnerClass innerClass new InnerClass();class LocalInnerClass {public void test() {//局部变量被访问时默认添加了 final 关键字System.out.println(访问外部类的方法的局部变量 n);/* Variable n is accessed from within inner class,needs to be final or effectively final报错n 可以被内部类访问需要是常量值或有效的常量值因为 m 在外部已经被修改了它不再是有效的常量值 */System.out.println(访问外部类的方法的局部变量 m);// n20; 常量不能被修改/*不报错因为 final 修饰的基本数据类型的数值不能被改变但是被 final 修饰的引用变量它的引用对象不能改变但是其中的属性可以改变*/nums[0] 20;innerClass.name 张三;//numsnew int[10]; 报错 常量值不能更改//innerClassnew InnerClass(); 报错System.out.println(访问外部类的成员变量 name);System.out.println(访问外部类的私有成员变量 age);System.out.println(访问外部类的静态成员变量 hobby);}}//只能在被创建的方法中创建该类LocalInnerClass localInnerClass new LocalInnerClass();localInnerClass.test();}
四、匿名内部类
/*** 匿名内部类本身就是一个对象* 1、匿名内部类本身就是一个对象* 2、一般在匿名内部类中不会定义属性和方法因为没有意义* 3、匿名内部类的父类一般都是抽象类或者是接口* 4、访问变量机制和局部内部类一致* 匿名内部类的应用场景* 如果一个方法的参数是接口且这个接口只需要实现一次,那么就可以使用匿名内部类* 这个接口的实现每一次都不相同就可以使用匿名内部类*/public void test() {int n 10; // 默认添加了 final//例如创建一个线程Thread thread new Thread(new Runnable() {Overridepublic void run() {// n20; 报错System.out.println(访问外部类的成员变量 name);System.out.println(访问外部类的私有成员变量 age);System.out.println(访问外部类的静态成员变量 hobby);}});}