一. 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);
}
}
}
}