Java每日一讲讲什么好_撩课-Java每天10道面试题第1天

1.简述JDK、JRE、JVM?

一、JDK

JDK(Java Development Kit) 是整个JAVA的核心,

包括了Java运行环境(Java Runtime Envirnment),

一堆Java工具(javac/java/jdb等)

和Java基础的类库(即Java API 包括rt.jar)。

JDK是java开发工具包,

基本上每个学java的人都会先在机器 上装一个JDK,

那他都包含哪几部分呢?

在目录下面有 六个文件夹、

一个src类库源码压缩包、

和其他几个声明文件。

其中,真正在运行java时起作用的

是以下四个文件夹:bin、include、lib、 jre。

有这样一个关系,JDK包含JRE,而JRE包 含JVM。

bin:最主要的是编译器(javac.exe)

include:java和JVM交互用的头文件

lib:类库

jre:java运行环境

二、JRE

JRE(Java Runtime Environment,Java运行环境)

包含JVM标准实现及Java核心类库。

JRE是Java运行环境,并不是一个开发环境,

所以没有包含任何开发工具(如编译器和调试器)

JRE是指java运行环境。

光有JVM还不能成class的 执行,

因为在解释class的时候

JVM需要调用解释所需要的类库lib。 (

jre里有运行.class的java.exe)

JRE ( Java Runtime Environment ),

是运行 Java 程序必不可少的

(除非用其他一些编译环境编译成.exe可执行文件……)

JRE的 地位就象一台PC机一样,

我们写好的Win64应用程序需要操作系统帮 我们运行,

同样的,我们编写的Java程序也必须要JRE才能运行。

三、JVM

JVM(Java Virtual Machine),

即java虚拟机, java运行时的环境,

JVM是一种用于计算设备的规范,

它是一个虚构出来的计算机,

是通过在实际的计算机上仿真模拟

各种计算机功能来实现的。

针对java用户,

也就是拥有可运行的.class文件包(jar或者war)的用户。

里面主要包含了jvm和java运行时基本类库(rt.jar)。

rt.jar可以简单粗暴地理解为:

它就是java源码编译成的jar包。

Java虚拟机在执行字节码时,

把字节码解释成具体平台上的机器指令执行。

这就是Java的能够“一次编译,

到处运行”的原因。

2.JDK、JRE、JVM三者的有什么联系和区别?

1.三者联系:

JVM不能单独搞定class的执行,

解释class的时候JVM需要调用解释所需要的类库lib。

在JDK下面的的jre目录里面

有两个文件夹bin和lib,

在这里可以认为bin里的就是jvm,

lib中则是jvm工作所需要的类库,

而jvm和 lib和起来就称为jre。

JVM+Lib=JRE。

总体来说就是,

我们利用JDK(调用JAVA API)开发了属于

我们自己的JAVA程序后,

通过JDK中的编译程序(javac)

将我们的文本java文件编译成JAVA字节码,

在JRE上运行这些JAVA字节码,

JVM解析这些字节码,

映射到CPU指令集或OS的系统调用。2.三者区别:

JDK和JRE区别:

在bin文件夹下会发现,

JDK有javac.exe而JRE里面没有,

javac指令是用来将java文件编译成class文件的,

这是开发者需要的,

而用户(只需要运行的人)是不需要的。

JDK还有jar.exe, javadoc.exe等等

用于开发的可执行指令文件。

这也证实了一个是开发环境,

一个是运行环境。

b.JRE和JVM区别:

JVM并不代表就可以执行class了,

JVM执行.class还需要JRE下的lib类库的支持,

尤其是rt.jar。

3、简述Java程序编译和运行的过程?

Java程序从源文件创建到程序运行要经过两大步骤:1、源文件由编译器编译成字节码(ByteCode);2、字节码由java虚拟机解释运行。

因为java程序既要编译同时

也要经过JVM的解释运行,

所以说Java被称为半解释语言

9780a043842ebce1a17f975361d2a325.png

第一步(编译):

创建完源文件之后,

程序先要被JVM中的java编译器

进行编译为.class文件。

java编译一个类时,

如果这个类所依赖的类还没有被编译,

编译器会自动的先编译这个所依赖的类,

然后引用。

如果java编译器在指定的目录下

找不到该类所依赖的类的 .class文件

或者 .java源文件,

就会报"Cant found sysbol"的异常错误。

编译后的字节码文件格式

主要分为两部分:

常量池和方法字节码。

常量池记录的是代码出现过的

(常量、类名、成员变量等)

以及符号引用(类引用、方法引用,成员变量引用等);

方法字节码中放的是各个方法的字节码。

第二步(运行):

java类运行的过程大概分为两个步骤:

(1)类的加载

(2)类的执行。

需要说明的一点的是:

JVM主要在程序第一次运行时主动使用类的时候,

才会立即去加载。

换言之,

JVM并不是在运行时就会把所有使用到的类

都加载到内存中,

而是用到,不得不加载的时候,

才加载进来,而且只加载一次!

4、请说出八种基础数据类型及字节大小?

1. byte8位2. short16位3. int32位4. long64位5. float32位6. double64位7. boolean1位8. char 16位

5.说说&和&&的区别?

&和&&都是逻辑运算符,

都是判断两边同时真则为真,否则为假;

但是&&当第一个条件不成之后,

后面的条件都不执行了,

而&则还是继续执行,

直到整个条件语句执行完为止。

6.float型float f=3.4是否正确?

答:

不正确;

精度不准确,

应该用强制类型转换,

如下所示:float f=(float)3.4

7.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

short s1 = 1; s1 = s1 + 1; s1+1运算结果是int型,

需要强制转换类型;short s1 = 1; s1 += 1;

可以正确编译,自动类型提升。

8.int 和 Integer 有什么区别?

Java 提供两种不同的类型:

引用类型和原始类型(或内置类型);

int是java的原始数据类型,

Integer是java为int提供的封装类。

引用类型和原始类型的行为完全不同,

并且它们具有不同的语义。

引用类型和原始类型具有不同的特征和用法,

它们包括:大小和速度问题,

这种类型以哪种类型的数据结构存储,

当引用类型和原始类型

用作某个类的实例数据时所指定的缺省值。

对象引用实例变量的缺省值为null,

而原始类型实例变量的缺省值

与它们的类型有关。

9.在JAVA中,如何跳出当前的多重嵌套循环?

在最外层循环前加label标识,

然后用break:label方法即可跳出多重循环。

ok:while(true){while(true){breakok;

}

}

10.使用嵌套的for循环打印九九乘法表。

public classtest {public static voidmain(String[] args) {for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {

System.out.print(j+ "*" + i + "=" + i * j + " ");

}

System.out.println();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值