何时为Java中的静态方法创建内存

ala*_*ish 1 java memory-management

我有两个类A和B.A类有主方法,B类有两个方法,即AddSub.

我的问题是,什么时候分配给B类的内存?

在线号.2或8; 当我导入课程或我打电话给班级时?

如果内存分配在第no行.2.在第号行.3我已导入java.util.*所以将为util包中的所有类分配对象.

如果内存分配在第no行.那么子方法怎么样?

A级

   1 package sample;
   2 import sample1.B;
   3 import java.util.*;
   4 public class A 
   5 {
   6    public static void main(String args[])
   7    {
   8        B.Add(3, 3);
   9    }
   10 }
Run Code Online (Sandbox Code Playgroud)

B级

package sample1;
public class B 
{
    public static int Add(int A,int B)
    {
        return A+B;
    }
    public static int sub(int A,int B)
    {
        return A-B;
    }
}
Run Code Online (Sandbox Code Playgroud)

jas*_*son 5

第二行不是转换为JVM字节码指令的代码.它只是编译器的一个声明,以帮助它解决简单的名称.

紧接第八行之前是for 将运行的最新可能时刻,并且静态初始化器(如果有)将运行.但是,执行for 可能会更早发生.该规范仅保证一个对象将被加载一次,并且不会比第一次使用之前加载一次,并且静态初始化器将在需要它们的第一个时刻之前和之前立即运行一次.ClassLoaderBBClassLoaderBClass

在第3行,我导入了java.util.*,因此将为util包中的所有类分配对象.

不,再次,在import声明中翻译成JVM字节码指令.它不会导致在运行时创建或加载任何对象.它只是编译器用来解析简单名称的声明.这是你可以说Set而不是java.util.Set.

如果内存分配在第8行,那么该sub方法呢?

将执行第8行之前运行的ClassLoaderfor B和static初始化程序,如果调用类的任何其他静态成员,它们将不会再次运行.BB