docs/src/sidebar/kusen/javase.md
面向对象(封装,继承,多态);
平台无关性,具体表现在,Java 是一门“一次编写,到处运行(Write Once,Run any Where)”的编程语言,因此采用 Java 语言编写的程序具有很好的可移植性,Java 之所以能做到这一点的关键因为 Java 虚拟机的存在。在引入 JVM 之后,Java 语言在不同平台上运行不需要再重新编译。
可靠性、安全性;
支持多线程。C++ 没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持;
支持网络编程并且很方便。Java 语言诞生的起因之一就是为了简化网络编程而设计的;
编译与解释并存;
JDK 是 Java Development Kit 的缩写,它是功能齐全的 Java SDK,拥有 JRE 所拥有的一切,还有编译器 javac 和工具,如 javadoc 和 jdb 等命令。JDK 能够创建和编译 Java 程序。
JRE 是 Java Runtime Environment 缩写,它可以运行编译后的 Java 程序。其包括 Java 虚拟机(JVM)、Java 类库、java 命令和其他的一些基础构件。但是,它不能用于创建新程序。
JDK 包含 JRE,JRE 包含 JVM。
这个问题,面试官可以扩展提问,Java 是编译执行的语言,还是解释执行的语言?
Java 之所以可以“一次编译,到处运行”,一是因为 JVM 针对各种操作系统、平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class 文件)供 JVM 使用。因此,也可以看得出字节码对于 Java 生态的重要性。
之所以被称之为字节码,是因为字节码文件由十六进制值组成,而 JVM 以两个十六进制值为一组,即以字节为单位进行读取。在 Java 中一般是用 javac 命令编译源代码为字节码文件,一个.java 文件从编译到运行的示例如图所示。
Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同的计算机上运行。
可能在看这个问题之前,很多人和我一样并没有接触和使用过 OpenJDK。下面通过我收集到的一些资料对你解答一下这个容易被忽视的问题。
GitHub 上标星 10000+ 的开源知识库《二哥的 Java 进阶之路》第一版 PDF 终于来了!包括Java基础语法、数组&字符串、OOP、集合框架、Java IO、异常处理、Java 新特性、网络编程、NIO、并发编程、JVM等等,共计 32 万余字,500+张手绘图,可以说是通俗易懂、风趣幽默……详情戳:太赞了,GitHub 上标星 10000+ 的 Java 教程
微信搜 沉默王二 或扫描下方二维码关注二哥的原创公众号沉默王二,回复 222 即可免费领取。
Java 语言的数据类型分为两种:基本数据类型和引用数据类型。
1.基本数据类型
包括 boolean(布尔型)、float(单精度浮点型)、char(字符型)、byte(字节型)、short(短整型)、int(整型)、long(长整型)和 double (双精度浮点型)共 8 种,如下表所示。
| 基本类型 | 位数 | 字节 | 默认值 |
|---|---|---|---|
| int | 32 | 4 | 0 |
| short | 16 | 2 | 0 |
| long | 64 | 8 | 0L |
| byte | 8 | 1 | 0 |
| char | 16 | 2 | 'u0000' |
| float | 32 | 4 | 0f |
| double | 64 | 8 | 0d |
| boolean | 1 | false |
对于 boolean,官方文档未明确定义,它依赖于 JVM 厂商的具体实现。逻辑上是占用 1 位,但是实际中会考虑计算机高效存储等因素。
Java 虚拟机规范讲到:在 JVM 中并没有提供 boolean 专用的字节码指令,而 boolean 类型数据在经过编译后会在 JVM 中通过 int 类型来表示,此时 boolean 数据为 4 字节 32 位,而 boolean 数组将会被编码成 Java 虚拟机的 byte 数组,此时每个 boolean 数据为 1 字节占 8bit。
注意:
char a = 'h'char :单引号,String a = "hello" :双引号2.引用数据类型
建立在基本数据类型的基础上,包括数组、类和接口。引用数据类型是由用户自定义,用来限制其他数据的类型。另外,Java 语言中不支持 C++中的指针类型、结构类型、联合类型和枚举类型。
Java5 以前的 switch(expr) 表达式中,expr 只能是 byte、short、char、int。
从 Java 5 开始,Java 引入了枚举类型, expr 也可以是 enum 类型。
从 Java 7 开始,expr 还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。
Java 中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
break 结束当前的循环体
continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件)
return 程序返回,不再执行后面的代码(结束当前的方法 直接返回)