文章目录
什么是表达式和什么是语句
1. 表达式
在java程序语言中,大部分的描述都是通过表达式(Expression)所构成。所谓的表达式则是由运算符Q和操作数所构成。其中,运算符代表的就是运算的动作,而操作数则是要运算的数据。
表达式一共分为三种:
- 变量或常量 + 运算符构成的计算表达式
- new 表达式,结果是一个数组或类的对象。
- 方法调用表达式,结果是方法返回值或void(无返回值)。
操作数可以是变量也可以是常量
int a = 10;
a = a + 10;
// 上方两个都是表达式,其中 a 是变量 10 是常量 都是操作数
// + 和 = 都是运算符 其中 + 是算是运算符 = 是赋值运算符
// a = a + 10 是由两个表达式构成。
// 第一个 a + 10 是一个表达式 a = (a + 10 的值) 也是表达式
2. 语句
1. 单语句
-
空语句:什么功能都没有。它就是一个单独的一个分号;
-
表达式语句,就是表达式后面加分号;
- new表达式,
- 方法调用表达式,
- 计算表达式中的赋值表达式、自增自减表达式
//空语句 ; //表达式语句 i++; //自增表达式 + ; System.out.println("hello"); //方法调用表达式 + ;
2. 复合语句
与C语言及其他语言相同, Java语言的复合语句是以整个块区为单位的语句,所以又称为块语句。
例如,在定义一个类或者方法时,类体就是以“{}"作为开始与结束的标记,方法体同样也是以“{}”作为标记。复合语句中的每个语句都是从上到下被执行。复合语句以整个块为单位,可以用在任何一个单独语句可以用到的地方,并且在复合语句中还可以嵌套复合语句。
复合语句由开括号“{"开始,闭括号“}”结束。
1. 分支语句:if…else,switch…case
单分支
:if
if(条件表达式){ // 判断条件表达式是否正确
语句体; // 正确执行
}
双分支
:if…else
if(关系表达式) { // 判断条件表达式是否正确
语句体1; // 正确执行
}else { // 否则
语句体2; // 不正确执行
}
多分支
:if…else if 、 if…else if …else、switch…case多分支选择结构
if (判断条件1) { // 判断条件表达式是否正确
执行语句1; // 正确执行
} else if (判断条件2) { // 否则如果
执行语句2; // 否则如果成立执行
}
...
}else if (判断条件n) {
执行语句n;
} else { // 否则
执行语句n+1; // 不正确执行
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
switch(表达式){
case 常量值1:// 是否与常量值相等
语句块1;// 相等执行
【break;】// 因为swicth会进行穿透所以需要break来进行一个跳槽这个区间的操作
case 常量值2:
语句块2;
【break;】
。。。
【default:
语句块n+1;
【break;】
】
}
- if语句与switch语句比较:
- if语句的条件是一个布尔类型值,if条件表达式为true则进入分支,可以用于范围的判断,也可以用于等值的判断,使用范围更广。
- switch语句的条件是一个常量值(byte,short,int,char,枚举,String),只能判断某个变量或表达式的结果是否等于某个常量值,使用场景较狭窄。
- 当条件是判断某个变量或表达式是否等于某个固定的常量值时,使用if和switch都可以,习惯上使用switch更多。当条件是区间范围的判断时,只能使用if语句。
- 另外,使用switch可以利用穿透性,同时执行多个分支,而if…else没有穿透性。
2. 循环语句:while 、 do…while
while循环语句基本格式
:
while (循环条件语句①) {
// 与if语句的判断相同 成立执行循环语句体 值得注意的是避免死循环即避免循环语句1的正确值不要一直保持true
循环体语句②;
}
do…while循环语句标准格式:
do {
// 需要明白在循环条件语句是在while后面的括号中,程序是从上往下依次执行的。所以在do区间中的循环体语句是会执行的,而执行完之后会到达while进行一个判断如果成立则跳会do的区间进行再一次的执行。同样有个注意点就是不要死循环了
循环体语句①;
} while (循环条件语句②);
for循环语句格式:
for(初始化语句①; 循环条件语句②; 迭代语句④){
循环体语句③
}
// 在for循环中for后面括号内的两个`;`是不能去掉的,它的作用是一个将语句分开的作用。
// 接下来在初始化语句见名字就明白我们需要初始化一个语句为什么是语句呢?因为后面跟这";"执行完后进入到一个循环条件语句的判断,成功执行到循环语句体否则直接跳出循环,最后为了避免进行一个死循环,所以在迭代语句中我们会进行一个变量或者说初始化语句的改变,为的就是避免一个死循环,当然这也是for循环的特色之一。
循环语句的区别:
- 从循环次数角度分析
- do…while循环至少执行一次循环体语句
- for和while循环先循环条件语句是否成立,然后决定是否执行循环体,至少执行零次循环体语句
- 如何选择
- 遍历有明显的循环次数(范围)的需求,选择for循环
- 遍历没有明显的循环次数(范围)的需求,循环while循环
- 如果循环体语句块至少执行一次,可以考虑使用do…while循环
- 本质上:三种循环之间完全可以互相转换,都能实现循环的功能
- 三种循环结构都具有四要素:
- (1)循环变量的初始化表达式
- (2)循环条件
- (3)循环变量的修改的迭代表达式
- (4)循环体语句块
3. 关键字break、continue
1. break
使用场景:终止switch或者当前循环
- 在选择结构switch语句中
- 在循环语句中
- 离开使用场景的存在是没有意义的
2.continue
使用场景:提前结束本次循环,继续下一次的循环
小结:首先明白了一个表达式之后我们才能进行语句的一个学习,在语句中我们得明白为啥会执行这个语句体?
在循环语句中,我们也明白了,不能进入一个死循环如诺进入死循环的话会导致后续代码的不能执行,也会对我们的计算机进行一个损坏。此外,对于一个关键字的一个功能了解,如何使用,向break是直接跳出,而continue则是跳出但是会进行下一个循环可以大大的提高我们的效率。
Scanner类的特点和使用方式
对于Scanner类的特点目前只学习了一个下面以代码形式展现
import java.util.Scanner;
//如果在.java源文件上面没有这句import语句,
//那么在代码中每次使用Scanner就要用java.util.Scanner的全名称,比较麻烦
/*
键盘输入代码的四个步骤:
1、申请资源,创建Scanner类型的对象
2、提示输入xx
3、接收输入内容
4、全部输入完成之后,释放资源,归还资源
如果你在键盘输入过程中,遇到java.util.InputMismatchException异常,
说明你输入的数据,其类型与接收数据的变量的类型不匹配。
*/
public class Test05Input {
public static void main(String[] args) {
//1、准备Scanner类型的对象
//Scanner是一个引用数据类型,它的全名称是java.util.Scanner
//input就是一个引用数据类型的变量了,赋给它的值是一个对象
//new Scanner(System.in)是一个new表达式,该表达式的结果是一个对象
//引用数据类型 变量 = 对象;
//这个等式的意思可以理解为用一个引用数据类型的变量代表一个对象,所以这个变量的名称又称为对象名
//我们也把input变量叫做input对象
Scanner input = new Scanner(System.in);//System.in默认代表键盘输入
//这里变量名是input,下面就用input
//2、提示输入xx
System.out.print("请输入一个整数:");
//3、接收输入内容
int num = input.nextInt();
System.out.println("num = " + num);
//列出其他常用数据类型的输入
/*
long bigNum = input.nextLong();
double d = input.nextDouble();
boolean b = input.nextBoolean();
String s = input.next();
char c = input.next().charAt(0);//先按照字符串接收,然后再取字符串的第一个字符(下标为0)
*/
//释放资源
input.close();
}
}
小结:在我看来则是导入的意思,import是进行一个资源包啥的导入,为的就是方便我们代码的输入,提高效率。然后就是一个new了在我所认知的new就是 新建一个对象 何为对象?万物皆为对象!此外,对于一个类型声明,为什么String的类型是直接就input.next()?这是系统默认的。还有个值得注意的点就是我们的char。为什么呢?主要是在进行练习时我犯的一个小错,什么错?众所周知,程序员是以代码越简洁,为最!那我当时,在做一个数字,字母,其他数值判断时我使用了switch进行一个判断,所以可以想想就知道代码量会是一个非常恐怖的行数(对一个简单的功能),所以做到中途时,我就发现问题。看了答案才明白原来可以这样。且我的那种判断还有个缺陷就是在一个输入字符万以上99呢?所以没有明确表明时,我的功能是有一个大漏洞的
总节:发现错误,寻找解决方案。
每日金句!— — — — “天行健,君子以自强不息” ——《周易》