java[11]静态变量和静态方法、以及静态代码块

静态变量和静态方法

        有一个 Account(银行账户)类,假设它有三个成员变量: amount(账户金额)、

        interestRate(利率)和 owner(账户名)。在这三个成员变量中, amount 和 owner 会因人而异,对于不同的账户这些内容是不同的,而所有账户的 interestRate 都是相同的。amount 和 owner 成员变量与账户个体有关,称为“实例变量”, interestRate 成员变量与个体无关,或者说是所有账户个体共享的,这种变量称为“静态变量”或“类变量”。

        总结:实例变量会因人而异,静态变量是共有的

        静态变量和静态方法示例代码如下:

// Account.java文件

package com.a51work6;

public class Account {

    // 实例变量账户金额

    double amount = 0.0; ①

    // 实例变量账户名

    String owner; ②

    // 静态变量利率

    static double interestRate = 0.0668; ③

    // 静态方法

    public static double interestBy(double amt){

    //静态方法可以访问静态变量和其他静态方法

        return interestRate * amt; ⑤

    }

    // 实例方法

    public String messageWith(double amt) { ⑥

        /    /实例方法可以访问实例变量、实例方法、 静态变量和静态方法

        double interest = Account.interestBy(amt); ⑦

        StringBuilder sb = new StringBuilder();

        // 拼接字符串

        sb.append(owner).append("的利息是").append(interest);

        // 返回字符串

        return sb.toString();

    }

}

        static 修饰的成员变量是静态变量,见代码第③行。staitc 修饰的方法是静态方法,见代码第④行。相反,没有 static 修饰的成员变量是实例变量,见代码第①行和第②行;没有 staitc 修饰的方法是实例方法,见代码第⑥行。

         注意 静态方法可以访问静态变量和其他静态方法,例如访问代码第⑤行中的interestRate静态变量。实例方法可以访问实例变量、其他实例方法、 静态变量和静态方法,例如访问代码第⑦行interestBy静态方法。

         调用 Account 代码如下:

// HelloWorld.java文件

packagecom.a51work6;

public classHelloWorld {

    public static voidmain(String[] args) {

        // 访问静态变量

        System.out.println(Account.interestRate);①

        // 访问静态方法

        System.out.println(Account.interestBy(1000));②

        Account myAccount =new Account();

        // 访问实例变量

        myAccount.amount =1000000; ③

        myAccount.owner ="Tony"; ④

        // 访问实例方法

        System.out.println(myAccount.messageWith(1000));⑤

        // 通过实例访问静态变量

        System.out.println(myAccount.interestRate);⑥

    }

}

        调 用 静 态 变 量 或 静 态 方 法 时 , 可 以 通 过 类 名 或 实 例 名 调 用 , 代 码 第 ① 行Account.interestRate通过类名调用静态变量,代码第②行 Account.interestBy(1000)是通过类名调用静态方法。 代码第⑥行是通过实例调用静态变量。

        静态代码块:

        前面介绍的静态变量interestRate,可以在声明同时初始化,如下代码所示。

publicclass Account {

    // 静态变量利率

    staticdouble interestRate = 0.0668;

    ...

}

    //如果初始化静态变量不是简单常量,需要进行计算才能初始化,可以使用静态(static)

    //代码块,静态代码块在类第一次加载时执行,并只执行一次。示例代码如下:

//Account.java文件

packagecom.a51work6;

publicclass Account {

    // 实例变量账户金额

    doubleamount = 0.0;

    // 实例变量账户名

    Stringowner;

    // 静态变量利率

    staticdouble interestRate;

    // 静态方法

    publicstatic double interestBy(double amt) {

    // 静态方法可以访问静态变量和其他静态方法

    returninterestRate * amt;

}

// 静态代码块

    static { ①

        System.out.println("静态代码块被调用...");

    // 初始化静态变量

    interestRate= 0.0668; ②

    }

}

        上述代码第①行是静态代码块,在静态代码块中可以初始化静态变量,见代码第②行,也可以调用静态方法。

        调用 Account 代码如下:

//HelloWorld.java文件

packagecom.a51work6;

publicclass HelloWorld {

    publicstatic void main(String[] args) {

        AccountmyAccount = new Account(); ①

        // 访问静态变量

        System.out.println(Account.interestRate);②

        // 访问静态方法

        System.out.println(Account.interestBy(1000));

    }

}

        Account 静态代码块是在第一次加载Account 类时调用。上述代码第①行是第一次使用 Account 类,此时会调用静态代码块。




猜你喜欢

转载自blog.csdn.net/qq_38125626/article/details/81028364
今日推荐