java基础概念与常识面经
java语言有哪些特点
1.简单易学;
2.面向对象(封装,继承,多态);
3.平台无关性( Java 虚拟机实现平台无关性);
4.可靠性;
5.安全性;
6.支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);
7.支持网络编程并且很方便( Java 语言诞生本身就是为简化网络编程设计的,因此 Java 语言不仅支持网络编程而且很方便);
8.编译与解释并存;
java的平台无关性
1.什么是平台无关性,它的好处是什么?
平台无关性简单来讲就是“一次编译,到处执行”,用java创建的可执行二进制程序可以不加改变地作用于各种平台上。java程序可以作用在各种各样的设备上,甚至是一些嵌入式设备,如打印机,扫描仪,传真机等等。对于开发者而言,减少了开发和部署到多个平台的成本和时间,做到了一次编译,到处执行。
2.平台无关性是怎么实现的?
java实现平台无关性有三个重要角色:java语言规范,class文件,java虚拟机
先来说说java的编译过程。.java文件在程序员编写好以后,被javac转换成.class文件,而后.class文件被JVM转化为机器能识别的二进制文件,这一整套的过程就是平台无关性的主要实现过程。
然后来讲讲最重要的----java虚拟机。java具有平台无关性,但是java虚拟机平台有关。我们知道,不同的平台,硬件和操作系统肯定是有差别的,对于不同的硬件和操作系统,执行同一个指令的二进制编码肯定不一样。那么要想做到跨平台,就要实现对于同样的指令,编写出不同的二进制文件,让不同的硬件和操作系统识别,进而执行命令。而实现这个过程的东西就是java虚拟机。java虚拟机是平台有关的,不同的平台需要下载不同的java虚拟机,有了虚拟机,在不同的平台上就可以实现同一个.class文件,转化为不同的二进制文件,执行同样的指令。因此java能实现平台无关性,少不了jvm充当的桥梁的作用
再来看字节码的作用,各种不同平台的虚拟机都使用字节码来存储文件,jvm只与由自己的码组成的.class文件进行交互。.class文件可以在任何平台上编写,也可以被任何平台的虚拟机交互,这样就实现了java的平台无关性
最后是java的语言规范。举一个简单的例子,在C/C++中,不同的操作系统,如WIN16/32/64位系统中,int的字节长度都是不一样的,而java语言规范了所有的平台中,基本数据类型都是一致的,这也是实现平台无关性的必不可少的环节之一。
什么是JVM
jvm就是java虚拟机。JVM针对不同系统有着不同的实现,目的是使用相同的字节码可以转化为针对不同系统和硬件的不同的二进制文件,从而实现同一个指令在不同系统和硬件上执行。
那么字节码又是什么呢?字节码通俗讲就是.java文件被javac转化成的.class文件。JVM可以理解的代码就是字节码,它不面向任何处理器,只面向虚拟机。java语言通过字节码保留了解释性语言可移植的特点,又改进了解释性语言效率低的问题。所以java运行效率比较高,同时字节码又只面向JVM,不面向机器,所以在各种不同的平台上都可以无需重新编译地再次执行。
在.class转化到二进制编码的这一步,JVM类加载器先加载字节码文件,然后用解释器逐行进行解释执行。当然这种执行方式很慢,而且有的代码块会多次调用,如果逐行解释执行会效率很低。于是java又引进了JIT编译器,JIT属于运行时编译,JIT第一次编译后会将字节码对应的二进制编码保存下来,下次可以直接使用,效率更高。这也就是我们说的java是编译和解释共存的语言的原因。
什么是JRE,JDK
https://www.runoob.com/w3cnote/the-different-of-jre-and-jdk.html
1.简单解释一下JRE和JDK
JRE是java运行环境,只面向java使用者而不是开发者,只能运行java而不能进行开发。JRE是运行java的必要环境,它包含java虚拟机,java平台核心类和支持文件,不包含开发工具。
JDK提供了java的开发环境和运行环境,提供了javac编译器等工具,用于把.java文件转化为.class文件,也提供了JVM和runtime辅助包,用于解析class文件,得到机器语言文件。JDK是java的核心,包含运行环境(JRE)和java工具(tools.jar)以及java标准类库(rt.jar)
2.二者的区别是什么
如果只想运行java,只需要安装JRE,如果需要开发java,则需要JDK。当然这不是绝对的,有的时候下载的java文件中有jsp文件,而jsp文件要被servlet,需要JDK来编译servlet
为什么说java语言解释与编译共存
高级语言分为编译型和解释型两种。编译型语言是编译器将高级语言一次性翻译成机器语言,让机器识别并执行。解释型语言是解释器对高级语言进行逐行解释,每一行被解释成机器语言后立即执行。
对于java语言来说,我们知道java从高级语言变成机器语言一共有两步。第一步是把.java编译成.class文件,这一步是javac编译器编译完成的。第二步是JVM通过识别字节码(即.class文件),再用JVM里面的解释器进行解释,把字节码解释成机器语言后立即执行。因此java语言是一个解释与编译共存的语言。
Oracle JDK 和 OpenJDK 的对比
https://zhuanlan.zhihu.com/p/108675511
java和C++的区别
https://www.zhihu.com/question/22928284
java和C++都是面向对象的高级语言,都包含了继承,多态,封装。而java比C++多了一个东西叫接口
C++可以多继承,而java只能继承一个,java的类不能多继承,但是接口可以多继承
java有内存回收机制,不需要手动释放内存
java不提供指针来直接访问内存,内存更安全
import java 和 javax 有什么区别?
java和javax都是java中的一个包,import java是启动一个包,import javax是启动一个扩展包。两个包没有任何区别,不把扩展包中的代码移植到原始包中的唯一原因就是会破坏原有代码,使得部分原有代码无效,于是现在这两个包都包含在API中了

浙公网安备 33010602011771号