Java是一门编程语言。
前情提要,该部分主要描述Java从诞生到Java8正式发布期间,有关Java及中国软件行业的一些历史细节。
1990年,Sun(Stanford University Network,斯坦福大学校园网)公司启动绿色计划。该计划旨在开发一种编程语言,用于控制电视机机顶盒的运作。于是詹姆斯·高斯林等人开始开发 Java 语言的雏形,并将其命名为 Oak(橡树)。结果市场没啥反响,该语言开始服务家用电器业务,辗转反侧,依然不景气,最终,跟着浪潮进入互联网领域。
1992年,Oak的开发者觉得Oak不像是编程语言的名字,决定改名为Silk(丝绸),结果因为涉及专有名词没有审批通过。由于程序员喜欢喝咖啡,而印尼Java岛的咖啡很不错,于是更名为Java,寓意Java编程语言让写程序如同喝咖啡一样闲适。
1994年,高斯林在硅谷大会上演示JavaEE功能,实现动态网页效果,震惊世界,然后公司架设ftp服务器,供众人下载JDK。
1995年,Sun公司正式发布第一版Java。相继发布到版本1.4后,直接发布版本5,直到今天的版本15。
1997~1998年,中国开始出现网页。
2000年初,中国软件行业的寒冬,马化腾想卖掉QQ给新浪。要价100万。但新浪王志东只愿意出50万,最终没谈成。
2000年末,中国软件行业回暖,腾讯拿到风投,起死回生。
2003年5月10日,马云创办淘宝网。
2004~2005年,中国软件行业迅速发展,很好找工作。
2007年,中国的第一批智能手机诞生。
2009年,Java的桌面开发仍大有所为,往后开始进入互联网开发时代。
2014年3月18日,Java8发布。
Java,一种编程语言。
三者关系如下图:
┌─ ─ ─ ┌──────────────────────────────────┐ │ │ Compiler, debugger, etc. │ │ └──────────────────────────────────┘ JDK ┌─ ┌──────────────────────────────────┐ │ │ │ │ │ JRE │ JVM + Runtime Library │ │ │ │ │ └─ └─ └──────────────────────────────────┘ ┌───────┐┌───────┐┌───────┐┌───────┐ │Windows││ Linux ││ macOS ││others │ └───────┘└───────┘└───────┘└───────┘
用于定义数据类型的关键字 | ||||
---|---|---|---|---|
class | interface | |||
void | ||||
boolean | ||||
byte | short | int | long | |
float | double | |||
char |
用于定义数据类型值的关键字 | ||
---|---|---|
true | false | null |
用于定义流程控制的关键字 | ||
---|---|---|
if | else | switch |
case | default | while |
do | for | break |
continue | return |
在程序中自定义的名称。
// 单行注释 /* * 多行注释 */ /** * Java类简述 * @author Charlie * @version 1.0 */ /** * 方法简述 * @param value * @return data */
┌─ 整型:byte、short、int、long ┌─ 数值 < | └─ 浮点型:float、double ┌─ 基本 | │ 数据 < 字符:char │ 类型 | │ | 数据类型 < └─ 布尔:boolean │ │ ┌─ 类:class │ 引用 | │ 数据 < 接口:interface └─ 类型 | └─ 数组:[]
类型名称 | 关键字 | 占用内存 | 取值范围 |
---|---|---|---|
字节型 | byte | 1 字节 | -128~127 |
短整型 | short | 2 字节 | -32768~32767 |
整型 | int | 4 字节 | -2147483648~2147483647 |
长整型 | long | 8 字节 | -9223372036854775808L~9223372036854775807L |
单精度浮点型 | float | 4 字节 | ±3.4E+38F(6~7 个有效位) |
双精度浮点型 | double | 8 字节 | ±1.8E+308 (15 个有效位) |
字符型 | char | 2 字节 | ISO 单一字符集 |
布尔型 | boolean | 1 字节 | true 或 false |
为了用二进制表示文字(英文),设计者做出如下统计:26个英文字母,大小写52个;加上10 个数字达到62 个;考虑到还有特殊字符(如- ! @#$%〈& *{} |等)和不可见的控制字符(如换行、制表),必然超过64 个,所以至少需要7个位用于记载2^7=128个字符。为了避免传输或存储时带来的误差,所以预留了一个奇偶校验位。至此,一个八位的字节诞生。
ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码),是计算机发展初期较成熟的字符集。
这里提及它的原因是该表拥有128个字符,同上文《字节的由来》中提到的“7个位用于记载128个字符”相吻合。
ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 |
---|---|---|---|---|---|---|---|
0 | NUT | 32 | (space) | 64 | @ | 96 | 、 |
1 | SOH | 33 | ! | 65 | A | 97 | a |
2 | STX | 34 | " | 66 | B | 98 | b |
3 | ETX | 35 | # | 67 | C | 99 | c |
4 | EOT | 36 | $ | 68 | D | 100 | d |
5 | ENQ | 37 | % | 69 | E | 101 | e |
6 | ACK | 38 | & | 70 | F | 102 | f |
7 | BEL | 39 | , | 71 | G | 103 | g |
8 | BS | 40 | ( | 72 | H | 104 | h |
9 | HT | 41 | ) | 73 | I | 105 | i |
10 | LF | 42 | * | 74 | J | 106 | j |
11 | VT | 43 | + | 75 | K | 107 | k |
12 | FF | 44 | , | 76 | L | 108 | l |
13 | CR | 45 | - | 77 | M | 109 | m |
14 | SO | 46 | . | 78 | N | 110 | n |
15 | SI | 47 | / | 79 | O | 111 | o |
16 | DLE | 48 | 0 | 80 | P | 112 | p |
17 | DCI | 49 | 1 | 81 | Q | 113 | q |
18 | DC2 | 50 | 2 | 82 | R | 114 | r |
19 | DC3 | 51 | 3 | 83 | S | 115 | s |
20 | DC4 | 52 | 4 | 84 | T | 116 | t |
21 | NAK | 53 | 5 | 85 | U | 117 | u |
22 | SYN | 54 | 6 | 86 | V | 118 | v |
23 | TB | 55 | 7 | 87 | W | 119 | w |
24 | CAN | 56 | 8 | 88 | X | 120 | x |
25 | EM | 57 | 9 | 89 | Y | 121 | y |
26 | SUB | 58 | : | 90 | Z | 122 | z |
27 | ESC | 59 | ; | 91 | [ | 123 | { |
28 | FS | 60 | < | 92 | / | 124 | | |
29 | GS | 61 | = | 93 | ] | 125 | } |
30 | RS | 62 | > | 94 | ^ | 126 | ` |
31 | US | 63 | ? | 95 | _ | 127 | DEL |
计算机中的二进制数都是以补码的形式存在,这里我们简单说明一下补码的存在意义。
为了用二进制表示有符号的数字,设计者将最高位定义为符号位(0为正,1为负),那么就会出现正零和负零,而聪明的印度设计者将所有的负数统统取反加一,规定为补码。以一个字节为例,这样使原先的-0变成-128,而-1变成-127,以此类推,直到-127变成-1。完美解决正负零问题,并充分利用了每个位。
浮点数,顾名思义,它的小数点可以浮来浮去,由此联想到科学计数法,通过改变指数,从而改变小数点的位置。
那么,按照科学计数法的要求,以-0.15625为例,就是-1.5625×10-1 。
而在计算机中是以2进制存储数据的,那么就只能以2为底数,而不是10,如:1111(B)=23+22+21+20+0×2-1。根据IEEE 754规定,浮点数的表示方法为:± F×2E,其中
其内部存储结构为1个符号位,8个指数位(二进制中用阶码表示),23个有效数字位(二进制中用尾数表示)。
-0.15625在float中的表现形式为:-0.125×1.25=-0.001(B)×(1+0.01(B))
并不是所有的小数都可以无误差的转换成2进制,但具体丢失细节,本人暂无精力研究透彻。
只需注意存放需要计算的数据时,不要用浮点数,因为其精度丢失容易出现问题。
package cn.charliejohn.fundamantal; public class LearningArray { public static void main(String[] args) { // 容量需要初始化,并且无法扩容 int array[] = new int[10]; array[0] = 1; System.out.println(array.length); } } /** console log output * 10 */
package cn.charliejohn.fundamantal; import java.util.Scanner; public class LearningScanner { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String[] values = scanner.nextLine().split(" "); for (String value : values){ System.out.println(value); } scanner.close(); } } /** console log output * 1 0 1 0 * 1 * 0 * 1 * 0 */