Java语言基础笔记
运算符和表达式
-
运算符:对常量和变量进行操作的符号称为运算符
-
运算符的要素:优先级和结合性
-
表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式;不同运算符连接的式子体现的是不同类型的表达式
算数运算符
-
类型
-
自增自减运算符
如果++或者–在变量的后面,先拿变量参与操作,后变量做++或者–
如果++或者–在变量的前面,先变量做++或者–,后拿变量参与操作 -
字符和字符串参与加法运算
- 字符参与运算:其实是拿该字符对应的数值来操作
- 字符串参与运算:这里其实做的不是加法运算,而是字符串拼接。字符串和其他类型的数据做拼接,结果是字符串类型的。
- 例子
public class OperatorDemo2 {
public static void main(String[] args) {
//字符参与运算
int a = 10;
char ch = 'a';
System.out.println(a + ch); // 输出107
System.out.println("----------------");
//字符串做加法
System.out.println(10+20+"hello"); //输出30hello
}
}
赋值运算符
- 类型
- 注意:结合赋值运算符具有自动强制类型转换功能
-
若x是一个int,x+=3.5等价于 x = (int) (x + 3.5)
关系运算符
- 类型
- 注意:== 和 = 要区分开
逻辑运算符
- 类型
- 注意
- 可用于连接关系表达式
- !:偶数个不改变本身
- &&,||:具有短路效果
三元运算符
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
-
格式: 数据类型 变量名 = (关系表达式)? 表达式1:表达式2;
位运算符
- 位运算符:按位模式处理,可以使用掩码技术得到整数中的各个位
- 类型:
&(“and”)
|(“or”)
^(“xor”)
~(“not”)
>>(按位模式右移):用符号位填充最高位
>>>(按位模式右移):用0填充最高位
<<(按位模式左移):不存在<<<运算符
键盘录入
基本步骤
- 导包(位置放到class定义的上面)
-
import java.util.Scanner;
- 创建对象
-
Scanner sc = new Scanner(System.in);
- 接收数据
-
int x = sc.nextInt();
案例
从控制台读取2个数然后将它们的和输出:
public class ScannerDemo {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//给出提示
System.out.println("请输入第一个整数:");
int a = sc.nextInt();
System.out.println("请输入第二个整数:");
int b = sc.nextInt();
//对数据求和
int sum = a + b;
//输出结果
System.out.println("sum:"+sum);
}
}
控制流程
顺序结构
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的
选择结构
if语句
- 第一种格式:
-
if (condition)statement
2. 第二种格式
-
if (condition) statement1 else statement2
3. 第三种格式
-
if(关系表达式1) { 语句体1; } else if (关系表达式2) { 语句体2; } … else { 语句体n+1; }
注意:else子句会与最邻近的if构成一组
switch语句
-
格式:
-
switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; case 值3: 语句体3; break; ... default: 语句体n+1; break; }
-
注意:
【1】表达式的值可以是 byte short int char 枚举enum 字符串字面量
【2】case后面跟的是要和表达式进行比较的值
【3】default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似 -
执行流程
循环结构
while
基本格式
-
while(判断条件语句) { 循环体语句; }
扩展格式
-
初始化语句; while(判断条件语句) { 循环体语句; 控制条件语句; }
执行流程
do while
基本格式
-
do { 循环体语句; } while((判断条件语句);
扩展格式
-
初始化语句; do { 循环体语句; 控制条件语句; } while((判断条件语句);
执行流程
for
格式:
-
for (初始化语句; 判断条件语句; 控制条件语句) { 循环体语句; }
执行流程
注意
- do…while循环语句至少执行一次循环体。
- for和while循环语句要先进行条件的判断,然后看是否执行循环体语句(有可能一次也不执行)
练习
求1-100的数据和
for循环实现
int sum = 0;
for(int x=1; x<=100; x++) {
//累加即可
sum += x;
}
System.out.println("sum:"+sum);
while循环实现
int x=1;
while(x<=100) {
//累加即可
sum += x;
x++;
}
//输出结果
System.out.println("sum:"+sum);
for循环练习打印水仙花数
-
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身
-
举例:153是一个水仙花数:1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
public class ForTest {
public static void main(String[] args) {
//三位数其实是告诉了我们范围,这个用for循环实现
for(int x=100; x<1000; x++) {
//获取每一个三位数的个位,十位,百位(规律:变成低位再对10取余)
int ge = x%10;
int shi = x/10%10;
int bai = x/10/10%10;
//拿个位,十位,百位的立方和和该数本身进行比较
if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x) {
//如果相等,就说明该数是水仙花数,在控制台打印
System.out.println(x);
}
}
}
}
循环嵌套练习打印99乘法表
public class ForForTest1 {
public static void main(String[] args) {
for(int x=1; x<=9; x++) {
for(int y=1; y<=x; y++)
System.out.print(y+"*"+x+"="+y*x+"\t");
System.out.println(); //打印空行(换行)
}
}
}
中断控制流程的语句
break&continue:离开使用场景的存在是没有意义的
break
作用:
- 跳出单层循环
- 跳出多层循环:带标签的跳出(标签名要符合Java的命名规范)
-
格式: 标签名:循环语句
- 例如
for(int x=1; x<=5; x++) {
if(x == 3) break; //作用1:跳出单层循环
System.out.println("HelloWorld"); //只会输出前2次
wc:
for(int x=1; x<=3; x++) {
for(int y=1; y<=4; y++) {
if(y == 2) break wc; //作用2:跳出多层循环
System.out.print("*"); //最后只会输出1个“*”
}
System.out.println();
}
注意:
5. 标签必须放在希望跳出的最外层循环之前,并且紧跟一个冒号
6. 只能跳出语句块,不能跳进语句块
7. 使用break语句后:建议需要检测是正常跳出还是由break跳出
continue
- 作用:退出本次循环
- 例如
for(int x=1; x<=5; x++) {
if(x == 3) break; // 跳出本次循环
System.out.println("HelloWorld"); //第三次的helloworld不会输出
Random随机数
• 作用:用于产生一个随机数
• 使用步骤 (和Scanner类似)
- 导包: import java.util.Random;
- 创建对象:Random r = new Random();
- 获取随机数:int number = r.nextInt(10);
- 注意:
【1】产生的数据在0到10之间,包括0,不包括10,即 [0,10)
【2】括号里面的10是可以变化的,如果是100,就是 [0,100) 之间的数据
【3】要是需要获取1~100的数:int number = r.nextInt(100)+1;