如:
public class InnerClassDemo{
  int x;
  class A{
    static int a = 0;//这样写是不合法的.
    static final int b=0;//这样写是合法的
    }
}
解答:简单说,定义一个静态的域或者方法,要求在静态环境或者顶层环境,这里静态环境具体说,例子里如果加上 static class A就ok。
非静态内部类 依赖于一个外部类对象,而静态域/方法是不依赖与对象——仅与类相关,因此,非静态内部类中不能定义静态域/方法,编译过不了。
而常量之所以可以(不论有无static),因为java在编译期就确定所有常量,放到所谓的常量池当中。常量的机制和普通变量不一样。

说深入点,java类加载顺序,首先加载类,执行static变量初始化,接下来执行对象的创建,如果我们要执行代码中的变量int a 初始化,那么必须先执行加载外部类,再加载内部类,最后初始化静态变量 a ,问题就出在加载内部类上面,我们可以把内部类看成外部类的非静态成员,它的初始化必须在外部类对象创建后以后进行,要加载内部类必须在实例化外部类之后完成 ,java虚拟机要求所有的静态变量必须在对象创建之前完成,这样便产生了矛盾。
而java常量放在内存中常量池,它的机制与变量是不同的,编译时,加载常量是不需要加载类的,所以就没有上面那种矛盾。

转载于:https://www.cnblogs.com/DarrenChan/p/5738824.html

Java非静态内部类中为什么不能有静态变量却可以有常量?相关推荐

  1. java中的关键字static(静态变量)和final定义常量

    package point;class Point {int x = 0;int y = 0;static int z = 100; // 定义静态变量z,类变量static final double ...

  2. 1vmware中的centos7配置静态变量

    vmware中的centos7配置静态变量 安装centos7时推荐最小化安装,避免占用过多资源 问题: 解决虚机中的Centos7连不上网 https://blog.csdn.net/u014271 ...

  3. Android 中的Activity的静态变量问题

    请看,在一个Activity中定义了一个静态变量userUUID,然后在Service中引用,Service第一次启动的时的引用值,和将app手动kill掉后,Service会重启,然后重启的Serv ...

  4. 非静态内部类中为什么不能拥有静态成员?

    答案来自:https://zhidao.baidu.com/question/534600874.html,其实我是草草啦 的回答. java类加载顺序,首先加载类,执行static变量初始化,接下来 ...

  5. java static 变量存在哪_Java中的静态方法和静态变量存储在哪里?

    小编典典 静态方法(实际上是所有方法)以及静态变量都存储在PermGen堆的部分中,因为它们是反射数据(与类相关的数据,而不与实例相关的数据)的一部分. 更新说明: 请注意,只有变量及其技术值(原始或 ...

  6. Java中的类变量(静态变量static的具体用法快速入门))

    文章目录 问题分析 修改过后的代码 运行结果 先看一段代码 package study_static;public class Childgame {public static void main(S ...

  7. python 类中静态变量_Python中的类或静态变量

    python 类中静态变量 Python类/静态变量 (Python Class / Static Variables) Class or Static variables are class-rel ...

  8. spring中注解无法修饰静态变量

    背景:使用@value注解为类的静态属性赋值的时候,发现一直是空.为什么会这样呢? Spring 依赖注入 是依赖 set方法,set方法是 是普通的对象方法,也就是类实例化的时候才会赋值,但是sta ...

  9. 成员变量、局部变量、实例变量、静态变量、类变量、常量

    成员变量: 直接在类中声明的变量叫成员变量(又称全局变量) ▲ 初始化: 如果未对成员变量设置初始值,则系统会根据成员变量的类型自动分配初始值:int分配初始值0.boolean分配初始值false, ...

  10. Java的子类可以继承父类的静态变量和静态方法吗?

    应该是没有继承,这些静态资源属于类级别的,创建子类对象的时候,虽然父类的有关数据也初始化了(必须调父类的构造器),但是静态的数据在方法区中,实际也是通过父类的名称去访问的.所以子类并没有继承下来.

最新文章

  1. 关于std::string 在 并发场景下 __grow_by_and_replace free was not allocated 的异常问题
  2. Unidirectional Link Detection Protocol
  3. qtablewidget 数据量大效率很低_让大牛带你走进大数据分析:R基础及应用的潮流尖端,享受RHadoop...
  4. python基础代码事例-菜鸟世界 -python基础---set
  5. 2.10 是否要使用端到端的深度学习-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  6. 一句话理解tf.identity的含义
  7. 硬件信息修改大师_零成本学习之单片机硬件开发(1)
  8. Android上传文件至服务器(转)
  9. 你还不知道怎么退出 Vim?
  10. Windows下深度学习标注工具LabelImg安装和使用指南
  11. dijikstra 旅行商问题_第27期:基于旅行商问题(TSP)的配送网络优化—R实现
  12. 问题八:C++中this是干嘛用的
  13. [转]——软件开发人员如何成长
  14. (已更新)漫画小程序,自动采集资源,漫画源码简单即可发布
  15. 【渝粤题库】陕西师范大学201601《中国古代文学(三)》作业 (高起本)
  16. Nacos注册中心和配置中心
  17. ubuntu18.4 浏览器无法上网
  18. OpenCV C++实现树结构可视化(画出一棵四叉树)
  19. 解决[Vue warn]: Unknown custom element: <ag> - did you register the component correctly? For recursive
  20. 黑客内核:如何实现属于你的实时内核?

热门文章

  1. 彻底了解HASH算法及应用(一)
  2. 经验案例:当配置为共享/静态WEP加密时,客户端无法从DHCP获取IP地址
  3. Visual Basic 2005 中的程式語言加強功能
  4. vue-cli初始化项目2.x|3.x
  5. 2017.12.1T19_B2_6
  6. 洛谷1004方格取数
  7. 【Python】闭包Closure
  8. javascript-文档结构遍历
  9. 远程连接桌面不能全屏显示的解决方法
  10. Cannot modify header information的解决方法