栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

为什么在内部类定义一个static字段必须是final的

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么在内部类定义一个static字段必须是final的

每一个非静态内部类不会随外部类加载而加载,必须维持一个对其外部类实例的引用,这就表明了非静态内部类的作用域是实例级别(需要对象);而static关键字显式指定某个属性、方法或内部类的作用域是属于类级别(static修饰的依赖于类的加载而加载)。既然二者在语言层面要求的作用域不同,自然无法编译通过。


为什么添加final就可以了呢?

final关键字的字面语义就是指明不可变,用在属性上,表示属性一旦赋值后即不可改变。与static关键字合用即表示定义一个常量,从这个角度看有点类似c++中的const。一旦作为常量,其作用域自然不再是实例级别了,而是全局级别了,只是java语言里面没有全局级别的作用域这个概念,类级别作用域其实就只是加了一个访问权限修饰的全局作用域而已。所以编译自然OK。

下面就进入该类型错误:

//错误代码
public class Ex7_1 {

	 class StaticTest {
		  static final int i = 47;
	}
}

有两种方式更正

//1.将变量改变成final,使之作用域为全局
public class Ex7_1 {

	 class StaticTest {
		  static final int i = 47;
	}
}
//2.将内部类变成static
public class Ex7_1 {

	 static class StaticTest {
		  static int i = 47;
	}
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923911.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号