static详解纯文字版(Cappuccinooo大神的整理笔记罢了
static关键字
- static修饰的成员变量和方法,从属于类
- 普通变量和方法从属于对象
- 静态方法不能调用非静态成员,编译会报错
static关键字的用途
一句话描述就是:方便在没有创建对象的情况下进行调用(方法/变量)。
显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
static可以用来修饰类的成员方法、类的成员变量,另外也可以编写static代码块来优化程序性能
虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法和静态成员变量。
static关键字的误区
(1)static关键字会改变类中成员的访问权限吗?
有些初学的朋友会将java中的static与C/C++中的static关键字的功能混淆了。在这里只需要记住一点:与C/C++中的static不同,Java中的static关键字不会影响到变量或者方法的作用域。在Java中能够影响到访问权限的只有private、public、protected(包括包访问权限)这几个关键字。
(2)能通过this访问静态成员变量吗?
public class Main {
static int value = 33;
public static void main(String[] args) throws Exception{
Main M1 = new Main();
M1.printValue();
}
private void printValue(){
int value = 3;
System.out.println(this.value);
}
}
这段代码输出结果为:33
this代表什么?this代表当前对象,那么通过new Main()来调用printValue的话,当前对象就是通过new Main()生成的对象。而static变量是被对象所享有的,因此在printValue中的this.value的值毫无疑问是33。在printValue方法内部的value是局部变量,根本不可能与this关联,所以输出结果是33。在这里永远要记住一点:静态成员变量虽然独立于对象,但是不代表不可以通过对象去访问,所有的静态方法和静态变量都可以通过对象访问(只要访问权限足够)。
(3)static能作用于局部变量么?
static是不允许用来修饰局部变量。不要问为什么,这是Java语法的规定
————————————————
版权声明:本文为Cappuccinooo原创文章,遵循 CC 4.0 BY-SA 版权协议。

浙公网安备 33010602011771号