内部类(二)----静态内部类

上一章已经介绍了内部类中的成员内部类,可点击下方链接查看
内部类(一)—成员内部类
这一章节将介绍静态内部类

1 静态内部类

1.1 初步了解

一个类的静态成员独立于这个类的任何一个对象存在,只要在具有访问权限的地方,我们就可以通过 类名.静态成员名 的形式来访问这个静态成员;
同样,静态内部类也是作为一个外部类的静态成员而存在,并且创建一个类的静态内部类对象不需要依赖其外部类对象。
例如:

public class OuterClass {
	
	static String name = "张三";
	
	public static class InnerClass{
		Integer age = 18;
		public void print() {
			System.out.println("name:"+name+" age:"+age);
		}
	}
	
	public static void main(String[] args) {
		InnerClass innerClass = new InnerClass();//直接通过关键字new创建一个静态内部类对象
		innerClass.print();
	}
}

输出结果: name:张三 age:18
从上述例子中可以直观的看出,当内部类被static修饰时,创建对象就不需要依赖外部类进行创建了,直接new就行了。
可以直观的看出,静态内部类就像外部类的一个静态成员一样,创建其对象无需依赖外部类对象(访问一个类的静态成员也无需依赖这个类的对象,因为它是独立于所有类的对象的)。
静态对象的加载在类加载的时候就已经加载了。
而外部类依然可以访问静态内部类对象的所有访问权限的成员,这一点和普通内部类无异。

1.2 调用外部类中的变量

1.2.1 外部类中的属性用static修饰

静态内部类中也无法访问外部类的非静态成员,因为外部类的非静态成员是属于每一个外部类对象的,而本身静态内部类就是独立外部类对象存在的,所以静态内部类不能访问外部类的非静态成员,

public class OuterClass {
	
	String name = "张三";//没有用static修饰
	
	public static class InnerClass{
		Integer age = 18;
		public void print() {
			System.out.println("name:"+name+" age:"+age);//此处报有编辑错误,原因是静态类中不能调用非静态成员
		}
	}
	
	public static void main(String[] args) {
		InnerClass innerClass = new InnerClass();
		innerClass.print();
	}
}

1.2.2 在静态内部类中创建外部类对象

public class OuterClass {
	
	String name = "张三";//没有用static修饰
	
	public static class InnerClass{
		OuterClass outerClass = new OuterClass();//创建外部类对象
		Integer age = 18;
		public void print() {
			System.out.println("name:"+outerClass.name+" age:"+age);//通过外部类对象调用其成员属性
		}
	}
	
	public static void main(String[] args) {
		InnerClass innerClass = new InnerClass();
		innerClass.print();
	}
}

输出结果: name:张三 age:18

1.3 外部类调用内部类中的对象

1.3.1 静态内部类属性为非静态

public class OuterClass {
	
	String name = "张三";
	public void print2() {
		InnerClass innerClass = new InnerClass();//创建内部类对象
		System.out.println("调用内部类中的属性:"+innerClass.age);
	}
	public static class InnerClass{
		Integer age = 18;//非静态内部类属性
	}
	
	public static void main(String[] args) {
		OuterClass outerClass = new OuterClass();
		outerClass.print2();
	}
}

**输出结果:**调用内部类中的属性:18

1.3.2 静态内部类属性为静态

public class OuterClass {
	
	String name = "张三";
	public void print2() {
		System.out.println("调用内部类中的属性:"+InnerClass.age);//直接通过类名.属性调用即可
	}
	public static class InnerClass{
		static Integer age = 18;//静态内部类中的静态属性
	}
	
	public static void main(String[] args) {
		OuterClass outerClass = new OuterClass();
		outerClass.print2();
	}
}

输出结果: 调用内部类中的属性:18

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值