java中的static关键字
static,翻译成中文即为静态的意思,那么也就是说static修饰的是与对象无关的。概括成一句话,static所修饰的成员是公共资源,即不属于任何一个类的成员,static所修饰的成员是只属于类自己的.
static可以修饰成员,修饰方法,修饰静态代码块。
1、修饰成员
静态成员变量:
static String name;
语法格式:
static 数据类型 变量名;
注意事项:
(1)、使用static修饰的变量叫静态变量
(2)、代码中对象还没有创建的时候,如果加载了类,static修饰的属性已经存在了,和对象没有关系。
2、修饰方法
静态方法
语法格式:
public static 返回值 方法的名字 (参数列表) {}
调用静态方法:
类.方法名字();
3、修饰代码块
语法格式: 静态代码块
static { 语句体 }
只要这个类加载,那么静态代码块一定会执行
执行顺序: 静态代码块-》构造代码块-》构造方法
重点:
“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来描述就是:
方便在没有创建对象的情况下来进行调用(方法/变量)。
很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
换言之,如果一个子方法没有被static修饰,那么就需要实例化一个对象,通过这个对象来调用该方法。
在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的:
在上面的代码中,由于print2方法是独立于对象存在的,可以直接用类名调用。
--------------------------------------------------------------------------------------------------------
关于子方法去掉static报错的原因:
由以上总结可知,如果一个方法被设为static,那么该方法的this指针将缺失,如果该子方法不加static,并且直接以“类.方法名”调用,该this指针不知道指向谁,那么就会报错,如果是static,那么该方法属于类,不属于任何一个对象,那么以“类.方法名”调用便不会出现任何问题。
以下为截图:
可以看到该方法不是static类,
那么是不能直接以类名.方法名调用的。将其改为static.
那么错误即消失
但是请注意,因为在static里不能调用非静态成员,也就是说里面的变量都需要是static的,有时会不方便,所以,建议直接设为非静态,在主函数里建立一个无用对象,如n0,这类显著特征的无用对象,来调用所有子方法。
标签:调用,静态,成员,关键字,static,修饰,方法 From: https://www.cnblogs.com/joranger/p/16705409.html