Java语法规则:
任何一种语言都有自己的语法规则,Java也一样,既然是规则,那么知道其如何使用就可以了。
1)代码都定义在类中,类由class来定义,区分 public class 和 class;
2)代码严格区分大小写,如main 和 Main 是不一样的;
3)Java中的标识符与关键字;
4)注释;
main方法的作用:
1)程序的入口
2)保证程序的独立运行
3)被JVM调用
Java语言分隔符:
分号 ;
语句的分割,表示一句话结束,好比咱们使用的句号;
花括号 {}
表示一个代码块,是一个整体,花括号要一起使用;
方括号 []
定义数组和访问数组元素时使用;
圆括号 ()
使用很广泛,具体用到细讲;
圆点 .
类/对象 访问它的成员(字段,方法)时使用等。
空格
分割一条语句的不同部分,空格的次数不限制;
Java的关键字预览:
关键字(都是小写的)是编程语言里事先定义的,有特别用途的单词。(好比古代皇帝的名字,老百姓是不能使用和皇帝一样的名字。)
Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名。
goto 和 const不是Java的关键字,但是它们是java的保留字,我们也是不能直接使用的。
注意:关键字,都是小写的,jdk1.2多了strictfp(精准浮点型),关键字 jdk1.4多了assert(断言)关键字, jdk1.5多了enum(枚举) 关键字
Java中的标识符:
可简单理解为在Java程序中为了增强阅读性自定义的名称。比如:类名,方法名,变量名等。
Java标识符的命名规则:
(1)由字母、数字、下划线、$组成,不能以数字开头
注意:此处的字母还可以是中文,日文等;
(2)大小写敏感
(3)不得使用java中的关键字和保留字
(4)别用Java API里面的类名作为自己的类名。
Java数据类型复习:
Java基本数据类型所占的位数:
注意:boolean 类型数据只允许取值true 或 false(不可以使用0 或非0的整数来代替true和false,区分于C语言)。
基本数据类型转换之向上转型:
向上转换:将容量小的类型值,赋值给容量大的类型变量,自动转换:
boolean 类型是不可以转换为其他基本数据类型。
整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:
容量小的类型可自动转换为容量大的数据类型;
byte,short,char → int → long → float → double
byte,short,char之间不会相互转换,他们在计算时首先会转换为int类型。
基本数据类型转换之向下转型:
向下转换:将容量大的类型值,赋值给容量小的类型变量,需要强制转换:
容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度的降低或溢出,使用时要格外注意。
有很多种类型的数据混合运算时,系统首先自动的将所有数据转换成容器最大的哪一种数据类型,再计算。
浮点型:默认是double
整型:默认是 int
表达式的数据类型自动提升:
所有的byte型、short型和char的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型;
如果一个操作数是float型,计算结果就是float型;
如果一个操作数是double型,计算结果就是double型。
Java的运算符:
运算符是一种特殊符号,用以表示数据的运算、赋值和比较等共分以下几种:
1)算术运算符
2)赋值运算符
3)比较运算符
4)逻辑运算符
5)移位运算符
Java算术运算符概览:
C/C++只允许 % 两边的操作数是整型的,而Java既支持整型也支持浮点型.
double ret = 3.14 % 1.1;// 结果是 0.94
比较下列结果,想想原因:
System.out.println(1.0 / 0);//Infinity
System.out.println(1 / 0);//抛出异常
因为double的精度比int的精度高,表达式自动转换为double数据类型,除数的值为0.0,1.0/0.0 等效应于1除以一个无限接近0的double类型的数据,结果就是无限大;
对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
字符串连接符:
“+” 除用于算数加法运算外,还可以对字符串进行连接操作:
例如,基本类型数据和String值相连接,就会组成一个新的String值;
booleanb = false;
Strings = false + "will";// 组成可一个新的String值"falsewill"
String s = (String)false;//false,基本数据类型是不能强制转换成String类型的!
int sum = 99 + 1;
String s = "cd" +"itcast"; //cditcast
“+”运算符两侧的操作数中只要有一个String类型,一个是基本数据类型时,编译成class文件后,两个操作数就被连接成了一个新的String值:
int age = 80;
Sysytem.out.println("c= " + c);
System.out.println(8+7+"hello"); //结果是:15hello
System.out.println(8+"hello"+7); //结果是:8hello7
System.out.println("hello"+8+7); //结果是:hello87
++运算符:
int a = 4;
int b = a ++;
++在后:先运算再递增1, a = 5,b= 4;
int b = ++ a;
++在前:先递增1,再运算, a = 5; b= 5;
Java赋值运算符:
=, +=, -=, *=, /=, %=
inta,b,c; a = b = c = 3;
inta = 3; a += 5;等同运算a = a +5;
思考:
shorts = 3; s = s + 2;
与s += 2;有什么不同?
注意:数据类型的隐式转换
Java比较运算符:
注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
注2:比较运算符“==”不能误写成“=”。
Java逻辑运算符:
逻辑运算符用于连接布尔型表达式,在Java中不可以写成3
“&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
“ ^ ”与“|”不同之处是:当左右都为true时,"^"结果为false。
Java表达式:
表达式,是由数字、运算符、数字分组符号(括号)等以能求得数值的有意义排列的序列;
a + b
3.14 + a
(x + y) * z + 100
boolean b= i < 10 && (i%10 != 0)
表达式的类型和值:
对表达式中操作数进行运算得到的结果是表达式的值。
表达式值的数据类型即为表达式的类型。
表达式的运算顺序:
应按照运算符的优先级从高到低的顺序进行;
优先级相同的运算符按照事先约定的结合方向进行;
Java运算优先级(结合性不用记,在使用中用括号就行了!!!):
三目运算符:
“三目运算符”,语法格式:
x? y : z;
其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算符的结果是表达式y的值,否则就是z的值。问:y和z的结果类型一样吗,由什么决定?
Java位运算符:
位运算符结果表:
位运算符之按位与(&):
参与运算的两个数,若两个相应的位数都为1,则该位的结果值是1,否则是0;
例如:3 & 5 不等于8,先把 3和5以二进制表示,再进行按位于运算:
位运算符之按位或(|):
参与运算的两个数相应位中只要有一个1,结果就是1;
例如:3 | 5 不等于8,先把 3和5以二进制表示,再进行按位于运算:
位运算符之按位异或(^):
参与运算的两个数相应位相同则结果为0,异号则为1;
位运算符之左移(<<)和右移(>>):
左移操作“<<”:将运算数的二进制码整体左移指定位数,左移之后的空使用“0”来补充。
右移操作“>>”:将运算数的二进制码整体右移指定位数,右移之后的空使用“符号位”来补充。
若是正数使用“0”补充;
若是负数使用“1”补充;
无符号右移">>>":将运算数的二进制码整体右移指定位数,右移之后的空使用“0”来补充
Java7新特性:
数值的二进制表示:0B或0b;
数值的底线格式;
简单地说,就是一个数值(整数或浮点数)的表示方式,除了数字、类型符号、正负符号、小数点外,还能加上底线来增加数值的可读性。
当我们表示一个二进制的数值。
int bin1 = 0b000000000000000001100011;//99的二进制,很容易多些或少些一个0或1,为此Java7后开始支持新的书写格式。
int bin2 = 0b00000000_00000000_01100011;//清晰多了
float pi = 3.14_159_26f;
注意:
底线不能加在数值的开头;
例如 _12_34,这样是错误的。
底线不能加上数值的结尾;
例如 12_34_,这样是错误的。
底线不能加在2进位和16进位的进位表示字元之后;
例如 0x_1234,0b_1100,这样是错误的。
程序运行流程:
顺序结构:
如果代码里没有流程控制,程序是至上而下一行一行执行的,一条语句执行完之后继续执行下一条语句,直到程序的最后。
程序流程控制----分支结构:
if的3种格式:
1.
if(boolean条件){
//若为true就执行这里
}
2.
if(boolean条件){
//若为true就执行这里
}else{
//为false就执行这里
}和三目运算符相似:
和三目运算符享受
格式: boolean表达式 ? 语句1 : 语句2 ;
若表达式结果是true: 执行语句1
false: 执行语句2
boolean表达式 ? 语句1 : 语句2; 结果类型是啥?
由语句1和语句2来决定,一般要求两个语句的值类型是一样的;
3.
if(boolean条件){
//若为true就执行这里
}elseif(boolean条件){
//若为true就执行这里
}
....
else{
//以上条件都不满足就执行这里
}
条件语句----switch:
格式:
注意:switch的判断表达式的返回值支持的类型:
byte,short,char,int,引用类型;java5开
始支持enum,java7开始支持String。
switch(表达式)
{
case 表达式的值1:
//操作语句
break;
case 表达式的值2:
//操作语句
break;
case 表达式的值3:
//操作语句
break;
case 表达式的值4:
//操作语句
break;
default:
//以上都不满足
break;
}
注:case和default没有先后顺序可言,default放在case前面也是最后找它!
程序流程控制----循环结构:
1.while
格式:
while(boolean条件){
//条件为true就执行这里
}
2.do while
格式:
do{
//循环体
}while(boolean条件);
dowhile 无论条件是否满足至少会执行一次;
3. for
格式:
for(初始化语句A;boolean条件B;循环完后执行语句C){
//语句D
}
初始化语句只执行一次,
执行顺序: A -> B(判断) -> D ->C -> B(判断)
for循环:适合于事先知道循环的次数;
三大循环是可以相互转换的;
for(inti=0; i < 4; i ++){
}
System.out.println(i);//访问不到
//---------------------------------------------------------------
inti;
for(i=0;i < 4; i ++){
}
System.out.println(i);//可以访问
//---------------------------------------------------------------
int j = 0 ;
while(j< 4){
j++;
}
//---------------------------------------------------------------
嵌套循环:
while(true){
while(true){
//
}
}
控制循环:
break; 表示终止当前所在的循环
continue;表示跳过当前正在执行的这一次循环,然后继续执行下一次的循环
return; 表示终止该循环所在的方法;
for(inti = 0; i < 5; i ++){
if(i== 3){
break;//0 1 2
//注意:break,和continue,return语句后面,不能再有语句;
}
System.out.println(i);
}
System.out.println("Hello");
for(inti = 0; i < 5; i ++){
if(i== 3){
//break;//0 1 2
continue;//仅仅是不打印3
//注意:break,和continue语句后面,不能再有语句;
}
System.out.println(i);
}
控制外层循环:
使用标签(必须符合标识符的命名规范):
放在循环的前面:
outer:while(true){
inner:while(true){
break outer;
}
}