class Phone{
String pcolour;
String psize;
void telephone(String num){
System.out.println("calling");
}
void information(String text,String num){
System.out.println("send a message");
}
}
class Main{
public static void main(String []args){
Phone noble=new Phone;
noble.telephone("12306");
}
}
源文件创建完成后,由被编译为.class文件,java编译一个类时,若这个类所依赖的另一个类还未被编译,编译器会先编译这个被依赖的类,然后再引用,否则,就直接引用。编译过后的程序可在javaJVM上运行。JVM大致可分为三个模块:方法区、堆、栈。
方法区:加载class文件
堆:存放实例化对象
栈:方法的运行
在本例中,具体过程如下:编译java程序得到Main.class文件和Phone.class文件后,在命令行上输入java Main。JVM加载Main.class文件到方法区,在加载过程中,分析此类有一个特殊的方法main,并运行main方法。它的第一条命令为Phone noble=new Phone;JVM创建一个Phone对象,此时方法区中是没有Phone.class的信息的,JVM加载Phone.class,把它的类型信息放到方法区中,然后,JVM在堆区里为一个新的Phone分配实例内存,然后调用构造函数初始化Phone实例(这个Phone实例有着指向方法区的Phone.class的类型信息)。执行noble.telephone("12306");时,JVM根据noble找到Phone对象,根据Phone对象持有的引用定位到方法区中Phone.class的类型信息的方法表,获得telephone()函数的字节码地址。开始执行telephone()函数。