java内部类和静态内部类的区别及分析

java内部类:成员内部类,局部内部类,静态内部类匿名内部类,重点介绍成员内部类,和静态内部类

成员内部类特点:

1,成员内部类中,不能定义静态成员,但是可以声明为static final 

2,成员内部类,可以访问所有的外部成员,

3,在内部类中,直接访问外部变量名

4,在内部类中访问自己的变量直接用变量名

5,在内部类中访问自己的变量可以用this.变量名

6,在内部类中访问外部类中与内部类同名的实例变量用外部类名.this.变量名

7,如果内部类中没有与外部类同名的变量,可以直接用变量名访问外部类变量

看代码:

public class Outter {
	private static int i =1;
	private int j = 10;
	private int k = 20;
	
	public static void outer_f1() {
		System.out.println("这是静态外部方法");
	}
	public void outer_f2 () {
		System.out.println("这是动态外部方法");
	}
	//成员内部类中,不能定义静态成员,但是可以声明为static final 
	//成员内部类,可以访问所有的外部成员
	public class Inner {
		int j = 100;
		int inner_i =100;
		void inner_f1() {
			//在内部类中,直接访问外部变量名
			System.out.println(i);
			//在内部类中访问自己的变量直接用变量名
			System.out.println(inner_i);
			System.out.println(j);
			//在内部类中访问自己的变量可以用this.变量名
			System.out.println(this.j);
			//在内部类中访问外部类中与内部类同名的实例变量用外部类名.this.变量名
			System.out.println(Outter.this.j);
			//如果内部类中没有与外部类同名的变量,可以直接用变量名访问外部类变量
			System.out.println(k);
			outer_f1();
			outer_f2();
		}
	}
}

外部类非静态方法访问成员内部类

public void outer_f3 () {
		Inner inner = new Inner();
		inner.inner_f1();
	}

外部类的静态方法访问成员内部类,与在外部类外部访问成员内部类一样

但是:创建外部类对象,根据外部类对象建立内部类对象

public static void outer_f4() {
		//创建外部类对象
		Outter outter = new Outter();
		//根据外部类对象建立内部类对象
		Inner inner = outter.new Inner();
		inner.inner_f1();
		
	}

静态内部类:

可以直接访问外部的静态类,但是非静态,需要new出一个外部对象来调用

//静态内部类
	public static class Inner_i2 {
		static int j = 100;
		int inner_i =100;
		void inner_f1() {
			Outter outter = new Outter();
			//在内部类中,直接访问外部变量名
			System.out.println(i);
			//在内部类中访问自己的变量直接用变量名
			System.out.println(inner_i);
			System.out.println(j);
			//在内部类中访问自己的变量可以用this.变量名
			System.out.println(this.j);
			//在内部类中访问外部类中与内部类同名的实例变量用外部类名.this.变量名
			System.out.println(outter.j);
			//如果内部类中没有与外部类同名的变量,可以直接用变量名访问外部类变量
			System.out.println(outter.k);
			outer_f1();
			outter.outer_f2();
		}
	}

在外部访问静态和非静态内部类:

静态内部类可以直接new出来,但是非静态就需要先new 出外部的类,在外部类对象上new 出内部类

public static void main(String[] args) {
		Outter outter = new Outter();
		Inner inner = outter.new Inner();
		inner.inner_f1();
		
		System.out.println("内部类");
		//静态内部类可以直接new出来
		Inner_i2 i2 = new Inner_i2();
		i2.inner_f1();
	}


猜你喜欢

转载自blog.csdn.net/u012060033/article/details/85095970
今日推荐