Java中static你真的了解吗?
今天来介绍一下static,在前面的博客中我介绍变量的时候我带着说了一些static,这里就不介绍在变量中的使用了。
-
static来修饰方法
public class Demo { public static void plaly(){ System.out.println("play...."); } public static void main(String[] args) { plaly(); } }
这样是直接可以在主方法中调用,这是由于被static修饰过的方法会随着类加载而被加载,就不需要通过对象来引用了,是不是非常方便。
-
下面介绍static对继承的影响
//父类 public class Pserson { public void eat(){ System.out.println("eat"); } public static void listen(){ System.out.println("listen"); } } //子类 public class Student extends Pserson { @Override public void eat() { System.out.println("son eat"); } }
可以看出这里子类重写的方法中没有
listen()
方法,这是因为被static修饰的方法,它不能被重写,它是一个静态的方法。 -
static在代码块中的使用
package com.wang.statictest; public class Demo { //代码块 { System.out.println("代码块"); } //静态代码块 static{ System.out.println("静态代码块"); } //构造方法 public Demo() { System.out.println("构造方法"); } public static void main(String[] args) { Demo demo = new Demo(); System.out.println("============="); Demo demo1 = new Demo(); } } 运行结果: 静态代码块 代码块 构造方法 ============= 代码块 构造方法
可以看出这个加载的先后顺序啊,静态代码块最先执行,然后是代码块,最后是构造方法。所以我们可以用静态代码块来初始化一些变量什么的,具体应用后面博客在介绍。我们可以看出在main方法中我们两次调用了运行结果中少了静态代码块,这是一个注意点,静态代码块随着类加载,所以只会被加载一次。
-
static可以修饰包名(这个是一个装逼的操作,实际应用很少)
public class Demo { public static void main(String[] args) { System.out.println(Math.random()); } } 上面的我们使用Math中的方法必须通过Math.来调用,懒惰的我真想直接random啊,这个可以实现的 import static java.lang.Math.random; public class Demo { public static void main(String[] args) { System.out.println(random()); } }
**
import static java.lang.Math.random;
加上这个相当于变成静态方法了,就可以直接调用了。**