Java 静态变量与静态方法的特性

Java 静态变量和静态方法的特性

类中的内容

  • 方法、属性:需要创建对象才能够调用

  • 静态属性、静态方法:可以通过类名直接调用,用static关键字修饰

  • 代码块:创建对象时自动执行一次

  • 构造方法

    • 无返回值,与类名同名

    • 格式:public 类名(/*参数*/){}

    • 创建对象时执行,括号可以用来传参

静态属性和静态方法都是唯一的,不会因为创建了多个对象而存在多份。

静态属性

考虑下面这两段代码,猜测Main.java的执行结果。

//Test.java
package Test;

public class Test {
    int a=0;
    static int b=0;
    {
        //代码块
        System.out.println("代码块执行");
        a+=1;
        b+=1;
    }
    Test(){
        //构造函数
        System.out.println("构造函数执行");
        a+=10;
        b+=10;
    }
}
//Main.java
package Test;

public class Main {
    public static void main(String[] args) {
        Test t1 = new Test();
        Test t2 = new Test();
        t1.a+=100;
        t1.b+=100;
        t2.a+=1000;
        t2.b+=1000;
        System.out.printf("t1.a=%d,t1.b=%d,t2.a=%d,t2.b=%d\n",t1.a,t1.b,t2.a,t2.b);
        Test.b+=10000;
        System.out.printf("t2.b=%d\n",t2.b);
    }
}

Main.java的执行结果如下

代码块执行
构造函数执行
代码块执行
构造函数执行
t1.a=111,t1.b=1122,t2.a=1011,t2.b=1122
t2.b=11122

根据上述结果可以发现,t1.at2.a是相互独立的。t1.b=t2.b=1122说明t1.bt2.b是同一个内存地址,因此,代码块和构造函数执行了两次(因为有2个对象),+100+1000两个操作针对的是同一个b。而且从t2.b=11122可知,Test.b也是针对的同一个b

静态方法

static关键字也可以修饰方法,让方法可以直接通过类名调用。

//Test.java
package Test;

public class Test {
    static void func1(String msg){
        System.out.println(msg);
    }
}
//Main.java
package Test;

public class Main {
    public static void main(String[] args) {
        Test.func1("静态方法可被直接调用");
        Test t = new Test();
        t.func1("也可以实例化后调用");
    }
}

Main.java执行结果

静态方法可被直接调用
也可以实例化后调用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值