当前位置 博文首页 > YHSevenWater的博客:Java关键字---static

    YHSevenWater的博客:Java关键字---static

    作者:[db:作者] 时间:2021-08-11 16:03

    static关键字的使用:可以用来修饰:属性、方法、代码块、内部类

    1、修饰属性:静态变量(或类变量)

    (1)属性,按是否用static修饰,分为:静态变量 vs 非静态变量(实例变量)
    实例变量:创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改;
    静态变量:创建了类的多个对象,多个对象共享同一个静态变量。当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。
    (2)static修饰属性的说明:
    ①静态变量随着类的加载而加载。可以通过“类.静态变量”的方式调用;
    ②静态变量的加载要早于对象的创建;
    ③由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中。
    (3)静态属性举例:System.out;Math.PI。

    2、使用static修饰方法:静态方法

    (1)随着类的加载而加载,可以通过“类.静态方法”的方式调用;
    (2)静态方法中,只能调用静态的方法或属性。非静态方法,既可以调用非静态的方法或属性,也可以调用静态的方法或属性。

    3、static注意点

    (1)在静态的方法内,不能使用this关键字、super关键字;
    (2)从声明周期的角度去理解静态属性和静态方法的使用。

    4、开发中,如何确定是否使用static?

    (1)属性
    ①属性是可以被多个对象所共享的,不会随着对象的不同而不同;
    ②常用来声明常量。
    (2)方法
    ①操作静态属性的方法,通常设置为static;
    ②工具类中的方法,习惯上声明为static的。比如:Math.Arrays、Collections。

    package com.java.oop4;
    
    /**
     * @description: 编写一个类实现银行账户的概念,包含的属性有“帐号”、“密码”、“存款余额”、“利率”、
     * “最小余额”,定义封装这些属性的方法。
     * 账号要自动生成。编写主类,使用银行账户类,输入、输出3个储户的上述信息。
     * 考虑:哪些属性可以设计成static属性。
     * @author: Fish_Vast
     * @Date: 2021/8/9
     * @version: 1.0
     */
    public class Circle {
        private int id;
        private String password = "000000";
        private int balance;
        private static float interestRate = 0.023f;
        private static int minBalance = 1;
        private static int init = 1001;
    	
    	//构造器实现账号id自增功能
        public Circle(){
            id = init ++;
        }
    	//重载的构造器用this();调用上面的构造器,id的自增功能得一直使用
        public Circle(String password, int balance){
            this();
            this.balance = balance;
            this.password = password;
        }
    
        public int getId() {
            return id;
        }
    
        public String getPassword() {
            return password;
        }
    
        public int getBalance() {
            return balance;
        }
    
        public static float getInterestRate() {
            return interestRate;
        }
    
        public static int getMinBalance() {
            return minBalance;
        }
    
        public static int getInit() {
            return init;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public static void setInterestRate(float interestRate) {
            Circle.interestRate = interestRate;
        }
    	//重写toString()方法,实现“以文本形式表达”的输出功能
        @Override
        public String toString() {
            return "Circle{" +
                    "id=" + id +
                    ", password=" + password +
                    ", balance=" + balance +
                    '}';
        }
    
    }
    
    package com.java.oop4;
    
    /**
     * @description:
     * @author: Fish_Vast
     * @Date: 2021/8/9
     * @version: 1.0
     */
    public class StaticTest {
        public static void main(String[] args) {
            Circle c1 = new Circle();
            Circle c2 = new Circle("000123",10000);
    
            System.out.println(c1);
            System.out.println(c2);
            System.out.println("年利率为:"+Circle.getInterestRate()*100+"%");
            System.out.println("最小余额为:"+Circle.getMinBalance()+"元");
        }
    }
    

    在这里插入图片描述

    cs