Java基础概念与常识的面试题-1
目录
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基本类型和包装类型的区别?
-
成员变量包装类型不赋值就是
null
,而基本类型有默认值且不是null
。 -
包装类型可用于泛型,而基本类型不可以。
-
基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被
static
修饰 )存放在 Java 虚拟机的堆中。包装类型属于对象类型,我们知道几乎所有对象实例都存在于堆中。 -
相比于对象类型, 基本数据类型占用的空间非常小。
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
来做的。
本文来自博客园,作者:taotooler,转载请注明原文链接:https://www.cnblogs.com/taolo/p/17225842.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?