JavaSE语法



前言

“采菊东篱下,悠然见南山”     ----- 陶渊明《饮酒·其五》

在这里插入图片描述

1. 运算符

1.1 运算符

       运算符概述:用于执行各种操作的符号,如+,-,*,/等。

1.2 Java运算符分类

       Java运算符分为:算数运算符、自增自减运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符。

运算符名称运算符
算数运算符+ - * / %
自增自减运算符++ –
赋值运算符= += -= *= /= %=
关系运算符== != > >= < <=
逻辑运算符& | ! ^ && ||
三元运算符? :

1.3 算数运算符

1.3.1 分类

运算符运算示例结果
+正号+33
-负号-4-4
+5+510
-6-42
*2*36
/6/23
%取模/取余7%52

注意:整数相除,结果为整数,

           有小数参与,结果为小数,小数相除,结果可能不精确

1.3.2 小数相除不精确解析

       1. 原因

       浮点数在计算机中通常使用 IEEE 754 标准表示。这种表示方式不能精确地表示所有十进制小数,特别是那些不能精确表示为二进制小数的十进制小数。

       2. 代码示例

double a = 0.1;
double b = 0.2;
double sum = a + b;
System.out.println(sum); // 输出可能不是 0.3,而是 0.30000000000000004

3. 解决办法

       使用BigDecimal类,该类提供了精确的浮点数运算。它是处理高精度数值运算的推荐方式

package com.syh;

import java.math.BigDecimal;

public class Esther {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("0.1");
        BigDecimal b = new BigDecimal("0.2");
        BigDecimal sum = a.add(b);
        System.out.println(sum);   // 输出 0.3
    }
}

       使用 BigDecimal 虽然可以解决精度问题,但它的运算速度比原生的浮点数运算慢,因此在性能敏感的应用中需要权衡精度和性能。

1.4 自增自减运算符

1.4.1 分类

       自增和自减运算符可以写在变量前面或后面,写在前面表示先运算再赋值,写在后面表示先赋值再运算

运算符运算
++++x,x++
–y,y–

1.4.2 代码示例

package com.syh;

public class Esther {
    public static void main(String[] args) {
        // 1.先++
        int a = 1;
        int result1 = ++a;
        System.out.println("a的值:" + a);             // 2
        System.out.println("result1的值:" + result1); // 2
        System.out.println("----------");
        // 2.后++
        int b = 1;
        int result2 = b++;
        System.out.println("b的值:" + b);             // 2
        System.out.println("result2的值:" + result2); // 1
        System.out.println("----------");
        // 3.先--
        int c = 1;
        int result3 = --c;
        System.out.println("c的值:" + c);             // 0
        System.out.println("result3的值:" + result3); // 0
        System.out.println("----------");
        // 4.后--
        int d = 1;
        int result4 = d--;
        System.out.println("d的值:" + d);             // 0
        System.out.println("result4的值:" + result4); // 1
    }
}

       注意:单独使用的时候,++和–无论放在前边还是后边,结果是一样的

1.5 赋值运算符

运算符运算示例等价于
=赋值a = 4,b = 2a = 4,b = 2
+=加等于a = 4,b = 2,a += ba = a + b
-=减等于a = 4,b = 2,a -= ba = a - b
*=乘等于a = 4,b = 2,a *= ba = a * b
/=除等于a = 4,b = 2,a /= ba = a / b
%=模等于a = 4,b = 2,a %= ba = a % b

1.6 关系运算符

       关系运算符用于两个数值的比较,结果是一个布尔值,即true或false

符号解释
==就是判断左边跟右边是否相等,如果成立就是true,如果不成立就是false
!=就是判断左边跟右边是否不相等,如果成立就是true,如果不成立就是false
>就是判断左边是否大于右边,如果成立就是true,如果不成立就是false
>=就是判断左边是否大于等于右边,如果成立就是true,如果不成立就是false
<就是判断左边是否小于右边,如果成立就是true,如果不成立就是false
<=就是判断左边是否小于等于右边,如果成立就是true,如果不成立就是false

1.7 逻辑运算符

1.7.1 分类

运算符运算解释
&两边都为真,结果才是真,只要有一个为假,那么结果就是假
|两边都为假,结果才是假,只要有一个为真,那么结果就是真。
!非真为假,非假为真
^异或两边不同为真,两边相同为假
&&短路与和与相似,具有短路效果
||短路或和或相似,具有短路效果

1.7.2 运算规则

package com.syh;

public class Esther {
    public static void main(String[] args) {
        // &的运算规则(同真为真,其余为假)
        System.out.println(true & true);    // true
        System.out.println(true & false);   // false
        System.out.println(false & true);   // false
        System.out.println(false & false);  // false
        System.out.println("----------");

        // |的运算规则(同假为假,其余为真)
        System.out.println(true | true);    // true
        System.out.println(true | false);   // true
        System.out.println(false | true);   // true
        System.out.println(false | false);  // false
        System.out.println("----------");

        // !的运算规则(非真为假,非假为真)
        System.out.println(!true);    // false
        System.out.println(!false);   // true
        System.out.println("----------");

        // ^的运算规则(不同为真,相同为假)
        System.out.println(true ^ true);    // false
        System.out.println(true ^ false);   // true
        System.out.println(false ^ true);   // true
        System.out.println(false ^ false);  // false
    }
}

1.7.3 &和&&,|和||区别

       其一:具有短路效果,

              即&无论左边为true还是false,右边表达式都会进行运算,而&&左边为false,右边表达式不再进行运算,结果直接为假。

              即|无论左边为true还是false,右边表达式都会进行运算,而||左边为true,右边表达式不再进行运算,结果直接为真。

       其二:&,|可以进行数字运算,而&&,||不可以,

       其三:&& 、||、!最为常用

1.8 三元运算符

1.8.1 定义格式

       关系表达式 ? 表达式1 :表达式2 ;

1.8.2 计算规则:

  • 计算关系表达式的值。
  • 如果关系表达式的值为真,那么执行表达式1。
  • 如果关系表达式的值为假,那么执行表达式2。

1.9 运算符的优先级

优先级运算符
1[] ()
2++ – ~ !
3* / %
4+ -
5<< >> >>>
6< > <= >=
7== !=
8&
9^
10|
11&&
12||
13?:
14= += -= *= /= %=

       数字越小,运算符优先级越高。

       但是这些优先级不需要记忆,只需要知道其中一点:小括号优先于所有。

2. 表达式和语句

2.1 表达式

       用运算符把常量或者变量连接起来,符合Java语法的式子就是表达式

       例如:a + b这个整体就是表达式

       其中 + 为算数运算符的一种,所以这个表达式也称为算数表达式

2.2 语句

       语句:以分号结尾:例如 int a = 10;

3. 流程控制语句

3.1 流程控制语句分类

  • 顺序结构

  • 选择结构(if-else, switch)

  • 循环结构(for, while, do…while)

3.2 顺序结构

3.2.1 顺序结构

       是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

3.2.2 流程图

在这里插入图片描述

3.2.3 代码示例

package com.syh;

public class Esther {
    public static void main(String[] args) {
        // 顺序结构
        System.out.println("A");  // A
        System.out.println("B");  // B
        System.out.println("C");  // C
    }
}

3.3 选择结构

3.3.1 if语句

1.格式一

if (关系表达式) {
    语句体;	
}

执行流程:

       ①首先计算关系表达式的值

       ②如果关系表达式的值为true就执行语句体

       ③如果关系表达式的值为false就不执行语句体

       ④继续执行后面的语句内容

流程图:

在这里插入图片描述

代码示例:

package com.syh;

public class Esther {
    public static void main(String[] args) {
        // 1.定义两个变量
        int a = 10;
        int b = 20;
        // 2.判断a和b是否相等
        if (a == b) {
            System.out.println("a等于b");
        }
    }
}

       注意:如果我们要对一个布尔类型的变量进行判断,不要写==,直接把变量写在小括号中即可。

2. 格式2

if (关系表达式) {
    语句体1;	
} else {
    语句体2;	
}

执行流程:

       ①首先计算关系表达式的值

       ②如果关系表达式的值为true就执行语句体1

       ③如果关系表达式的值为false就执行语句体2

       ④继续执行后面的语句内容

在这里插入图片描述

代码示例:

public class IfDemo02 {
	public static void main(String[] args) {	
		// 1.定义两个变量
		int a = 10;
		int b = 20;
		// 2.判断a和b是否相等
		if(a > b) {
			System.out.println("a的值大于b");
		} else {
			System.out.println("a的值小于于b");
		}		
	}
}

3. 格式3

if (关系表达式1) {
    语句体1;	
} else if (关系表达式2) {
    语句体2;	
}else {
    语句体n+1;
}

执行流程:

       ①首先计算关系表达式1的值

       ②如果值为true就执行语句体1;如果值为false就计算关系表达式2的值

       ③如果值为true就执行语句体2;如果值为false就计算关系表达式3的值

       ④…

       ⑤如果没有任何关系表达式为true,就执行语句体n+1。

在这里插入图片描述

代码示例:

package com.syh;

public class Esther {
    public static void main(String args[]) {
        // 1.定义变量x
        int x = 30;
        // 2.对x进行判断
        if (x == 10) {
            System.out.print("x的值:10");
        } else if (x == 20) {
            System.out.print("x的值:20");
        } else if (x == 30) {
            System.out.print("x的值:30");
        } else {
            System.out.print("x的值:else 语句");
        }
    }
}

3.3.2 switch语句

1. 格式

switch (表达式) {
	case 1:
		语句体1;
		break;
	case 2:
		语句体2;
		break;
	...
	default:
		语句体n+1;
		break;
}

2. 执行流程:

  • 首先计算出表达式的值
  • 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。
  • 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

3. 流程图

在这里插入图片描述

4.代码示例:

package com.syh;

import java.util.Scanner;

public class Esther {
    public static void main(String[] args) {
        // 1.键盘录入一个整数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int week = sc.nextInt();
        
        // 2.switch语句
        switch (week) {
            case 1:
                System.out.println("今天是星期一");
                break;
            case 2:
                System.out.println("今天是星期二");
                break;
            case 3:
                System.out.println("今天是星期三");
                break;
            case 4:
                System.out.println("今天是星期四");
                break;
            case 5:
                System.out.println("今天是星期五");
                break;
            case 6:
                System.out.println("今天是星期六");
                break;
            case 7:
                System.out.println("今天是星期日");
                break;
            default:
                System.out.println("输入错误,没有这个星期");
                break;
        }
    }
}

5. switch的扩展知识:

  • case穿透:不写break会引发case穿透现象
  • switch在JDK12的新特性
switch (week) {
    case 1, 2, 3, 4, 5 -> System.out.println("工作日");
    case 6, 7 -> System.out.println("休息日");
    default -> System.out.println("没有这个星期");
}

3.4 循环结构

3.4.1 for循环

1. for循环格式:

for (初始化语句;条件判断语句;条件控制语句) {
	循环体语句;
}

2. 执行流程:

       ①执行初始化语句

       ②执行条件判断语句,看其结果是true还是false

              如果是false,循环结束

              如果是true,继续执行

       ③执行循环体语句

       ④执行条件控制语句

       ⑤回到②继续

3. 代码示例:求1~5的和

package com.syh;

public class Esther {
    public static void main(String[] args) {
        // 1.定义sum变量
        int sum = 0;
        // for循环
        for (int i = 1; i <= 5; i++) {
            sum += i;
        }
        System.out.println("1~5的和:" + sum);  // 15
    }
}

3.4.2 while循环

1. 格式:

初始化语句;
while(条件判断语句){
	循环体;
	条件控制语句;
}

2. 示例代码:输出1~5

package com.syh;

public class Esther {
    public static void main(String[] args) {
        // 1.定义变量i
        int i = 1;
        // 2.while循环
        while(i <= 5){
            System.out.println("i = " + i);
            i++;
        }
    }
}

3.4.3 do…while循环

1. 格式:

初始化语句;
do{
    循环体;
    条件控制语句;
}while(条件判断语句);

       特点:先执行,再判断。

2. 示例代码:输出1~5

package com.syh;

public class Esther {
    public static void main(String[] args) {
        // 1.定义变量x
        int x = 1;
        // 2.do-while循环
        do {
            System.out.println("x = " + x);
            x++;
        } while (x <= 5);
    }
}

3.4.4 三种格式的区别:

  • 当知道循环次数或者循环范围的时候,用for循环。

  • 当不知道循环次数,也不知道循环范围,但是知道循环的结束条件时,用while循环。

4. 条件控制语句

       条件控制语句有两个,分别为break和continue

4.1 break语句

       break 语句表示退出当前循环,继续执行循环外的代码,不能单独存在,可以用在switch和循环中

       代码示例:

package com.syh;

public class Esther {
    public static void main(String[] args) {
        // 1.for循环打印1~5
        for (int i = 1; i <= 5; i++) {
            // 2.i = 3时,结束整个循环
            if (i == 3) {
                break;
            }
            // 3.输出变量i
            System.out.println("i = " + i);
        }
    }
}

4.2 continue语句

       continue语句表示跳过本次循环,继续执行下次循环,不能单独存在的。只能存在于循环当中。

       代码示例:

package com.syh;

public class Esther {
    public static void main(String[] args) {
        // 1.for循环打印1~5
        for (int i = 1; i <= 5; i++) {
            // 2.i = 3时,结束本次循环
            if (i == 3) {
                continue;
            }
            // 3.输出变量i
            System.out.println("i = " + i);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值