JavaBasic
词法
>标识符 包含数字、字母、下划线(_)和美圆符号($),但是不能以数字作为开头,与C/C++语言不同的是,Java语言还可以将一些非拉丁字母包含在标识符中,
因为Java语言使用的是Unicode字符,所有的十六进制00C0以上的Unicode字符都可以用在标识符中。但是Java语言的关键字是不能用来作为标识符的
>关键字 abstract double int strictfp** boolean else interface super break extends long switch byte final native synchronized
case finally new this catch float package throw char for private throws class goto* protected transient const* if public try continue
implements return void default import short volatile do instanceof static while
>注释 1) C语言的传统注释“/*”和“*/”2) C++风格的注释 "//" 3)Java的注释方式,“/**”和“*/”,这种注释方式生成的注释将作为Javadoc文档保存。
操作符
>算术操作符
操作符 | 用途 | 优先级 | 结合性 |
++,-- | 自增,自减 | 2(仅次于括号) | 从右到左 |
+,- | 一元加,一元减 | 2 | 从右到左 |
*,/ | 乘,除 | 3 | 从左到右 |
% | 取余(求模) | 3 | 从左到右 |
+,- | 加,减 | 4 | 从左到右 |
>布尔运算与关系运算符
>,<,>=,<= | 测试相对大小 | 6 | 从左到右 |
== | 测试相等性 | 7 | 从左到右 |
!= | 测试不等性 | 7 | 从左到右 |
?: | 根据第一个操作数返回后两个操作数之一 | 13 | 从左到右 |
! | 非 | 2 | 从右到左 |
& | 布尔与 | 8 | 从左到右 |
^ | 异或 | 9 | 从左到右 |
| | 布尔或 | 10 | 从左到右 |
&& | 条件与 | 11 | 从左到右 |
|| | 条件或 | 12 | 从左到右 |
>位操作符
~ | 非(位求补) | 2 | 从右到左 |
<<,>> | 左移,右移 | 5 | 从左到右 |
>>> | 当作无符号右移 | 5 | 从左到右 |
& | 位和 | 8 | 从左到右 |
^ | 位异或 | 9 | 从左到右 |
| | 位或 | 10 | 从左到右 |
>赋值操作符
= | 赋值 | 14 | 从右到左 |
*= | 操作同时赋值 | 14 | 从右到左 |
/= | 操作同时赋值 | 14 | 从右到左 |
%= | 操作同时赋值 | 14 | 从右到左 |
+= | 操作同时赋值 | 14 | 从右到左 |
-= | 操作同时赋值 | 14 | 从右到左 |
>>= | 操作同时赋值 | 14 | 从右到左 |
<<= | 操作同时赋值 | 14 | 从右到左 |
>>>= | 操作同时赋值 | 14 | 从右到左 |
操作同时赋值 | 14 | 从右到左 | |
&= | 操作同时赋值 | 14 | 从右到左 |
|= | 操作同时赋值 | 14 | 从右到左 |
>特殊操作符
cast操作符将一种数据类型转换成为另一种数据类型,cast应写成把要校正操作数的类型名放在括号中 i=(int)l
如果给高精度的变量赋予一个低精度值,则不需校正; 优先级为2,结合性为从右到左结合
>Summary
优先级 运算符 结合顺序
1 []数组运算 .点运算符 ()调用方法 从左到右
2 ! ~ ++ -- +(一元加) -(一元减) ()强制类型转换 new 从右到左
3 * / % 从左到右
4 +(二元加) -(二元减) 从左到右
5 >> << >>> 从左到右
6 < <= > >= instanceof 从左到右
7 == != 从左到右
8 & 从左到右
9 ^ 从左到右
10 | 从左到右
11 && 从左到右
12 || 从左到右
13 ?: 从左到右
14 = += -= *= /= %= &= |= ^= <<= >>= >>>= 从右到左
常量
>整型常量 三种形式 十进制、八进制、十六进制
十进制数不能以0开头,这是因为八进制的数是以0开头的,而十六进制数以0x或0X开头
>浮点型常量 只能表示十进制数
两种 标准表示法和科学记数法; 浮点数又分为单精度数和双精度数
>布尔型常量 ture(或TURE)和false(或FALSE)
>字符型常量 一个单一的字符,其形式是由两个单引号引起来的一个字符
个单引号引起来的不能是单引号和反斜杠,即‘’和‘\’是不正确的写法
Tip Java语言中的字符是16位的Unicode字符,这与C/C++等语言是不一样的
>转义序列
\ 继续; \n NL 回车换行; \t HT 水平制表符; \b BS 后退一格; \r CR 回车不换行; \f FF 换页; \ 单引号; \\ \ 反斜杠; \" " 双引号;
\ddd 0ddd 八进制模式; \xddd 0xddd 十六进制模式; \udddd 0xdddd Unicode双字节字符
>字符串常量 由双引号引起来的一系列字符
与C/C++语言中不同的是,Java语言中的字符串不是通过字符数组来实现的,而是通过字符串类(即String类)来实现的
变量和数据类型
四种 基本数据类型、数组类型、类和接口类型
>基本数据类型可以分为四大类:布尔型、字符型、整数型和浮点型
1)类型 宽度 取值范围
byte 8位 -256到256
short 16位 -32768到32767
int 32位 -2147483648到2147483647
long 64位 -9223372036854775808到9223372036854775807
2)进制 整数 长整数
十进制 最大正整数 2147483647(2的31次方减1) 923372036854775807L(2的63次方减1)
八进制 最大正整数 077777777777(2的31次方减1) 07777777777777777777L(2的63次方减1)
最小负整数 020000000000(-2的31次方) 04000000000000000000L(-2的63次方)
十六进制 最大正整数 0x7fffffff(2的31次方减1) 0x7fffffffffffffffL(2的63次方减1)
最小负整数 0x80000000(-2的31次方) 0x8000000000000000L(-2的63次方)
浮点数能表示的数值从小到大分别是:负无穷大、负有限值、负零、正零、正有限值及正无穷大。其中正零和负零在进行数值比较的时候是相等的,
但仍有办法分辨这两个值,例如在进行1.0/0.0的时候会得到正无穷大的结果。其它非零非无穷大的有限值是以s*m*(2^e)来表示的
3)类型 s m e
float +1或-1 小于2的24次方的正整数 149到104的整数
double +1或-1 小于2的53次方的正整数 1045到1000的整数
4)界限
float 最大值 3640282347e+38f
非零最小值 1.40239846e-45f
double 最大值 1.79769313486231570e+308
非零最小值 4.940656458412465334e-324
5)特殊值
float 最大值 Float.MAX_VALUE 最小值 Float.MIN_VALUE
正无穷大 Float.POSITIVE_INFINITY 负无穷大 Float.NEGATIVE_INFINITY NaN Float.NaN
double 最大值 Double.MAX_VALUE 最小值 Double.MIN_VALUE
正无穷大 Double.POSITIVE_INFINITY 负无穷大 Double.NEGATIVE_INFINITY NaN Double.NaN
Tip 与C/C++语言中不同的是,在Java语言中,所有的基本数据类型都有预设值
基本数据类型 预设值
Boolean false
Char \u000
Byte (byte)0
Short (short)0
Int 0
Long 0L
Float 0.0L
Double 0.0d
Java与C/C++的比较
>指针 Java中取消了指针。指针的功能由参考(reference)所取代,这使得Java中对复杂数据结构的实现更加容易,因为用对象和对象数组实现复杂的数据结构更可靠
>函数 在Java中没有C/C++中应用广泛的函数,C/C++中通过函数实现的功能在Java中都是通过类和方法来实现的
>继承 Java中没有采用多重继承,但Java的Objective C协议接口能完成C++中多重继承的所有功能
>goto语句 Java中没有使用goto语句, 使用了多重break和continue语句(允许break和continue语句使用标签)实现C++种goto语句的功能
>联合和结构 在C++中有三种数据结构:联合、结构和类;Java中只有类,它可以实现上述三者的功能
>字符串 在C/C++中,字符串是通过字符数组实现的,但是由于数组的空间不是动态分配的, 容易出现越界错误; 在Java中,字符串是一类特定的对象,这使得字符串更具有一致性和可预见性。
>Typedef、Define和预处理器 Java中不需要#define语句、预处理器或者typedef,但需要头文件。在Java中一个类的信息必须包含在一个文件中,而C/C++中有关类的信息可能分散在多个文件中。
>数据类型的自动强制转换 在Java中强制一种类型的数据元素变成一种不太精确的数据类型需要编程人员采用预测方法
>变量 Java不能定义全局变量, 类中的公共、静态变量就相当于这个类的全局变量
>内存管理 在java中,所有的数据结构都是对象,通过运算符new分配内存并得到对象的使用权。无用内存回收机制保证了系统资源的完整,避免了内存管理不周而引起的系统崩溃。
>数据类型的一致性 在C/C++语言中,不同的平台上,编译器对简单的数据类型如int、float等分别分配不同的字节数, 在java中,对数据类型的位数分配总是固定的
---JavaBasic End---