终于有人能把Java中static的关键字解释清楚了

一、关键字static的特点

在《Java编程思想》中说:

static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。

这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来描述就是:方便在没有创建对象的情况下来进行调用(方法/变量)。
  很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。

1.static修饰变量

被static修饰的成员变量属于类,不属于某个对象(也就是说:多个对象访问或修改static修饰的成员变量时,其中一个对象将static成员变量进行了修改,其它的对象的static成员变量值跟着改变,即多个对象共享同一个static成员变量)

	public class Student {
	    static String name ;
	    int age ;
	    public static void main(String[] args) {
	        Student student1 = new Student();
	        Student student2 = new Student();
	        Student student3 = new Student();
	        //修改静态变量name的值
	        student1.name = "郭靖";
	        System.out.println(student1.name);
	        System.out.println(student2.name);
	        System.out.println(student3.name);
    }
    /*
    测试中对象直接访问静态变量会报红,但是不影响查询运行。
    */

在这里插入图片描述
测试中我们创建了三个对象,student1修改了静态变量name,
结果是student2,和student3的静态变量name的值和student1一样

2.static修饰方法

被static修饰的方法称为静态方法,静态方法中没有this,因为静态方法不属于任何对象,自然没有this,因此,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
在这里插入图片描述
age直接爆红,说明静态方法不能访问费静态变量以及方法,但是name可以,因为name是static修饰的静态变量。

在这里插入图片描述
play方法中没有错误,因为play不是静态方法,可以访问静态方法变量以及非静态方法和变量

3.static修饰代码块

static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

假如我们不用静态块,每次调用jia()这个方法,jvm都要为a,b开辟一块空间,这样会造成内存浪费。
在这里插入图片描述
当我们使用静态块,代码会变成:
在这里插入图片描述
当staticTest这个类加载时,静态块的内容就会被加载。并且只加载一次。这样就不会造成空间的浪费,并且能优化程序性能。

因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。

二、对关键字static的错误认识

1、Java中的static关键字不会影响到变量或者方法的作用域。在Java中能够影响到访问权限的只有private、public、protected、default这几个关键字。

2、对于静态方法来说没有this,但是我们在非静态方法中能够通过this访问静态方法成员变量。

静态成员变量虽然独立于对象,但是不代表不可以通过对象去访问,所有的静态方法和静态变量都可以通过对象访问(只要权限足够)。

3、在Java中是不允许使用static修饰局部变量的。这是Java语法的规定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值