直接看代码:
定义了一个Student类:
package com.opp.demo09;
public class Student extends Person{
// 静态变量
private static String name = "芝麻干";
// 非静态变量
private int age = 18;
// 静态方法
public static void run(){
System.out.println("跑");
}
// 非静态
public void go(){
System.out.println("走");
}
public static void main(String[] args) {
System.out.println(Student.name);
System.out.println(new Student().age);
Student.run();
run();
new Student().go();
}
}
我先分别定义了静态变量和非静态变量:
来看看它们的区别:
相同的,再来看看静态方法和非静态方法
没有实例化会报一个不是静态方法的错误。
在新建一个Person类:
package com.opp.demo09;
public class Person {
// 2.再跑匿名代码块:可以通过这个来赋初始值
{
System.out.println("匿名代码块");
}
// 1.先跑静态方法且只执行一次
static {
System.out.println("静态代码块");
}
// 3.最后才跑构造方法
public Person() {
System.out.println("构造方法");
}
public static void main(String[] args) {
Person person = new Person();
System.out.println("========================");
Person person1 = new Person();
}
}
有新东西:
实例化对象后,运行结果:
第一次实例化类后,先运行的是静态代码块然后是匿名,最后才是构造方法。
第二次实例化类后 ,静态代码块不在运行了,顺序还是一样:
说明静态方法只执行一次,而且优先级很高
最后再来看一下静态导入包:
生成随机数和圆周率:
package com.opp.demo09;
// 静态导入包~
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);
}
}