第一个类文件
public class Prime {

int n;

Prime(int n) {
this.n = n;
} boolean isPrime() {

boolean b = true;


return b;
}
}第二个类文件
import java.util.Scanner;public class Test_Prime {

public static void main(String[] args) {

System.out.println("input a integer plz: ");
int n = new Scanner(System.in).nextInt(); Prime prime = new Prime(n);

if (prime.isPrime())      {
System.out.println(n + "是一个素数");      
} else {
System.out.println(n + "不是一个素数");    
}
}}
其中第二个类中的 if(prime.isPrime) {}      中的prime,  isPrime是怎么和第一个类中的isPrime联系起来的     中间的执行过程是什么    谢谢

解决方案 »

  1.   

    看你都不结贴的 ,不过还是给你回答吧。
    你应该没读过虚拟机规范吧, 可以看下我的博客。下面的我不确定你可以看懂
    首先两个类被编译为class文件 ,运行main方法 首先加载类Test_Prime ,Test_Primeclass文件中保存有常量池,常量池就包括编译时确定的类字段方法等常量。所以prime 也被放在常量池中  ,经过类初始化过程,进入解析阶段,当然此阶段可以在类初始化之前。  解析阶段把字段引用解析为直接引用,
    这个时候 prime在常量池中指向的是一个Prime 类型的类实例,其实指向的是Prime class文件的常量池。
    类加载到初始化这一阶段结束进入对象初始化阶段 java虚拟机 为每一个方法都分配一个栈帧  ,执行main 方法 到
    Prime prime = new Prime(n);
    这一句的时候,  首先在堆上 创建prime 对象,然后在栈帧中保存一个对prime对象的引用,prime.isPrime()执行时,虚拟机为 isPrime()方法再生成一个栈帧,用于执行此方法 。就是这个过程想深入了解的话去读下 深入java虚拟机。
      

  2.   

    Prime(int n)是构造方法
    Prime prime = new Prime(n);创建了一个Prime实例
    prime.isPrime()调用这个实例的isPrime()方法你也可以通过Prime()构造一个实例,同样可以调用该实例的isPrime()方法
      

  3.   

    如果这两个类文件放在同一个包中的话是可见的,不需要导入便可以直接实例化,这就是呢可以写
    Prime prime = new Prime(n);
    的原因,如果在两个包中,需要导入,只要在一个包中的都可以直接引用,如果要底层的执行过程,看一楼就是
      

  4.   

    怎么用Prime() 构造一个实例
      

  5.   

    Prime prime = new Prime();