一. JDK、JRE、JVM有什么区别?

  首先需要了解这三者的定义:

  • JDK:Java Development Kit(Java 开发工具包)的简称,提供了 Java 的开发环境和运行环境
  • JRE:Java Runtime Environment(Java 运行环境)的简称,为 Java 的运行提供了所需环境
  • JVM:Java Virtual Machine(Java虚拟机)的简称,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的,简单来说就是所有的 Java 程序都是运行在 JVM(Java 虚拟机)上的。

 区别与联系:JDK 提供了一整套的 Java 运行和开发环境,通常使用对象为 Java 的开发者,当然 JDK 也包含了 JRE;而 JRE 为 Java 运行的最小运行单元,一般安装在 Java 服务器上,所以 JDK 和 JRE 可以从用途上进行理解和区分。JVM 不同于 JDK 和 JRE,JVM 是 Java 程序运行的载体,Java 程序只有通过 JVM 才能正常的运行。

 衍生题目:Java 跨平台实现的原理是什么?
 首先需要了解Java程序的执行流程,如下图:
  Java 执行流程:Java 源代码(.java)-> 编译 -> Java 字节码(.class) ->通过 JVM(Java 虚拟机)运行 Java 程序。每种类型的服务器都会运行一个 JVM,Java 程序只需要生成 JVM 可以执行的代码即可,JVM 底层屏蔽了不同服务器类型之间的差异,从而可以在不同类型的服务器上运行一套 Java 程序。

二.Float在JVM的表达式及使用陷阱。

 请说出下题的执行结果,并说明理由。

float d1 = 423432423f;
float d2 = d1+1;
if(d1==d2){
	System.out.println("d1==d2");
}else{
	System.out.println("d1!=d2");
}

  输出结果:d1==d2
  原因解析:对于单精度的浮点型数据,在内存中是以科学计数法表示,而且最多保留小数点后第7位,故在本题中,d1和d2在内存中均表示为:4.2343242E7,所以输出d1和d2相等。

三.编程题:随机生成30-100之间的随机数。

package test;
import java.util.Random;

public class RandomDemo {
	public Integer random() {
		int min = 30;
		int max = 100;
		int result = (int)(Math.random()*(max-min))+min;
		return result;
	}

	public static void main(String[] args) {
		System.out.println(new RandomDemo().random());
	}
}

四.编程题:输出1-1000的质数。

package test;
/*
 * 输出1-1000内的质数
 */
public class PrimeNumber {

	public static void main(String[] args) {
		for(int i = 2;i<=1000;i++) {
			boolean flag = true;
			for(int j = 2;j<i;j++) {
				if(i % j == 0) {
					flag = false;
					break;
				}
			}
			if(flag) {
				System.out.println(i);
			}
		}
	}
}