一、Java语言的基本组成
1、关键字:被java语言赋予了特殊含义的单词。
特点:①.关键字所有字母都是小写的。
②.java中的关键字根据功能不同可以分成多种类型。
用于定义数据类型的关键字 | ||||
class | Interface | byte | short | int |
long | float | double | char | boolean |
void |
|
|
|
|
用于定义数据类型值的关键字 | ||||
true | false | null |
|
|
用于定义流程控制的关键字 | ||||
if | else | switch | case | default |
while | do | for | break | continue |
return |
|
|
|
|
用于定义访问权限修饰符的关键字 | ||||
private | protected | public |
|
|
用于定义类,函数,变量修饰符的关键字 | ||||
abstract | final | static | synchronized |
|
用于定义类与类之间关系的关键字 | ||||
extends | implements |
|
|
|
用于定义建立实例及引用实例,判断实例的关键字 | ||||
new | this | super | instanceof |
|
用于异常处理的关键字 | ||||
try | catch | finally | throw | throws |
用于包的关键字 | ||||
package | import |
|
|
|
其他修饰符关键字 | ||||
native | strictfp | transient | volatile | assert |
2、标识符:在程序中自定义的一些名称。
①.特点:由26个英文字母大小写、数字:0~9、符号:_$组成。
②.定义规则:
a.数字不可以开头。
b.不可以使用关键字。
3、Java语言的命名规范:
注意:java严格区分大小写。在起名字的时候尽量取的有意义,以提高阅读性。
①.类名、接口名:首字母一般都大写,如果由多个单词所组成,则每个单词的首字母都大写。
格式:XxxYyyZzz 例如:Demo、FactoryProxyMode
②.方法名(函数名)、变量名:一般小写。如果由多个单词组成,第一个单词小写,从第二个单词开始,每个单词的首字母都大写。
格式:xxxYyyZzz 例如:printStudentName、getAge
③.常量名:所有字母都大写。如果由多个单词组成,则每个单词之间用下划线连接。
格式:XXX_YYY_ZZZ 例如:COUNTRY、MY_FIRST_NAME
④.包名:所有字母都小写。由多个部分组成,每个部分之间用点“.”隔开(每个部分相当于一个文件夹目录)。
格式:xxx或者xxx.yyy.zzz 例如:package、cn.itcast.demo
4、常量:表示不可改变的数值。
①.java中常量的分类:
- 整数常量:所有的整数。
- 小数常量:所有的小数。
- 布尔型常量:较为特有,只有两个值:true和false。
- 字符型常量:将一个数字或者字母通过单引号(‘ ’)标识起来。
- 字符串常量:将一个或者多个字符通过双引号(“ ”)标识起来。
- null常量:只有一个值:null。
②.对于整数:java有三种表现形式。
进制:任何数据在计算机中都是以二进制的形式存在的。二进制早期是由电信号开关演变而来。
十进制:0~9,逢10进1。 例如:9
八进制:0~7,逢8进1,用0开头。 例如:056
十六进制:0~9、A~F,逢16进1,用0x开头表示。 例如:0x3C
5、进制之间的转换
- 正数的进制之间的转换
①.十进制转二进制:除2取余,逆向读数。
②.二进制转十进制:按权相加法。
③.二进制转十六进制:每4位二进制数变成一位十六进制数。
④.二进制转八进制:每3位二进制数变成一位八进制数。
总结:十进制转八进制,转十六进制跟转二进制的过程是一样的(反过来,二进制转8进制或者16进制,跟②的步骤是类似的),将十进制数除以8或者除以16,能整除就取0,否则取1,逆向读数。
更方便的方法:先将十进制数转成二进制数,然后把每3位或者每4位作为一位来分别表示8进制或者16进制中的一位。
- 负数的二进制
转换原理:其实就是该负数对应的正数二进制的补码形式。
小知识点:正数的最高位都是0,负数的最高位都是1。
【补码】①.正数:原码=补码(例如:6的原码和补码都是110)。
②.负数:原码的每一位取反(即反码)再加1。如下:
6、变量:数值可以不断变化的一块内存存储区域(相当于数学中的未知数)。
特点:①.每个变量在内存中必须要有自己名称(变量名)和类型(数据类型)。
②.该区域的数据可以在同一类型范围内不断变化。
③.变量需要声明才能使用。
作用:用来不断的存放同一类型的常量,并可以重复使用。
定义格式:数据类型变量名 = 初始值;
例如:int x=4;
***什么时候定义变量?***
当数据不确定的时候,需要对数据进行存储时,就定义一个变量来完成存储动作。
Java 语言的数据类型:基本数据类型(也称:原始数据类型)、引用数据类型。
注意:java中整数类型默认的是int类型,小数默认的是double类型。
7、数据类型转换
(1)自动类型转换(隐式类型转换):在运算过程中,当表示小范围数据类型的数值和表示大范围数据类型的数值相运算时,系统会自动将表示小范围数据类型的数值自动提升为高类型。
例如:byte b = 3; b = b + 2;则编译时会报错。因为2是int类型的数值,b是byte型的,b+2运算的结果会自动提升为int类型,再将结果赋值给byte类型b的话,就会提示丢失精度而报错。
自动类型转换的条件:
A.转换前的数据类型要与转换后的数据类型兼容。
B.转换后的数据类型表示的范围要比转换前的类型大。
(2).强制类型转换(显式类型转换):在运算过程中,如果想将两个不同数据类型的数值的运算结果强制成指定的数据类型。
格式:(要转换的数据类型)变量名;
例如:byte b = 3; b = (byte)(b+2);表示将b+2的运算结果由int类型强制转换为byte类型。
注意:
①.类型的转换只限该行语句,并不会影响原先定义的变量类型。
②.任何数据类型碰到String类型的变量或者常量之后都向String类型转换。
二、运算符
1、概念:运算符就是数学中的运算符号。Java中的运算符可以分为:算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符和三元运算符等等。
2、算术运算符:
运算符 | 运算 | 范例 | 结果 |
+ | 正号 | +3 | 3 |
- | 负号 | b=4;-b; | -4 |
+ | 加 | 5+5 | 10 |
- | 减 | 5-3 | 2 |
* | 乘 | 3*4 | 12 |
/ | 除 | 8/2 | 4 |
% | 取模(取余数) | 5%2 | 1 |
++ | 自增(前) | a=2;b=++a; | a=3;b=3 |
++ | 自增(后) | a=2;b=a++ | a=3;b=2 |
-- | 自减(前) | a=2;b=--a | a=1;b=1 |
-- | 自减(后) | a=2;b=a-- | a=1;b=2 |
+ | 字符串连接符 | “ab”+”cd” | “abcd” |
注意:
①.如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论。
②.对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
③.“+”除字符串相加功能外,还能把非字符串转换成字符串。
总结:
①.取模运算的规律:%左边如果小于右边,则结果是左边。左边等于右边,结果是0(能整除,结果就为0)。右边是1,结果也是0。
②.取模运算时。如果出现负数,则运算结果的符号就看被模数(%左边)。
③.自增(++)或者自减(--)时,如果++(或--)在前面,表示该变量先自增1(或减1),再赋值。而++(或--)在后面,则表示先赋值,再自增1(或减1)。
④.无论是a++(或++a)还是a--(或者--a),变量a的值始终都会自增1或者自减1。
3、转义字符:通过反斜线( \ )这个符号来转变后面字母或者符号的含义。
常见的转义字符:
\n:换行
\b:退格。相当于backspace键。
\r:回车键。Windows系统中回车符是由两个字符来表示的:\n\r
\t:制表符。相当于Tab键。
4、赋值运算符
运算符 | 范例 | 结果 |
= | int a=3; | a=3 |
+= | int a=4;a+=3; | a=7(相当于a=a+3) |
-= | int a=4;a-=3; | a=1(相当于a=a-3) |
*= | int a=4;a*=3; | a=12(相当于a=a*3) |
/= | int a=8;a/=2; | a=4(相当于a=a/2) |
%= | int a=5;a%=2; | a=1(相当于a=a%2) |
面试题:short s = 3; s = s+2;和s+=2;有什么区别?
答:s=s+2;编译时会报错,因为s是short类型,2是int类型,相运算的时候s会自动提升为int类型,再将结果赋值给s会丢失精度。而s+=2;编译时不会报错,因为它只做赋值运算,内部有一个自动转换的动作。
5、比较运算符
运算符 | 运算 | 范例 | 结果 |
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | false |
instanceof | 检查是否是某个类的对象 | “abc” instanceof String | true |
注意:
①.比较运算符的结果都是boolean型,要么是true,要么是false。
②.比较运算符中的“==”不能误写为“=”,两者是两个功能不同的运算符。
6、逻辑运算符
运算符 | 运算 | 范例 | 结果 |
& | AND(与) | false & true | false |
| | OR(或) | false | true | true |
^ | XOR(异或) | true ^ false | true |
! | Not(非) | !true | false |
&& | AND(短路与) | false && true | false |
|| | OR(短路或) | false || true | true |
①.作用:用于连接boolean类型的表达式。
②.逻辑运算符运算规律:
&:只要两边的boolean表达式结果,有一个为false,那么结果就为false。只有两边都为true,结果为true。
|:两边只要都一个为true,结果就为true。只有两边都为false,结果为false。
^:两边相同,结果为false。两边不同,结果为true。
③.&和&&以及|和||的特点:
&:无论左边是true还是false,右边都运算。
&&:当左边为false时,右边不运算。
|:两边都参与运算。
||:当左边为true,右边不运算。
7、位运算符
运算符 | 运算 | 范例 |
<< | 左移 | 3<<2=12 --> 3*2*2=12 |
>> | 右移 | 3>>1=1 --> 3/2=1 |
>>> | 无符号右移 | 3>>>1=1 --> 3/1=1 |
& | 与运算 | 6 & 3 = 2 |
| | 或运算 | 6 | 3 = 7 |
^ | 异或运算 | 6 ^ 3 = 5 |
~ | 反码 | ~6 = -7 |
总结:
左移<<:表示乘以2的倍数。左移之后,移出的高位被舍弃,空出的低位用0补。
右移>>:表示除以2的倍数。如果最高位为0,右移之后,移出的低位被舍弃,空出的高位用0补。如果最高位为1,右移后,空出的高位用1补。
无符号右移>>>:无论最高位是0还是1,右移后,空出的高位全部用0补。
反码~:对二进制的每位取反。
&运算:二进制位进行&运算,只有1&1时结果才为1,否则都为0。
|运算:二进制位进行|运算,只有0|0时结果才为0,否则都为1。
^运算:相同二进制进行^运算,结果是0。不同二进制进行^运算,结果是1。
(技巧:二进制的1就是true,0就是false)
注:一个数异或同一个数两次,结果还是这个数。 例如:6^3^3=6
8、三元运算符
①.概念:三个元素参与运算的符号。
②.格式:(条件表达式)?表达式1:表达式2;
如果条件表达式的结果为true,运算后的结果是表达式1。
如果条件表达式的结果为false,运算后的结果为表达式2。
例:int x = 1,y;
y = (x>1)?100:200;
System.out.println(“y=”+y); //结果为y=200
注意:
①.三元运算符运算后一定会有一个结果。
②.三元运算符的运算结果会根据表达式1和表达式2的值的数据类型而变化(类型自动提升)。
例如:
int x = 1,y;
y =(x>0)?'a':200;
System.out.println("y="+y); //结果y=97
9、运算符的优先级
优先级 | 运算符 | 结合性 |
1 | () | 从左至右 |
1 | [] | 从左至右 |
2 | !、+(正号)、-(负号) | 从右至左 |
2 | ~ | 从右至左 |
2 | ++、-- | 从右至左 |
3 | *、/、% | 从左至右 |
4 | +、- | 从左至右 |
5 | <<、>> | 从左至右 |
6 | >、>=、<、<= | 从左至右 |
7 | ==、!= | 从左至右 |
8 | & | 从左至右 |
9 | ^ | 从左至右 |
10 | | | 从左至右 |
11 | && | 从左至右 |
12 | || | 从左至右 |
13 | ?: | 从右至左 |