Java——static

一、概念

static单词意思是静止的,在Java语言中表示静态的。

二、作用

可以去修饰成员变量,成员方法,被static修饰的成员,称为类的成员(我们也可称为静态成员)。静态成员会随着类的加载而进入方法区内存(早于对象的创建),静态成员使用时可以直接用类名调用。而没有被static修饰的成员,称为实例成员,实例成员的使用必须要依赖对象取调用。

三、静态变量的定义

在成员变量前加上static修饰 即可

public class StaticTest {
    public static String city = "合肥";
}

四、静态变量的使用

静态变量有2种访问方式

  1. 用类名去调用(常用)
  2. 用对象取调用

分别如下

public class Abc {
    public static void main(String[] args) {
        // 用类名去调用
        System.out.println(StaticTest.city);   // 合肥
        
        // 用对象取调用
        StaticTest st = new StaticTest();
        System.out.println(st.city);   // // 合肥
    }
}    

五、静态变量内存机制

  • 静态变量在内存中只有一份数据在方法区中,不管在内存中该类有几个对象,静态变量的数据也只有一份数据,通常用来做数据共享。
  • 非静态变量(实例变量)随着对象在内存中创建而存在,该类有几个对象就有几份非静态变量的数据

六、静态变量的实际使用

静态变量可以用来实现一些静态常量工具类,比如

// 静态常量工具类
public class QuestionType {
    public static final String CHOICE = "选择题";
    public static final String JUDGE = "判断题";
    public static final String FILL = "填空题";
    public static final String SHORT = "简答题";
}

之后,再给比如试题选择类型的时候,就可以直接使用类名.变量名的方式来给试题定义类型,而不用手动书写,导致有可能的书写错误。

七、静态方法的定义

使用static关键字修饰的方法就是静态方法,如下

public class Calc {
    public static int max(int a, int b){
        return a > b ? a : b;
    }
}

八、静态方法的使用

静态方法在类加载到方法区后无需定义对象,直接用类名就可以调用。当然也可以使用对象调用,

  1. 用类名去调用(常用)
  2. 对象取调用
public class Abc {
    public static void main(String[] args) {
        // 类名调用
        System.out.println(Calc.max(5, 10));   // 10
        
        // 对象调用
        Calc math = new Calc();
        System.out.println(math.max(100, 200));   // 200
    }
}

九、什么情况下用静态方法

  1. 很多工具类内部定义的就是静态方法,例如数组工具类Arrays,数学工具类Math。
  2. 这样做的好处就是我们调用方法无需创建对象调用,直接类名调用就可以方便多了。
  3. 开发中如果我们需要将代码抽取形成工具,也可以参考这个方式。

十、静态方法访问成员时的特点

  1. 静态方法只能访问静态成员(静态变量、静态方法)
  2. 非静态方法可以访问非静态成员、可以访问静态(静态变量、静态方法)

为什么会是这样,因为从存在的时机来看静态成员先于非静态成员存在,因此后存在的可以访问先存在的成员(静态成员随着类加载而存在,非静态成员只有对象创建了才会存在)

十一、静态方法的示例

对一个字符串进行加密(简单使用)

// StringUtils.java
public class StringUtils {
    // 密码加密
    public static String encryption(String pwd){
        // 获取字符串中的每一个字符 String => char[]
        char[] chars = pwd.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            // 每个字符 +2
            chars[i] = (char)(chars[i] + 2);
        }
        return new String(chars);   // 返回新密码
    }
}

// Abc.java
public class Abc {
    public static void main(String[] args) {
        String pwd = "xlj123abc";
        // 使用静态方法工具类,对密码进行加密

        String newPwd = StringUtils .encryption(pwd);
        System.out.println(newPwd);   // znl345cde

    }
}

  

原文地址:https://www.cnblogs.com/xulinjun/p/14764302.html