Java中的作用域

在计算机程序中,声明在不同地方的变量具有不同的作用域,例如局部变量,全局变量等。在java中作用域是有花括号的位置决定的,它决定了其变量名的可见性与生命周期。

java中变量类型主要有3种:成员变量,静态变量和局部变量。

类的成员变量的作用域与类的实例化对象的作用域相同,当类被实例化时,成员变量就会在内存中分配空间并初始化,直到该实例的生命周期结束,成员变量的生命周期才会结束。

被static修饰的成员变量被成为静态变量或全局变量,静态变量不依赖特定的实例,而是都有实例共享的,它是在类被加载的时候jvm就会给类的静态变量分配存储空间。

局部变量就是方法中定义的变量,其可见性和生命周期是所在的花括号。

成员变量或方法也有4种作用域:

1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。

3、缺省 

变量或者方法前没有访问修饰符时,可以被所在类访问,可以被同一包内的其他类访问 或者继承。但是不能被其他包访问

4、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。

访问修饰符作用域/范围

当前类

同一package

子孙类

其他package

Public

protected

×

缺省

×

×

private

×

×

×

这四种修饰符不能用来修饰局部变量,private、protected不能用来修饰类(只有public、sbstract、final可以用来修饰类)。

一个java文件中最多只能有一个类是public修饰,并且这个类名必须与文件名保持一致。

如果java文件中的所有类都没有用public修饰,那么文件名可以与类名不一致。。

静态修饰符的特点:

static是一个修饰符,用于修饰成员(成员变量和成员函数)

静态成员随着类的加载而加载。
静态成员优先于对象存在。
静态成员被所有对象所共享
静态成员多了一个中调用方式,可以被类名直接调用。

静态使用的注意事项。
静态方法只能访问静态成员, 非静态方法既可以访问静态又可以访问非静态。
静态方法中不可以定义this,super关键字。因为this代表是对象。而静态存在时,有可能没有对象。所以静态方法运行时,this是没有任何对象代表的。
简单说,先进内存的数据不可以访问后进内存的数据,可是后进内存数据可以访问先进内存的数据。

主函数是静态的
静态的优缺点

优点: 静态成员多了一种调用方式。可以直接被类名调用 格式 :类名.静态成员。也可以被对象调用。
弊端 : 静态方法只能访问静态成员,出现了访问局限性。

静态修饰的数据对象共享的数据,存放在方法区的静态区中。
非静态的数据,是每一个对象特有数据。存放在对象的所属的堆内存中。

当成员变量被静态修饰后,和非静态成员变量的区别:

静态变量也称为类变量,也就是直接可以被类名调用的变量。这个变量是所属于类的。
非静态变量成为成员变量,或者实例变量,是被对象调用的,是所属具体对象的。
静态变量随着类的加载而加载,也意味着随着类的消失而消失。生命周期最长。
实例变量,随着对象的创建而加载,随着对象的消失而消失。按照对象的生命周期而存在。
静态变量存储在方法区的静态区中。
实例变量存在于对象所属的堆内存中。
静态变量数据,被所有对象所共享。
实例变量是对象中的特有数据

https://blog.csdn.net/yxy_myfields/article/details/76422952 

原文地址:https://www.cnblogs.com/arrows/p/10407759.html