static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。
总结一句话就是:
方便在没有创建对象的情况下来进行调用(方法/变量)。
Static关键字特点:
1.被static所修饰的成员是随着字节码文件对象的加载而加载,所以是优先于对象存在于内存中(也就是说,类被加载了,就可以调用类中的静态方法)
2.被static所修饰的成员被该类下所有的对象所共享
3.被static所修饰的成员可以通过类名.直接调用
Static关键字注意事项:
1:静态方法中不能有this关键字
2:静态方法中可以调用静态成员变量和静态成员方法,但是不可以调用非静态的成员变量和调用方法。
非静态方法中可以调用静态的成员变量和成员方法,也可以调用非静态的成员变量和成员方法。
3:静态方法和非静态方法是不可以重名的。
4:静态成员变量也是可以通过this来调用的,但是会报警告:The static field person.age should be accessed in a static way
下面我们在代码中测试一下:
首先我们定义一个person类:
class person{ static int age; static int weight; static int height; static String name; /** * 构造方法 */ public person(int a,int w,int h,String n) { // 静态成员变量也是可以通过this来调用的,但是会报警告:The static field person.age should be accessed in a static way this.age = a; // 正常调用 weight = w; height = h; name = n; } /** * 自我介绍 */ public void introduce() { System.out.println("我是非静态方法"); System.out.println("我叫:"+name); System.out.println("我的身高:" + height); System.out.println("我的体重:" + weight); System.out.println("我的年龄:" + age); } /** * 自我介绍 */ public static void introduceStatic() { System.out.println("我是静态方法"); System.out.println("我叫:" + name); System.out.println("我的身高:" + height); System.out.println("我的体重:" + weight); System.out.println("我的年龄:" + age); } }
类中有四个静态的成员变量,age,name,hight,weight。
有构造方法,有一个非静态方法introduce,静态方法introduceStatic。
下面我们先来调用静态成员变量及静态方法
public static void main(String[] args) { // 1:直接调用静态方法 person.introduceS(); }
输出:
我是静态方法
我叫:null
我的身高:0
我的体重:0
我的年龄:0
因为我们没有给person类的静态成员变量赋值,因此我们的静态方法输出的都是0
接下来,我们给静态变量赋值,再次调用静态方法
public static void main(String[] args) { // 1:直接调用静态方法 person.introduceS(); // 2:给person类静态成员变量赋值,再调用静态方法 person.age = 18; person.weight = 100; person.height = 180; person.name = "玛丽亚"; person.introduceS(); }
输出:
我是静态方法
我叫:玛丽亚
我的身高:180
我的体重:100
我的年龄:18
下面我们再实例化一下person类,调用一下非静态方法:
public static void main(String[] args) { // 1:直接调用静态方法 person.introduceS(); // 2:给person类静态成员变量赋值,再调用静态方法 person.age = 18; person.weight = 100; person.height = 180; person.name = "玛丽亚"; person.introduceS(); // 3:调用非静态方法 person per = new person(28, 108, 168, "格洛瑞亚"); per.introduce(); }
输出:
我叫:格洛瑞亚
我的身高:168
我的体重:108
我的年龄:28
最后,我们玩点不一样的,我们在实例化person类之后,再次给类的静态成员变量赋值,看我们再调用非静态方法的时候是什么结果:
public static void main(String[] args) { // 1:直接调用静态方法 person.introduceS(); // 2:给person类静态成员变量赋值,再调用静态方法 person.age = 18; person.weight = 100; person.height = 180; person.name = "玛丽亚"; person.introduceS(); // 3:调用非静态方法 person per = new person(28, 108, 168, "格洛瑞亚"); person.age = 20; person.weight = 120; person.height = 188; person.name = "福特儿"; per.introduce(); }
输出:
我是非静态方法
我叫:福特儿
我的身高:188
我的体重:120
我的年龄:20
输出的结果是我们赋值之后的值。
以上大概就是java中static的基本使用。
有好的建议,请在下方输入你的评论。