Java基础概念与常识的面试题-1

目录

1 Java语言的特点

2 JVM、JDK、JRE

3 什么是字节码?采用字节码的好处是什么?

4 为什么说Java语言“编译与解释共存”?

5 Java和C++的区别

6 标识符和关键字的区别?

7 什么是方法的返回值?方法有哪几种类型?

8基本类型和包装类型的区别?

9什么是自动拆装箱?

10 为什么浮点数运算的时候会有精度丢失的风险?


1 Java语言的特点

1 简单易学 ​ 2 面向对象(封装、继承、多态) ​ 3 平台无关性(Java虚拟机实现平台无关性) ​ 4 支持多线程 ​ 5 可靠性,安全性 ​ 6 支持网络编程并且很方便 ​ 7 编译与解释并存

2 JVM、JDK、JRE

JVM:是运行Java字节码的虚拟机。JVM有针对不同系统的特定实现(windows、Linux、macOS),目的是使用相同的字节码,它们能得出相同的结果。字节码和不同系统的jvm实现是Java语言“一次编译,随处可以运行的关键”。 ​ JDK是Java开发工具的缩写,拥有JRE所拥有的一切,还有编译器(javac)和工具(如javadoc和jdb)。它能够创建和编译程序。 ​ JRE是Java运行时环境。它时运行已编译Java程序所需的所有内容的集合,包括Java虚拟机,Java类库、Java命令和其他一些基础构建。但是它不能创建新程序。 ​ 总结:如果只是为了运行一下Java程序只需安装jre包即可,如若需要进行一些Java编程,那么就需要安装jdk,但有时也不绝对,有时候不需要开发Java程序仍需要安装jdk。例如,如果要使用jsp部署web应用程序,因为应用程序服务器会将jsp转换为Java servlet,并且需要jdk来编译servlet。

3 什么是字节码?采用字节码的好处是什么?

在Java语言中,jvm可以理解的代码就叫字节码(扩展名为.class的文件)。它不面向任何特定的处理器,只面向虚拟机。 ​ 优点:1 解决了传统解释型语言执行效率低的问题 ​ 2 同时保留了解释型语言可移植性的特点;Java程序运行相对来说是高效的

4 为什么说Java语言“编译与解释共存”?

解释: ​ 1 编译型:编译语言会通过编译器将源代码一次翻译成可被该平台执行的机器码。一般情况下,编译语言的执行速度比较快,开发效率比较低。常见的编译性语言有C、C++、Go、Rust。 ​ 2 解释型:解释型语言会通过解释器一句一句的将代码解释为机器代码后再执行。执行效率慢,开发快。如:Python、javaScript、PHP等 ​ 然而Java需要经过先编译,后解释两个步骤。先编译成字节码文件(.class),然后字节码再由Java解释器执行。故而说Java语言”编译与解释共存“。

5 Java和C++的区别

1 Java不提供指针来访问内存,程序更加安全 ​ 2 Java的类是单继承的,C++支持多重继承;虽然Java类不可以多继承,但接口可以多继承。 ​ 3 Java有自动的内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存。 ​ 4 C++支持方法重载和操作符重载,但Java只支持方法重载。

6 标识符和关键字的区别?

通俗来说标识符就是一个名字 ​ 关键字是被赋予特殊含义的标识符

7 什么是方法的返回值?方法有哪几种类型?

方法的返回值是指我们获取到某个方法体中的代码执行后产生的结果!返回值的作用是接收结果,使得它可以用于其他的操作. ​ 1 无参数返回值方法

public void f1() {
    //......
}
// 下面这个方法也没有返回值,虽然用到了 return
public void f(int a) {
    if (...) {
        // 表示结束方法的执行,下方的输出语句不会执行
        return;
    }
    System.out.println(a);
}

2 有参数无返回值的方法

public void f2(Parameter 1, ..., Parameter n) {
    //......
}

3 有返回值无参数的方法

public int f3() {
    //......
    return x;
}

4 有返回值有参数的方法

public int f4(int a, int b) {
    return a * b;
}

8基本类型和包装类型的区别?

  1. 成员变量包装类型不赋值就是 null ,而基本类型有默认值且不是 null

  2. 包装类型可用于泛型,而基本类型不可以。

  3. 基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被 static 修饰 )存放在 Java 虚拟机的堆中。包装类型属于对象类型,我们知道几乎所有对象实例都存在于堆中。

  4. 相比于对象类型, 基本数据类型占用的空间非常小。

9什么是自动拆装箱?

  • 装箱:将基本类型用它们对应的引用类型包装起来;

  • 拆箱:将包装类型转换为基本数据类型

    Integer i = 10;  //装箱
    int n = i;   //拆箱

    在字节码中装箱其实就是调用了 包装类的valueOf()方法,拆箱其实就是调用了 xxxValue()方法。

    因此,

    • Integer i = 10 等价于 Integer i = Integer.valueOf(10)

    • int n = i 等价于 int n = i.intValue();

  • 注意:如果频繁拆装箱的话,也会严重影响系统的性能。我们应该尽量避免不必要的拆装箱操作。

10 为什么浮点数运算的时候会有精度丢失的风险?

浮点数运算精度丢失代码演示:

float a = 2.0f - 1.9f;
float b = 1.8f - 1.7f;
System.out.println(a);// 0.100000024
System.out.println(b);// 0.099999905
System.out.println(a == b);// false

计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。

BigDecimal 可以实现对浮点数的运算,不会造成精度丢失。通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过 BigDecimal 来做的。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kokotao

你的鼓励就是的创作的最大动力,

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值