@songhanshi
2020-09-18T06:39:03.000000Z
字数 5474
阅读 470
博客


示例代码
JVMCase.java
public class JVMCase {// 常量public final static String MAN_SEX_TYPE = "man";// 静态变量public static String WOMAN_SEX_TYPE = "woman";public static void main(String[] args) {Student stu = new Student();stu.setName("nick");stu.setSexType(MAN_SEX_TYPE);stu.setAge(20);JVMCase jvmcase = new JVMCase();// 调用静态方法print(stu);// 调用非静态方法jvmcase.sayHello(stu);}// 常规静态方法public static void print(Student stu) {System.out.println("name: " + stu.getName() + "; sex:" + stu.getSexType());}// 非静态方法public void sayHello(Student stu) {System.out.println(stu.getName() + "say: hello");}}
Student.java
public class Student {String name;String sexType;int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSexType() {return sexType;}public void setSexType(String sexType) {this.sexType = sexType;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}
JVM 的整个处理过程





初始化类的静态变量和静态代码块为用户自定义的值,初始化的顺序和 Java 源码从上到下的顺序一致。
示例 1
private static int i = 1;static {i = 0;}public static void main(String[] args) {System.out.println(i);}// print: 0
示例 2
static {i = 0;}private static int i = 1;public static void main(String[] args) {System.out.println(i);}// print: 1
示例 3 : 子类初始化时会首先调用父类的 () 方法,再执行子类的 () 方法
Parent.java
public class Parent {public static String parentStr = "parent static string";static {System.out.println("parent static fields");System.out.println(parentStr);}public Parent() {System.out.println("parent instance initialization");}}
Sub.java
public class Sub extends Parent {public static String subStr = "sub static string";static {System.out.println("sub static fields");System.out.println(subStr);}public Sub() {System.out.println("sub instance initialization");}public static void main(String[] args) {System.out.println("sub main");new Sub();}}
输出
parent static fieldsparent static stringsub static fieldssub static stringsub mainparent instance initializationsub instance initialization