记录JAVA基础,包括关键字/变量/运算符/流程控制部分知识点。
该系列文章仅供自己复习使用,记录学习过程中遇到的值得注意的问题,并非记录全部知识点细节。
前言
没有记录标识符的命名规范,全靠多写去形成习惯
基于java8进行学习的,后续要根据版本新特性进行补充修改
一.变量的使用
包含JAVA语法中变量的相关知识重点。
1.变量的分类
1-1.按数据类型分类
首先,数据类型分为:基本数据类型(primitive type)和引用数据类型(reference type)。
基本数据类型包含:数值型(byte,short,int,long,float,double,char,boolean)。
引用数据类型包含:类(class),接口(interface),数组([ ])。
需要注意:字符串String属于引用数据类型中的class,而非基本数据类型。
需要记住:byte(1字节 = 8bit)/ short(2字节)/ int(4字节)/ long(8字节)/ float(4字节)/ double(8字节)/ char(1字符 = 2字节)。
1-2.按声明位置分类
分为:成员变量和局部变量。
成员变量分为:实例变量(无static)和类变量(有static)。
局部变量分为:形参/方法局部变量/代码块局部变量。
需要注意:变量先声明后使用,都定义在其作用域内,离开作用域即失效。
2.基本数据类型的运算规则
涉及到除布尔型的另外七种基本数据类型。
2-1.自动类型转换
规则:byte 、char 、short --> int --> long --> float --> double
容量小的变量,与容量大的变量运算时,结果会自动提升为容量大的数据类型。当byte,char,short三种类型的变量做运算时,结果为int型,例如char型的a + short 型的10 = 107。
2-2.强制类型转换
可以理解为自动类型转换的逆运算,需要使用强转符()。强制类型转换可能导致精度损失,要谨慎使用。具体原理需要去理解计算机存储数据时使用的原码反码补码等知识。
@Test//测试强制转换造成精度损失
public void Test0() {
long x = 1000000000000000l;
int y = (int)x;
System.out.println("x = " + x);//x = 1000000000000000l
System.out.println("y = " + y);//y = -1530494976
}
2-3.String与基本数据类型的运算
String可以与8种基本数据类型变量进行运算,且只能是连接运算,使用“+”连接,运算后的结果仍为String类型,要避免对String类型数据使用强转符,因为String并不是基本数据类型。
String s1 = "123";
int i = (int)s1;//编译错误,对String的类型转换需要用到包装类的知识点
int i= Integer.parseInt(s1);//调用包装类方法将String转换为int型
包装类知识点会在后续文章中记录。
二、关键字与标识符
1.定义与意义
关键字就是已经被用作专门用途的字符串,标识符就是所有可以自己起名字的那些名称。所以命名标识符时要避开关键字。
2.关键字都有什么
参见尚硅谷宋红康老师“30天掌握java基础”中的笔记如下图:
除此之外还有两个保留字:goto,const,后续版本可能会作为关键字使用,所以也要避免使用他们作为标识符。
3.标识符命名规则
不遵守以下命名规则,无法通过编译:
①只能由 英文字母 / 数字 / 下划线“_” / $ 组成;
②不能以数字开头;
③不能使用关键字保留字,但是可以包含他们;
④严格区分大小写,长度无限制;
⑤不能有空格。
三、运算符
1.运算符概览
算数运算符:加减乘除(±*/),取余(%),前后++,前后–
赋值运算符:=,+=,-=,*=,/=,%=
比较运算符:==,!=,>,<,>=,<=,instanceof
逻辑运算符:&,&&,|,||,!,^
位运算符:>>,<<,>>>,&,|,^,~
三元运算符:条件表达式?表达式1:表达式2
2.部分运算符细节讲解
2-1.算数运算符
%:取余运算,结果的符号和被模数符号相同,经常用于判断能否除尽。
@Test//测试取余运算结果的符号正负
public void Test1(){
int m = -16;
int n = 5;
System.out.println("m % n = " + m % n);//m % n = -1
}
前++/- -:先自增/自减,再参与运算;
后++/- -:先运算,之后进行自增/自减。
@Test//测试前后++/--的运算过程
public void Test2(){
int x = 5;
int y = 10;
int a = x++;
int b = --y;
System.out.println("x = " + x); //x = 6
System.out.println("y = " + y); //y = 9
System.out.println("a = x++ =" + a);//a = x++ =5
System.out.println("b = --y =" + b);//b = --y =9
}
2-2.逻辑运算符
区分&与&&,|与||:&与|会强制运算符号右边的表达式,无论符号左边的结果是否决定最终结果。&&与||会在符号左边结果已决定最终结果时,不再进行右边的运算。开发时更推荐使用&&和||。
@Test//测试&与&&(|与||同理)
public void Test3(){
int a = 5,b = 10;
if(a > 0 & --a > 0){ //右侧继续运算,a先自减
System.out.println("a = " + a);//a = 4
}
if(b < 0 && --b > 0){ //右侧不再运算,b未自减
System.out.println("b = " + b);
}else System.out.println("b = " + b);//b = 10
}
2-3.位运算符
“>>”:右移运算符,num >> 1,相当于num除以2
“<<”:左移运算符,num << 1,相当于num乘以2
“>>>”:无符号右移,忽略符号位,空位用0补全
这部分内容需要了解二进制知识点
2-4.三元运算符
条件表达式?表达式1:表达式2
其结果为boolean型,根据条件表达式的结果真假,真则执行表达式1,假则执行表达式2。
凡是使用三元运算符的地方,都可以改写成 if-else 结构,反之不成立。因为三元运算符更为简洁高效,所以比起 if-else 结构,优先选用三元运算符。
@Test//测试三元运算符求两个数的最大值max
public void Test4(){
int a = 5,b = 10;
int max;
max = a>b?a:b;
System.out.println("max = " + max);//max = 10
}
四、流程控制
1.分支结构
1-1.关于 if-else
注意事项:
①如果多个条件表达式之间没有交集关系,那么执行语句的顺序是任意的;
②如果多个条件表达式之间有交集关系,要根据情况确定哪个结构声明在上面;
③如果多个条件表达式之间有包含关系,一般将范围小的声明在上面,不然会没有执行机会;
④当执行语句只有一行时,对应的{}可以省略,但是不建议这样做。
1-2.关于 switch-case
switch(表达式){ //根据switch表达式中的值,依次匹配各个case中的常量
case 常量1: //case 之后只能声明常量。不能声明范围。
执行语句1;
//break; //没有break时,调用完执行语句以后,继续向下执行其他case结构
case 常量2:
执行语句2;
break; //一旦执行到break关键字,就跳出switch-case结构
...
default: //default:相当于if-else结构中的else
执行语句n;
break;
}
注意: switch结构中的表达式,只能是如下的6种数据类型之一:byte 、short、char、int、枚举类(JDK5)、String(JDK7)。
2.循环结构
2-1.关于for循环
没有易遗忘知识点,不做赘述。
2-2.关于 while/do-while循环
//while循环执行顺序:①②③④-②③④-②③④-……②
①
while(②){ //更多使用while而非do-while
③;
④;
}
//do-while循环执行顺序:①③④-②③④-②③④-……②
①
do{ //do-while循环至少会执行一次循环体
③;
④;
}while(②);
2-3.无限循环
while(true) 或 for( ; ; )会形成无限循环。
终止循环①当循环条件为false;②在循环体中执行break。
3.关键字:break和continue
关键字 | 使用范围 | 不同点 | 相同点 |
---|---|---|---|
break | switch支路 / 循环体 | 结束当前循环 | 关键字后面不能执行声明语句 |
continue | 循环体 | 结束本次循环 | 关键字后面不能执行声明语句 |
总结
只是简单总结了变量、运算符、流程控制等知识点,复习时配合JAVA基础练习文档使用,重点在于灵活地使用嵌套循环结构。