系列文章目录
Java基础01:JAVA概述、基础语法
Java基础02:运算符、流程控制语句、Random随机数
Java基础03:IDEA、快捷键
Java基础04:数组、二维数组
Java基础05:方法
Java基础06:Debug、进制
Java基础07:面向对象基础
Java基础08:API、字符串String、StringBuilder
Java基础09:ArrayList集合
Java基础作业
运算符
算数运算符
分类:
+:加法
-:减法
*:乘法
/:除法(java中整数相除,结果只能得到整除。如果想得到小数,需要将其中某一个或两个数据变成小数类型)
%:取余(取模)
++:自增
--:自减
+
注意:
- +号在字符参与运算的时候,将字符对应的码表值进行运算 ‘a’ + 2
- +号在字符串参与运算的时候,做字符串的拼接
- 字符串和字符进行+操作的时候是直接把字符的内容拼接进去,不会把字符转换成数字
- ascii码表值:0=48,A=65,a=97。
System.out.println("5 + 5 =" + 5 + 5); // 5 + 5 =55
System.out.println("5 + 5 =" + (5 + 5));// 5 + 5 =10
System.out.println(5 + 5 + "=10");// 10=10
System.out.println("a"+'a');//aa
System.out.println('a'+10+"bc"+'d'+10);// 107bcd10 java运算自左向右
System.out.println('a'+0);//获取a的码表值
%
%应用场景:
- 判断奇偶数(一个数对2取余,结果如果为0说明是偶数,不是0说明是奇数)
- 获取一个数的百位(一个数/100再对10取余的结果就是百位数.123/100%10)
- 判断一个数是否是某个数的倍数。
num%2 //结果为0,说明是偶数;结果不是0,就是说明是奇数
num/1%10//个位
num/10%10//十位
num/100%10//百位
num/1000%10//千位
num%5 //结果为0 说明是5的倍数
++、--
a++; //相当于 a = (a的数据类型) (a+1);
a--; //相当于 a = (a的数据类型) (a-1);
注意:
++:自增
单独使用:不管放在变量的前面还是后面,都是将变量+1
参与运算:
如果++放在变量的前面,是先将变量+1.然后再参与运算
如果++放在变量的后面,是先将变量的原值进行参与运算。然后再+1
--:自减
单独使用:不管放在变量的前面还是后面,都是将变量-1
参与运算:
如果--放在变量的前面,是先将变量-1.然后再参与运算
如果--放在变量的后面,是先将变量的原值进行参与运算。然后再-1
int num = 10;
num++;
System.out.println(num);//11
int num1 = 10;
int num2 = 20;
int sum = (num1++) + (--num1) + (num2++) + (num2*10);//10+10+20+210=250
System.out.println(sum);//250
System.out.println(num1);//10
System.out.println(num2);//21
赋值运算
1.基本赋值运算符:=
代表将右侧的数据交给左侧的变量.
2.扩展赋值运算符:+=,-=,*=,/=,%=
需要注意一点: 扩展赋值运算符底层自带强转功能
int a=10;
a+=2;//相当于 a = a+2 //底层就是 a = (int)(a+2)
a-=1;//相当于 a = a-1
比较(关系)运算符
逻辑运算符
短路:左边表达式的结果确定之后,如果整个表达式的结果已经被确定了,就不会去执行右边的表达式
三目运算符
public static void main(String[] args){
int a = 10;
int b = 20;
int max = a > b ? a : b;
System.out.println("a和b中的最大值:"+max);
}
位运算符
位运算符指的是二进制位的运算,先将十进制数转成二进制后再进行运算。
public static void main(String[] args) {
System.out.println(8>>1);//8>>1 = 8/(2的1次方) = 4
System.out.println(8<<1);//8>>1 = 8*(2的1次方) = 16
System.out.println(8>>2);//8>>2 = 8/(2的2次方) = 2
System.out.println(8<<2);//8<<2 = 8*(2的2次方) = 32
}
异或的特点:一个数,被另外一个数,异或两次,该数本身不变。
案例:数据交换
需求:已知两个整数变量a = 10,b = 20,使用程序时间这两个变量的数据交换,不允许使用三方变量。最终输出a = 20,b = 10。
public static void main(String[] args) {
int a = 10;
int b = 20;
a = a ^ b;// a = 10 ^ 20;
b = a ^ b;// b = 10 ^ 20 ^ 20;
a = a ^ b;// a = 10 ^ 20 ^ 10;
System.out.println(a);//20
System.out.println(b);//10
}
流程控制语句
流程控制语句:即通过一些语句,来控制程序的【执行】流程
流程控制语句分为:
⚫ 顺序结构
⚫ 分支结构(if,switch)
⚫ 循环结构(for,while,do…while)
顺序结构
顺序结构语句是Java程序,默认的执行流程,按照代码的先后顺序依次执行。从上到下,从左到右。
分支结构
if语句
if(){}
注意事项:
如果大括号中的语句体只有一行代码的时候可以把大括号省略.但是强烈建议永远不要省略
if(){}else{}
注意事项:
①. 一旦执行了某一个大括号中的语句体,整个if语句就结束了.不可能出现执行两个语句体的情况.
②. 有else{}的情况下,不可能一个语句体都不执行.因为else{}是收尾工作,他的作用就是前边的条件不满足,那么就会执行它.
if(){}else if(){}else{}
注意事项:
首先开头有且仅有一个if,后面会有0个到多个else if语句,最后可能没有else,有也仅仅只会有一个else.
switch语句
格式说明:
⚫ 表达式:(将要匹配的值) 取值为byte、short、int、char,JDK5以
后可以是枚举,JDK7以后可以是String。
⚫ case:后面跟的是要和表达式进行比较的值 (被匹配的值);只支持byte,short,int ,char,String ,枚举,不支持long和boolean。
⚫ break:表示中断,结束的意思,用来结束switch语句。
⚫ default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
执行流程:
① 首先计算表达式的值。
② 依次和case后面的值进行比较,如果有对应的值,就会执行相应的语
句,在执行的过程中,遇到break就会结束。
③ 如果所有的case后面的值和表达式的值都不匹配,就会执行default
里面的语句体,然后程序结束掉。
注意事项:
① case给出的值不允许重复
② case后面的值只能是常量,不能是变量
③ 不写break,发生case穿透,遇到break后才退出。
④case和default都不自带break;default放最后并不代表结束switch。default后也可以加break,只是平常放最后省略了。
循环结构
for循环
思考:
①初始化语句会执行几次?只有在最开始的时候执行了一次
②什么情况下循环体一次都执行不了?如果第一次进行条件判断的时候结果为false则循环体一次都执行不了
注意事项:
for循环的变量在小括号当中定义,只有循环内部才可以使用。
while循环
do-while循环
三种循环区别
1、for循环和while循环的区别
⚫for循环的特点:初始化表达式只在当前的循环范围内有效。出了循环的大括号以外,就无法使用了(tips:for循环的初始化表达式,也可以定义在外面)
⚫while循环的特点:初始化表达式是定义在循环的外面。出了循环也可以继续使用。
2.do-while循环和for、while循环的区别
⚫do-while循环会至少先执行一遍循环体。然后再做条件判断
⚫而for、while循环都是先判断条件。如果条件满足才执行循环体。如果条件不满足,就直接结束循环
死循环格式:
for(;;) { }
while(true) { }
do{ }while(true);
跳转控制语句
break;
在循环过程中,碰到break整个循环就终止
应用场景:break只能出现在循环中或者switch中
continue;
如果在循环过程中碰到了continue,则跳过本次循环,继续下次循环
跳转标号循环
break和continue只能跳出、跳过自己所在的那一层关系,如果想要跳出、跳过指定的一层就可以加入标号。
标号名:while(true){
switch (表达式){
case 1:
break 标号名;
}
}
for1:for(;;){
for(;;){
if(true){
break for1;
}
}
}
Random随机数
random.nextInt()
random.nextIn()的作用是随机生成一个int类型,因为int 的取值范围是 -2147483648——2147483647 ,所以生成的数也是处于这个范围,下面是示例代码。
Random random = new Random();
System.out.println("int:"+random.nextInt());
System.out.println("Integer.MIN-Integer.MAX:"+Integer.MIN_VALUE+"-"+Integer.MAX_VALUE);
输出:
int:-1849568817
Integer.MIN-Integer.MAX:-2147483648-2147483647
在上述代码中,我们使用了Integer.MIN_VALUE和Integer.MAX_VALUE,这两个是Integer类设定的最小值和最大值。在Java的八种基础数据类型中,除了boolean为true和false之外,其他的七种类型都是有MIN_VALUE和MAX_VALUE这两个值的,所以我们可以通过这几种基础数据类型相对应的引用数据类型+.MIN_VALUE或.MAX_VALUE就可以得到基础数据类型的最大值和最小值。
random.nextInt(int bound)
random.nextInt(int bound)方法的作用是生成一个0-参数bound范围内的随机数,但是要记住,参数bound必须是正数,不可为负数。
random.nextInt(int bound) 是[0,bound)左闭右开
random.nextLong()
random.nextLong()会随机生成一个Long类型,同理,因为Long的取值范围是 -9223372036854775808——9223372036854775807,所以也会生成一个这个区间的数。
random.nextDouble()
random.nextDouble()会生成一个0-1的double类型,而不是生成double取值范围中的数。
random.nextFloat()
random.nextFloat()会生成一个随机的0-1之间的浮点型,大体同double一样。
random.nextBoolean()
random.nextBoolean()会生成一个true或false