java中static关键字的用法和注意点

关键字 基础用法 误区
static 修饰方法、变量

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

\color{red}{从这句话中提取出重点就是,被static修饰的(方法/变量)可以在不用创建对象的情况下被调用}
  static是静态变量,意味着在程序启动时只加载一次。如果一个程序多次访问一个不变值的时候,可以在前加上static关键字,这样可以提高程序运行的性能。

//打印日志
public static final Logger logger = LoggerFactory.getLogger(DataContainer.class);
//没加static的时候每个对象都要重复创建,造成资源浪费
public final Logger logger = LoggerFactory.getLogger(DataContainer.class);
  • 误区
    static关键字不会改变类中成员的访问权限(public、protected、private)
    非静态方法中可以通过this访问静态成员变量
    static是不允许用来修饰局部变量。不要问为什么,这是Java语法的规定。
package com.javabase.keywords;

public class KeyWord {
    static int id = 1;

    public static void main(String[] args) {
        new KeyWord().test();
    }

    private  void test() {
        int id = 2;
        System.out.println(id);
        System.out.println(this.id);
    }

}
结果:
2
1
  • 类加载的顺序
    先加载main方法中的静态方法,然后按顺序执行main中的代码。
    如果new一个对象时,它继承了父类对象,先执行父类对象中的静态方法,然后执行子类的静态方法,静态方法执行完,执行父类中的代码块,再执行子类中的代码块,再继续执行接下来的代码


    图左表示包含main的实例化过程,右图子类继承父类,实例化过程

你可能感兴趣的:(java中static关键字的用法和注意点)