1.关键字
定义:被Java语言赋予了特殊含义的单词
特点:关键字中所有字母都为小写(这是Java的书写规范之一)
2.标识符
标识符就是在程序中自定义的一些名称。由26个英文字母大小写,数字:0-9符号:_ $ 组成。
定义合法标识符规则:
(1)数字不可以开头
(2)不可以使用关键字
Java严格区分大小写,此外起名字的时候尽量有意义,提高阅读性
*注意:main也是一个标识符,但是JVM认识它和它的格式,它并不是关键字
3.注释
用于注解说明解释程序的文字就是注释。注释提高了代码的阅读性。对于初学者来说应该养成习惯先写注释,再编写代码。三种注释方式:
3.1 单行注释
//单行注释
//后到本行结束的所有字符会被编译器忽略;
3.2 多行注释
/*
多行注释
多行注释
多行注释
多行注释
……
这之间的所有字符都会被编译器忽略
*/
3.3 文档注释
/**
文档注释
……
这之间的所有字符都会被编译器忽略
*/
这种注释方式是Java特有的,对于文档注释,其中注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
*注意:多行注释和文档注释不可以嵌套
4.常量与变量
4.1 常量
在Java中,利用关键字final来指示常量,关键字final表示这个变量只能被赋值一次,一旦被赋值之后,就不能再更改,习惯上,常量名使用全大写。(需要注意,类常量的定义位于main方法的外部。以便于在同一个类的其他方法中也可以使用这个常量。)
(1)整数常量。所有整数
(2)小数常量。所有小数
(3)布尔(boolean)型常量。较为特有,只有两个数值。true与false。
(4)字符常量。将一个数字字母或者符号用单引号( ' ' )标识。
(5)字符串常量。将一个或者多个字符用双引号(“ ”)标识。
(6)null常量。只有一个数值就是:null.
4.2 变量
变量的概念:
l 内存中的一个存储区域
l 该区域有自己的名称(变量名)和类型(数据类型)
l 该区域的数据可以在同一类型范围内不断变化
为什么要定义变量?
用来不断的存放同一类型的常量,并可以重复使用
使用变量注意:
l 变量的作用范围(一对{}之间有效)
l 初始化值
定义变量的格式:
数据类型 变量名 = 初始化值;
注:格式是固定的,记住格式,以不变应万变。
理解:变量就如同数学中的未知数。
什么时候定义变量?
一旦数据不确定,需要对数据进行存储的时候
声明一个变量之后必须用赋值语句对变量进行赋值进行显式初始化。千万不要使用未被初始化的变量。
*注意:对于字符串,要搞清楚空串与Null串的区别。空串””是指长度为0的字符串。可以调用if(str.length() == 0)或者if(str.equals(“”))来检查字符串是否为空。空串是一个对象,有着自己的串长度(0)和内容(空)。String变量还可以存放null,这表示,目前没有任何对象与该变量关联。要检查一个字符串是否为null,要使用以下的条件:if(str== null)。
4.3 数据类型
byte占一个字节(八个bit位),short占2个字节,int占4个字节,long占8个字节。char占2个字节,一个中文字符是2个字节,因此一个中文字也能够用char来装。float占4个字节,double占8个字节。
4.4 数据类型的转换
l 自动类型转换(也叫隐式类型转换)
l 强制类型转换(也叫显式类型转换)
自动类型转换的例子:一个byte占一个八位,一个int占4个八位,在byte与int相加的时候,byte被自动提升为int类型,用4个八位装,因此,运算结果也是int类型,但是要把运算的结果赋值给一个byte类型,就可能会造成精度的丢失。
byte b = 123;
b = b + 4;
什么时候要用强制类型转换?强制类型转换例子:
byte b = 3;
b = b + 4;//报错
b = (byte)(b+4);//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b。
表达式的数据类型自动提升
所有的byte型、short型和char的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型;
如果一个操作数是float型,计算结果就是float型;
如果一个操作数是double型,计算结果就是double型。
总而言之:
小转大:自动(隐式)类型转换
大转小:显式(强制)类型转换
5.运算符
5.1算术运算符
如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论。
对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
5.2赋值运算符
= , +=, -=, *=, /=, %=
int a,b,c;
a=b=c =3;
int a = 3;
a+=5;//等同运算a=a+5;
5.3比较运算符
*注意:=是赋值运算符,而不是比较运算符,==才是。比较运算符的结果都是boolean型,也就是要么是true,要么是false。
5.4逻辑运算符
逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
5.5位运算符
位运算符 | ||
运算符 | 运算 | 范例 |
<< | 左移 | 3 << 2 = 12 --> 3*2*2=12 |
>> | 右移 | 3 >> 1 = 1 --> 3/2=1 |
>>> | 无符号右移 | 3 >>> 1 = 1 --> 3/2=1 |
& | 与运算 | 6 & 3 = 2 |
| | 或运算 | 6 | 3 = 7 |
^ | 异或运算 | 6 ^ 3 = 5 |
~ | 反码 | ~6 = -7 |
位运算是直接对二进制进行运算。是最高效的运算。一个数左移越移越大,右移越移越小。且都按2的倍数变化。
3<<2 = 3 * 2² = 12
3<<3 = 3 * 2³ = 24
左移:其实就是乘以2的移动的位数次幂。
右移:其实就是除以2的移动的位数次幂
>>>运算符用0填充高位,>>运算符用符号位填充高位,没有<<<运算符。
&参与位运算,0视为假,1视为真。
~反码就是取反,0变为1,1变为0。如果要求6的负数,只要6取反+1即可,~6+1
5.6 三元运算符
(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
z = (x > y) ? x : y ;//获取两个数中较大的那个值
6.程序流程控制
6.1 判断结构
if语句的三种格式:
第一种:
if(条件表达式)
{
执行语句;
}
第二种:
if(条件表达式)
{
执行语句;
}
else
{
执行语句;
}
第三种:
if(条件表达式)
{
执行语句;
}
else if (条件表达式)
{
执行语句;
}
……
else
{
执行语句;
}
if语句的特点:
a,每一种格式都是单条语句。
b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以写在其他表达式中。
c,条件表达式无论写成什么样子,只看最终的结构是否是true 或者 false;
6.2 选择结构
switch语句格式:
//表达式只接受byte,short,int,char类型,Java SE7后也接受字符串
switch(表达式) {
case 取值1:
执行语句;
break;
case 取值2:
执行语句;
break;
…...
default:
执行语句;
break;
}
*要注意:这些case没有顺序,但是无论这些case怎么排列,default都是最后一个执行的。如果在一个case内部没有写break语句,会造成case穿透。如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
什么时候选择if什么时候选择switch呢?
数值不多且满足四种类型的时候,建议用switch,效率稍高。
对区间进行判断,对结果为Boolean类型的判断,使用if(if的使用范围更广)
6.3 循环结构
6.3.1 while循环
while语句格式:
while(条件表达式)
{
执行语句;
}
6.3.2 do while循环
do while语句格式:
do
{
执行语句;
}while(条件表达式);
*dowhile的特点就是无论条件是否满足,循环体至少执行一次。
while必须先判断条件,只有满足条件才能执行循环体。
6.3.3 for循环
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;(循环体)
}
操作表达式和初始化表达式如果有多个则需要用逗号分隔开。
循环条件表达式结果要么为真,要么为假。以下代码无法通过编译的。
<pre name="code" class="java">for(System.out.println("a");System.out.println("b") ; System.out.println("c")) {System.out.println("d"); }
*注:
a,for里面的连个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条件不满足为止。
b,while与for可以互换,区别在于for为了循环而定义的变量在for循环结束就是在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。
c,最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。
累加思想:原理是通过变量记录循环操作结果
技术其思想:原理是通过一个变量记录数据的状态变化,也通过循环完成
6.3.4 其他流程控制
break语句:应用于选择结构(switch)和循环结构
continue语句:应用于循环结构
*注:
a,这两个语句离开应用范围,存在是没有意义的。
b,这个两个语句单独存在下面都不可以有语句,因为执行不到。
c,continue语句是结束本次循环继续下次循环。
d,标号的出现,可以让这两个语句作用于指定的范围。
标号的应用举例:
w:for(inti = 0 ; i < 10 ; i ++) {
for(int j = 0 ; j < 10 ; j ++){
if(i*j== 16) {
System.out.println("i= " + i);
System.out.println("j= " + j);
breakw;//打印第一组乘积为16的数,跳出w循环
}
}
}