#Java 简单介绍
-
Java 的优点:简单、可移植性
-
JDK (Java Development Kit):Java 开发工具包
-
JRE (Java Runtime Environment):Java 运行环境,只要具有 JRE,就可以运行 Java 代码,而与操作系统的类别无关
-
安装完 JDK 后,在电脑“编辑系统环境变量”---“环境变量”选项下,系统变量新建变量名
JAVA_HONE
变量值D:\Program Files\java\jdk-10.0.1
(这是我的 JDK 位置);系统变量找到Path
变量,“编辑”---“新建”%Java_Home%\bin
和%Java_Home%\jre\bin
;新建变量CLASSPATH
,变量值为.;%Java_Home%\bin;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar
。之后在 cmd 中测试命令 Java 和 Javac ,有东西输出之后就可以用 Javac 在 cmd 里编译 Java 程序了(生成 .class 文件),用Java [option] [主类名]
就可以运行程序了(java HelloWorld
而不是java HelloWorld.class
)。
#第一个程序 Hello World
|
|
注意 Java 区分大小写,参数中的 String 的 S 必须大写。
#基本数据类型
char
boolean
byte, short, int, long, float, double
#char(字符型)
首先补充编码的知识
ASCII码(美国信息交换标准代码,7-bits ASCII码) 七位码,共 128 个字符,它主要用于显示现代英语和其他西欧语言。
GB2312,是中国国家标准的简体中文字符集,双字节字符集。
GBK,GBK 字符集主要扩展了繁体中文字的支持,双字节字符集。
GB18030,GB 18030 标准采用单字节、双字节和四字节三种方式对字符编码。 单字节部分使用 0×00 至 0×7F 码(对应于 ASCII 码的相应码)。 双字节部分,首字节码从 0×81 至 0×FE,尾字节码位分别是 0×40 至 0×7E 和 0×80 至 0×FE。 四字节部分采用 GB/T 11383 未采用的 0×30 到 0×39 作为对双字节编码扩充的后缀,这样扩充的四字节编码,其范围为 0×81308130 到 0×FE39FE39。其中第一、三个字节编码码位均为 0×81 至 0×FE,第二、四个字节编码码位均为 0×30 至 0×39。 按照程序员的称呼,GB2312、GBK 到 GB18030 都属于双字节字符集(DBCS)。
Unicode(万国码、统一码、单一码),16 位,也就是两个字节代表一个字符。
UTF-8是一种 8 位的 unicode 字符集,编码长度是可变的,并且是 ASCII 字符集的严格超集,也就是说 ASCII 中每个字符的编码在 UTF-8 中是完全一样的。UTF-8 字符集中,一个字符可能是 1 个字节,2 个字节,3 个字节或者 4 个字节长。一般来说,欧洲的字母字符长度为 1 到 2 个字节,而亚洲的大部分字符则是 3 个字节,附加字符为 4 个字节长。
更多关于编码参考 wiki Character encoding
在 Java 中采用 Unicode 编码,所以 char a = 'a';
和 char b = '中'
一样都占两个字节(区别于 C 和 C++)。char c = '\u21fa'
表示转义字符,格式为 \u 加上 4 位 16 进制数。
#boolean(布尔型)
只有 true 和 false 两个值,区别于 C 和 C++。
在 C 和 C++ 中,bool 类型可以用数字赋值,非零即为真,零为假。但在 Java 中只有 boolean flag = true;
和 boolean flag = false;
#byte, short, int, long, float, double(数值型)
类型 | 存储要求 | 取值范围 | 备注 |
---|---|---|---|
byte | 1字节 | -128~127 | |
short | 2字节 | -32768~32767 | |
int | 4字节 | 超过21亿 | |
long | 8字节 | 很大很大 | 需要在数值后加后缀L |
float | 4字节 | 大约为±3.402E+38 | 需要在数值后加后缀F,有效位6~7位 |
double | 8字节 | 大约为±1.797E+308 | 需要在数值后加后缀D,有效位15位 |
float 和 double 类型表示的的数值是离散的,可能有一些小数就是无法表示,只能为近似值。不加 F 后缀的浮点数值默认为 double 类型。
float 和 double 不能做移位运算。整形移位运算相当于除或乘 2 的移的位数的次幂。-1 在计算机中存储形式为全一,无论移多少位都不变。
#对象和类
对象(哎)是现实世界中的一个实体。
类是具有相同特征的对象的属性的集合。
#类的声明
|
|
#类实例化为对象
|
|
#数据声明
没什么好说的。[变量类型] [变量名] = [初始值];
说一些命名的规则和习惯吧(提高代码可读性)。
- 必须是字母开头的由字母、数字、下划线组成的序列,区分大小写。虽然在命名可以使用$,但是不要使用。
- 类名使用 UpperCamelCase(大驼峰) 风格,即每个单词首字母都要大写。
- 方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase(小驼峰) 风格,即从第二个单词开始首字母大写。如:studentName
- 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
- 杜绝完全不规范的缩写, 避免望文不知义。
- ...
#函数声明
|
|
#参数传递
Java的函数参数传递只有一种方法:传值(call by value)
java 成员变量(成员变量就是方法外部,类的内部定义的变量)存储在堆中的对象里面;局部变量就是方法或语句块内部定义的变量,局部变量必须初始化,局部变量的数据存在于栈内存中,栈内存中的局部变量随着方法的结束而出栈。
例子:
|
|
结果是 swap1 并没有实现数值交换;swap2 实现了数值的变换。
分析:在 main 函数中,首先生成两个对象存储在堆中,并有引用变量 c1,c2 分别指向两个对象。在调用 swap1,main 函数的栈空间里复制 c1,c2 传递给函数,在函数中一波操作猛如虎,两个复制品的指向对象互换,然后函数结束,两个复制品出栈,然而原 c1 和 c2 的指向并没有改变。在 swap2 里,改的直接是存储在堆里的对象的变量,指向没有变化,但是内部的数值已经交换了。