Java基础研究系列之-static关键字你不知道的东西

2018-01-29 12:50:48来源:oschina作者:申文波人点击

分享

前两天在知乎上看到,static关键字可以用于导包,用Java也有两年了,这个特性竟然不知道,于是乎整理了一些资料对static关键字的所有用法归纳下:


1.static修饰变量


类的成员变量可以分为两种,一种是被static修饰的叫做静态变量或者类变量,一种是不被static修饰的叫做实例变量。两者之间的区别:


静态变量(类变量):


静态变量在内存中只有一个拷贝,JVM只会给其分配一次内存,静态变量在类初始化加载过程中会完成静态变量内存分配。静态变量在JVM内存中存储于方法区中。


实例变量:


实例变量每次创建一个类实例就会给实例变量分配一次内存,实例变量存在JVM的堆中。


还有种变量叫做局部变量,局部变量一般是方法中存储的变量,这种变量储存与JVM栈中,仅方法私有,随方法栈入栈出栈。


2.static修饰方法


static可以用于修饰类的方法,这种方法称为静态方法,静态方法属于类的,不需要实例化就可以使用,通常用于工具类中,可以直接通过类目.方法名来调用,静态方法在类的初始化过程中就分配内存,实例方法在实例化时才会分类内存。


3.static修饰代码块


static可以修饰静态代码块,被static修饰的静态代码块会在类初始化过程中被执行且只会被执行一次。说到这里就会有关于代码执行顺序的问题,Java中代码执行顺序是按照下列顺序执行:


静态块,main(),构造块,构造方法


具体的是:


父类静态代码块->子类静态代码块->main方法的代码->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法->顺序执行代码(包括普通代码块、同步代码块)


4.static静态导包


static静态导包的使用方法为import static [包名]


这样导入的包可以直接使用里面的静态变量或者静态方法,无需用类目.的方式去使用。例如:


import static java.lang.System.out;
import static java.lang.Integer.*;
/**
* Created by wenbo.shen on 2017/12/10.
*/
public class Main {
public static void main(String[] args) {
out.println(MAX_VALUE);
out.println(100);
}
}

微信扫一扫

第七城市微信公众平台