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被称为半解释语言
第一步(编译):
创建完源文件之后,
程序先要被JVM中的java编译器
进行编译为.class文件。
java编译一个类时,
如果这个类所依赖的类还没有被编译, 编译器会自动的先编译这个所依赖的类,
然后引用。
如果java编译器在指定的目录下
找不到该类所依赖的类的 .class文件
或者 .java源文件,
就会报"Cant found sysbol"的异常错误。 编译后的字节码文件格式
主要分为两部分:
常量池和方法字节码。
常量池记录的是代码出现过的
(常量、类名、成员变量等)
以及符号引用(类引用、方法引用,成员变量引用等);
方法字节码中放的是各个方法的字节码。 第二步(运行):
java类运行的过程大概分为两个步骤:
(1)类的加载
(2)类的执行。
需要说明的一点的是:
JVM主要在程序第一次运行时主动使用类的时候,
才会立即去加载。
换言之,
JVM并不是在运行时就会把所有使用到的类
都加载到内存中,
而是用到,不得不加载的时候,
才加载进来,而且只加载一次!

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

1. byte                  8位

2. short                16位

3. int                  32位

4. long                 64位

5. float                32位

6. double               64位

7. boolean               1位

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){
break ok;
}
}

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

public class test {
public static void main(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();
}
}
}

撩课-Java每天10道面试题第1天的更多相关文章

  1. 撩课-Java每天10道面试题第7天

    撩课Java+系统架构 视频 点击开始学习 61.什么是并发修改异常? 什么是并发修改异常: 当我们在遍历实现了collection接口 与iterator接口的集合时(List.Set.Map), ...

  2. 撩课-Java每天10道面试题第4天

    撩课Java+系统架构 视频 点击开始学习 31.静态变量和实例变量的区别? 静态变量也叫类变量, 这种变量前加了static修饰符. 可以直接用类名调用, 也可以用对象调用, 而且所有对象的同一个类 ...

  3. 撩课-Java每天10道面试题第6天

    51.HashMap的实现原理 HashMap的主干是一个Entry数组. Entry是HashMap的基本组成单元, 每一个Entry包含一个key-value键值对. HashMap基于hashi ...

  4. 撩课-Java每天10道面试题第5天

    41.Iterator.ListIterator 和 Enumeration的区别? 迭代器是一种设计模式, 它是一个对象, 它可以遍历并选择序列中的对象, 而开发人员不需要了解 该序列的底层结构. ...

  5. 撩课-Java每天10道面试题第3天

    21.final, finally, finalize的区别 1.final修饰符(关键字). 被final修饰的类, 就意味着不能再派生出新的子类, 不能作为父类而被子类继承. 因此一个类不能既被a ...

  6. 撩课-Java每天10道面试题第2天

    11.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面, 以便更充分地注意与当前目标有关的方面. 抽象并不打算了解全部问题,而只是选择其中的一部分, 暂时不用部分细 ...

  7. 撩课-Java每天5道面试题第10天

    撩课Java+系统架构 视频 点击开始学习 81.Servlet的会话机制? HTTP 是一种无状态协议, 这意味着每次客户端检索网页时, 都要单独打开一个服务器连接, 因此服务器不会记录下 先前客户 ...

  8. 撩课-Java每天5道面试题第13天

    撩课Java+系统架构点击开始学习 96.JDBC操作数据库的步骤 ? .加载数据库驱动 .创建并获取数据库链接 .创建jdbc statement对象 .设置sql语句 .设置sql语句中的参数(使 ...

  9. 撩课-Java每天5道面试题第15天

    撩课Java+系统架构点击开始学习 106.什么是Hibernate的并发机制?怎么去处理并发问题? a.Hibernate的Session对象是非线程安全的, 对于单个请求,单个会话, 单个的工作单 ...

随机推荐

  1. J - Judge(快速幂)(同余定理)

    J - Judge   Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Submit S ...

  2. leecode刷题(18)-- 报数

    leecode刷题(18)-- 报数 报数 描述: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 1112 ...

  3. 自定义JSON返回字段

    今天看到一篇文章,里面介绍了如何自定义返回json字段,感觉挺好用的,这里学习一下. 实现工具类: /** * @author fengzp * @date 17/2/20上午10:34 * @ema ...

  4. week 4 Vocabulary in paper

    1.Using action verbs 1.1 deffenence between action verbs and fuzzy verbs Action verbs(strong verbs) ...

  5. JSP页面开发知识点整理

    刚学JSP页面开发,把知识点整理一下. ----------------------------------------------------------------------- JSP语法htt ...

  6. 阿里巴巴前端面试分享-社招(p6)

    借鉴了朋友的阿里面试经:(社招前端2年经验) 电话面 简单自我介绍, 做过哪些项目, 使用哪些技术栈 ? 如何看待前端框架选型 ? vue的如何实现双向绑定的 ? react 虚拟DOM 是什么? 如 ...

  7. 【初探】java性能火焰图的生成

    前言 开始之前,你需要准备的环境: Linux系统机器或者虚拟机一台,里面需要安装的软件:git.jdk.perl. 简单介绍: java性能分析火焰图的所做的事情就是能够分析出java程序运行期间存 ...

  8. 遇见Navicat 2003-can't connect to MYSQL server on 'localhost'(10061)

    学习过程中难免遇到问题,今天就遇到了Navicat 2003-can't connect to MYSQL server on 'localhost'(10061),navicat报错,我就纳闷以前都 ...

  9. dwz+ssh Http status: 200 OK

    问题描述,用超链接跳转页面的时候报这个错,原因是超链接的target没有设置对, 跳转页面应该用 target="navTab", 我原先用 target="navTab ...

  10. 图示NP, P, NP-Complete和NP-Hard问题

    P问题是一类可以通过确定性图灵机(以下简称图灵机)在多项式时间(Polynomial time)内解决的问题集合. NP问题是一类可以通过非确定性图灵机( Non-deterministic Turi ...