java的静态内部类中定义的变量是全局的么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的静态内部类中定义的变量是全局的么?相关的知识,希望对你有一定的参考价值。
A B C三个类,C为A的静态内部类。C中的静态和非静态变量,这些变量在B中使用时,都是全局的么?
你把静态变量和全局变量的概念弄混了吧。静态变量是public的只要被jvm加载所有的类都可使用,也就是说静态变量是多个类共用的;而全局变量(非静态变量)是指在一个类内部,可以被本类任意调用。c本身是静态的适用范围要远远大于你所谓的全局变量,所以你在b中无所谓全局与非全局。 参考技术A Java里面是没有跟C/C++那样全局的概念的,C作为A的静态内部类,是可以说明它的可见性的,如果声明为public,那么B无论在什么地方都可以使用这个C类,如果是声明为protected,则只能是B是A的子类的时候才能使用C类,如果默认不声明,则B必须跟A在同一个package里面才能使用C,如果声明为private,则B必须也是A的内部类才能使用C类。这跟一般的全局的概念是有点不同的。
声明C为静态内部类,不过是可以在不实例化A的情况下直接使用C类而已,但是还是受到可见性声明的约束的。本回答被提问者和网友采纳
Java中成员变量局部变量全局变量静态变量成员变量
开头注意:static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。
根据定义变量位置的不同,可以将变量分为成员变量和局部变量。
成员变量是 定义在一个类的变量:类中方法外
局部变量是定义在一个方法内的变量:方法中
成员变量分为:
静态属性:随类的存在而存在,是在类加载的初始化
非静态属性:随实例的属性存在而存在。
局部变量:
局部变量不能加static,包括protected, private, public这些也不能加。局部变量保存在栈中。
局部编程必须在声明时初始化。
成员变量和局部变量区别:
成员变量可以不显式初始化,它们可以由系统设定默认值;局部变量没有默认值,所以必须设定初始赋值。
成员变量存在于堆内存,局部变量存在于栈内存。
静态变量:类中方法外,用static修饰
生命周期:JVM第一次读到这个类并加载类时开始,类销毁不存在。
类加载过程:
加载父类(如果父类已经加载过,则不在加载)。
初始化静态属性 。
按顺序的初始化静态代码块 初始化的前提就是分配空间 。
静态变量存在于方法区即静态区(方法区包含整个程序中唯一存在的元素)
全局变量(在java中可以理解为用static final修饰):在java中全局变量也称成员变量,是创建对象的时候分配内存的。全局常量存于全局数据区。
创建对象过程为:
分配空间。
创建父类对象。
初始化成员变量。
调用构造方法创建一个对象。
方法(包括静态方法)中不能有静态变量,方法中存在的是局部变量,而不是静态变量。静态变量是定义在类中,方法体外面的。
实例变量:定义在类中但在任何方法之外。
当一个对象被实例化之后,每个实例变量的值就跟着确定;
以上是关于java的静态内部类中定义的变量是全局的么?的主要内容,如果未能解决你的问题,请参考以下文章