Day013 Static关键字详解
Posted 南方风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day013 Static关键字详解相关的知识,希望对你有一定的参考价值。
static 关键字
总结
- 有static修饰的变量叫静态变量,有static修饰的方法叫静态方法
- 静态变量和静态方法属于类,可以直接通过类名.变量名和类名.方法名调用;而非静态变量和非静态方法属于对象,必须用实例化后的对象调用。
- 静态变量和静态方法对于类而言在内存中是只有一个,能被该类的所有实例所共享。而非静态属性和非静态方法每个对象都对象其自己的。
- 静态变量和静态方法随类一起加载,而非静态属性和非静态方法在对象创建的时候才会去加载,因此静态变量和方法一定先加载,非静态变量和方法后加载。
public class Student {
private static int age;//静态变量
private double score;//非静态变量
public void run(){
}
public static void go(){
}
public static void main(String[] args) {
Student s1=new Student();
System.out.println(Student.age);
System.out.println(s1.age);
System.out.println(s1.score);
Student.go();
s1.run();
}
}
输出结果
0
0
0.0
静态代码块
静态代码块也属于类,跟类加载的时候一起执行,只执行一次。匿名代码块随对象创建的时候执行,每new一个对象,执行一次。new一个对象的执行顺序:静态代码块-->匿名代码块-->构造方法
public class Person {
{
//代码块(匿名代码块)
System.out.println("匿名代码块");
}
static {
//静态代码块
System.out.println("静态代码块");
}
public Person(){
System.out.println("构造方法");
}
}
public static void main(String[] args) {
Person p1 = new Person();
System.out.println("==================");
Person p2 = new Person();
System.out.println("==================");
Person p3 = new Person();
}
输出结果
静态代码块
匿名代码块
构造方法
==================
匿名代码块
构造方法
==================
匿名代码块
构造方法
-
可以看到静态代码块只执行了一次,执行顺序是先执行静态代码块,再执行匿名代码块,最后执行构造方法。
-
匿名代码块的作用:赋对象的一些初始值
静态导入包
举个例子,输出随机数
public class Test {
public static void main(String[] args) {
System.out.println(Math.random());
}
}
如果我不想写Math.random(),直接写random()要怎么写,这就要用静态导入包了
//静态导入包
import static java.lang.Math.random;
public class Test {
public static void main(String[] args) {
System.out.println(random());
}
}
如果在一个类中需要多次调用一个类的静态方法或者静态变量,使用静态导入包可以提高我们的编程效率。
//静态导入包
import static java.lang.Math.random;
import static java.lang.Math.PI;
public class Test {
public static void main(String[] args) {
System.out.println(random());
System.out.println(PI);
}
}
以上是关于Day013 Static关键字详解的主要内容,如果未能解决你的问题,请参考以下文章
零基础学Java并不难!详解Java中的static关键字(下)