详解java中static关键字

226 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情

一、定义

static关键字表示是“静态”的意思,可以用于修饰成员属性、成员方法、代码块和内部类。《Java编程思想》中的写到:

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

二、用法

static主要作用于,创建独立于具体对象的属性或者方法,只要类被加载,就能通过类名来访问静态属性或者静态方法了。

image.png

  1. static修饰成员变量-静态变量
  2. static修饰成员方法-静态方法
  3. static修饰代码块-静态代码块
  4. static修饰内部类-静态内部类
package com.java.yanf.base;

import lombok.Data;

@Data
public class Girl extends Person {
    //实例变量
    private String finger;
    //静态变量
    private static String sex = "female";

    //静态代码块
    static {
        System.out.println("静态代码块加载完毕~");
    }

    public Girl() {
    }

    public Girl(String finger) {
        this.finger = finger;
    }

    /**
     * 静态方法
     */
    static void hi() {
        //静态方法里面不能调用实例方法 hello(),不用使用给静态变量finger;
        System.out.println("hi, " + Girl.sex);
    }

    /**
     * 实例方法
     */
    void hello() {
        //实例方法可以调用静态方法,但是静态方法中无法调用实例方法。
        hi();
        System.out.println("hello, " + finger + " finger " + Girl.sex);
    }

    public static void main(String[] args) {
        //静态方法无需new对象,可以直接通过类名.静态方法()进行调用
        Girl.hi();
        Girl girl = new Girl("pink");
        //实例方法必须实例化类对象后使用
        girl.hello();
    }
}

三、总结

  1. 静态变量和静态方法在内存中只存在一份,因为类只加载一次,加载类时,将静态方法和静态变量加载到方法区。
  2. 如果某个类型的所有对象的某个属性是一样的,可以将此相同的属性定义成静态属性,避免浪费内存空间。
  3. 类中的常量经常被定义为静态的。
  4. 静态方法不能被重写。
  5. 静态资源的加载顺序是严格按照静态资源的定义顺序来加载的。