????作者简介:练习时长两年半的Java up主
????个人主页:老茶icon
???? ps:点赞????是免费的,却可以让写博客的作者开兴好久好久????
????系列专栏:Java全栈,计算机系列(火速更新中)
???? 格言:种一棵树最好的时间是十年前,其次是现在
????动动小手,点个关注不迷路,感谢宝子们一键三连
目录
课程名:Java
内容/作用:知识点/设计/实验/作业/练习
学习:Java
一、前言
学习Java常量、运算符、条件语句。
二、环境与设备
1.软件:IntelliJ IDEA 2022.3.2
2.环境:Windows 11 and JDK 11
三、原理
多敲代码,多练习。
四、内容
常量
在程序运行过程中,不可改变的量,称为常量。
常量命名时,一般都是大写字母,如果有多个单词,用_隔开。
定义常量
在定义变量的数据类型前,加上final关键字
语法:final 数据类型 常量名=值;
final double PI=3.14;
运算符
算术运算符
需要两个操作数参与。
操作数1 算术运算符 操作数2;
符号 | 含义 | 说明 |
---|---|---|
+ | 四则运算的相加或字符串拼接 | 符号两端都是数值,作为相加使用;有一端为字符串,作为拼接使用。 |
- | 四则运算的相减 | 只能用于数值型 |
* | 四则运算的相乘 | 只能用于数值型 |
/ | 四则运算的相除 | 整数相除,结果去除小数部分。10/3结果为3 |
% | 四则运算的取余(求模) | 得到余数。10%3结果为1。 |
关系运算符
需要两个操作数参与。
操作数1 关系运算符 操作数2;
符号 | 含义 |
---|---|
> | 大于 |
< | 小于 |
== | 等于 |
!= | 不等于 |
>= | 大于等于 |
<= | 小于等于 |
=表示赋值,==表示判断相等。
关系运算的结果,是一个布尔值。
1>0结果为true;
1==2结果为false;
==判断的是内存地址,
原始类型判断字面值是否相同时使用==判断,
引用类型判断字面值是否相同时尽量不要使用==
在判断字符串是否相等时,不能使用==,要使用**equals()**方法
字符串A.equals(字符串B)
这个方法的结果为一个布尔值。
如果两个字符串的值相同,得到true,否则得到false。
逻辑运算符
表达式1 &&或|| 表达式2
!表达式 将原表达式取相反的结果
逻辑运算的结果为一个布尔值
1>0 && 3>2; //true
1>0 && 3>20; //false
1>0 || 3>20; //true
1>10 || 2>20; //false
!(1>0) //false
!false //true
符号 | 含义 | 说明 |
---|---|---|
&& | 逻辑与and | 符号两端的表达式都成立,整体结果才为true。(有设备且有游戏) |
|| | 逻辑或or | 符号两端的表达式都不成立,整体结果才为false。(手机支付/现金支付) |
! | 逻辑非not | 将原结果取相反的结果。属于单目运算符(只有一个操作数参与运算)。 |
补充:位运算符
符号 | 含义 | 说明 |
---|---|---|
& | 按位与 | 最终结果同&& |
| | 按位或 | 最终结果同|| |
^ | 按位异或 | 转换为二进制后比较每一位,相同用0,不同用1,最终结果再转化为十进制。 |
>> | 按位右移 | 转换为二进制后,从右向左移除指定数量的位数。 |
<< | 按位左移 | 转换为二进制后,在最后补充指定数量的0. |
//异或运算
System.out.println(3 ^ 4);//7
//3 011
//4 100
// 111 7
//右移运算
System.out.println(5 >> 1);//2
//5 101
// 10 2
//左移运算
System.out.println(5 << 1);//10
//5 101
// 1010 10
注意
-
&&、||与&、|在最终的运算结果上是一致的。
-
&&是短路运算,如果第一个表达式不成立,不再执行第二个表达式。
-
||是短路运算,如果第一个表达式已经成立,不再执行第二个表达式。
-
&和|是位运算,会将两个表达式都运行完后再判断最终的结果。
-
程序中一般使用&&和||提高代码执行效率。
赋值、复合赋值运算符
复合赋值,是先将符号两侧作为整体进行=前的运算后,再将结果赋值给复合赋值符左侧的变量中。
a=a+b;等同于a+=b;
a*=b+c;等同于a=a*(b+c);
符号 | 含义 | 说明 |
---|---|---|
= | 将符号右边的值赋值给符号左边的变量。 | int a=1; |
+= | 将符号两侧的内容先相加,再将结果赋值给符号左侧。 | a+=b;相当于将a+b的值赋值给a |
-= | 将符号两侧的内容先相减,再将结果赋值给符号左侧。 | |
*= | 将符号两侧的内容先相乘,再将结果赋值给符号左侧。 | |
/= | 将符号两侧的内容先相除,再将结果赋值给符号左侧。 | |
%= | 将符号两侧的内容先求余,再将结果赋值给符号左侧。 |
自增自减运算符
属于单目运算符。
a++/++a最终的结果相当于a=a+1;
a--/--a最终的结果相当于a=a-1;
//这三句话的作用一样
i=i+1;
i+=1;
i++;
符号 | 含义 | |
---|---|---|
++ | 对变量+1 | a++;++a; |
– | 对变量-1 | a–;–a; |
public class Test4 {
public static void main(String[] args) {
//定义初始值
int i = 10;
//如果自增自减运算符单独成行出现,无论符号在前后,结果都是+1/-1
//i++;
//++i;
//如果自增自减运算符配合其他代码一起使用时:
//符号在前,先+1/-1计算,后使用
//符号在后,先使用,后+1/-1计算
//System.out.println(i++);
/*
int j=i++;//此时++在变量i后,先使用i的值10,赋值给j,再对i进行+1的操作。
System.out.println(j);//j=10
System.out.println(i);//i=11
*/
/*
int j=++i;//此时++在变量i前,先对i+1,将11赋值给j。
System.out.println(j);//j=11
System.out.println(i);//i=11
*/
//System.out.println(i++ + i);//10+11
//System.out.println(++i + i);//11+11
//System.out.println(i++ + ++i);//10+12
//System.out.println(i-- - --i);//10-8
}
}
条件运算符
A?B:C
表达式1?表达式2:表达式3;
A,B,C为三个表达式,也称为三目运算符。
运算过程:先计算表达式1的结果,如果为true,执行?后的表达式2;如果为false,执行:后的表达式3。
相当于一个双分支条件语句。
分类 | 明细 | 说明 |
---|---|---|
单目运算符 | !/++/– | 只有一个操作数参与运算 |
双目运算符 | 算术、关系、逻辑中的&&/|| | 有两个操作数参与运算 |
三目运算符 | ?: | 有三个操作数参与运算 |
运算符的优先级
()>>单目运算符>>算术运算符>>关系运算符>>逻辑运算符>>赋值/复合赋值运算
int num=10;
String result = (num % 3 == 0 || num % 10 == 3 || num / 10 == 3) ? "你输了!" : "你赢了!";
//上面的式子中,先运算() 中的内容
//再运算num % 3 、num % 10、num / 10
//再运算1==0 0==3 1==3
//再运算false||false||false 三个都为false,整体为false
//再运算 false? "你输了!" : "你赢了!"
//最后进行赋值运算 "你输了!"赋值给result
条件语句
if语句
单分支if语句
if(判断条件){//判断条件的结果必须是布尔类型
//条件成立时执行的内容。
}
双分支if语句
if(判断条件){
//条件成立时执行的内容。
}else{
//条件不成立时执行的内容。
}
多分支if语句
if(条件1){
//条件1满足时执行
}else if(条件2){
//条件2满足时执行
}...{
//可以写任意个else if
}else{
//以上所有条件都不满足时执行
}
如果一件事情有多个分支,不要使用多个并列的if语句,不只会影响效率,甚至会造成条件重叠。
使用多分支if语句即可避免,当某个条件成立时,不再判断其余条件。
if嵌套
if(){
if(){}else{}
}else if(){
if(){}else{}
}else{
if(){}else{}
}
switch语句
switch(要判断的变量){
case 该变量有可能出现的值1:
//满足时执行的内容
break;
case 该变量有可能出现的值2:
//满足时执行的内容
break;
case 该变量有可能出现的值n:
//满足时执行的内容
break;
default:
//所有case都不满足时执行的内容
break;
}
switch语句的注意事项
- 小括号中变量的数据类型只能是非long的整型、字符型、字符串、枚举类型(在jdk1.7之后才支持字符串)
- 如果有case的情况与判断的变量相匹配,则执行对应case后的内容;如果没有case匹配,执行default后的内容
- case后可以不写break。如果没有break,在匹配的case执行后会继续执行下一个case后的内容,直到遇到break或没有代码可以执行为止。
- 如果多个case后执行的内容都一样,可以省略break,将要做的内容写在最后满足的case后
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期:");
String week = sc.nextLine();
switch (week) {
case "一":
case "二":
case "三":
case "四":
case "五":
System.out.println("今天上班");
break;
case "六":
case "七":
System.out.println("今天休息");
break;
default:
System.out.println("输入有误");
break;
}
switch与if的选择
- 如果条件能例举出来时,推荐使用switch
- 如果条件是范围时,只能使用if
- switch语句可以转换为if语句,if语句不一定能转换为switch
switch语句与if语句综合练习
import java.util.Scanner;
public class Test7 {
public static void main(String[] args) {
//输入年份和月份,输出这个月有多少天
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份");
int year = sc.nextInt();
System.out.println("请输入月份");
int month = sc.nextInt();
//定义天数默认为28
int day = 28;
//对月份进行判断
switch (month) {
// 1 3 5 7 8 10 12 都为31天
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
// 4 6 9 11 都为30天
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
case 2:
// 2 平年28天,闰年29年
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
day = 29;
}
break;
default:
day=0;
System.out.println("月份输入有误");
break;
}
System.out.println("有"+day+"天");
}
}
五、总结与分析
好好学习,天天向上。
往期专栏 |
---|
Java全栈开发 |
数据结构与算法 |
计算机组成原理 |
操作系统 |
数据库系统 |
物联网控制原理与技术 |