最近在复习JAVA的内存知识。静态变量是加载在方法区的,内存分配即在方法区,当创建类的时候堆里有静态变量的指向地址,然后栈内的对象可以通过堆内地址找到该静态变量,为大家共用。
那静态方法呢?也是在方法区中分配内存吗?是随着类的加载而初始化的吗?但是我测试的如下运行代码,却并没有运行此静态方法。
package com.learn.java.cc;
class Static1{
static void sys1(){
System.out.println("hello!");
}
}
public class StaticDemo {
public static void main(String[] args){
Static1 s = new Static1();
}
}
求解?
原因:感谢各位的回答,在类中还有一个叫做静态代码块和构造代码块(即没有静态修饰的只被{}的代码),创建对象的时候会默认先加载静态代码块和构造代码块,这里的print会被打印出来,然后加载构造方法,而本类中的静态方法只是在调用的时候才被使用。
package com.learn.java.cc;
class Static1{
{
System.out.println("hello2!");
}
static{
System.out.println("hello1!");
}
static void sys1(){
System.out.println("hello3!");
}
}
public class StaticDemo {
public static void main(String[] args){
Static1 s = new Static1();
}
}
结果:
hello1!
hello2!