Java笔记2

目录

一、四种进制

1.十进制

2.二进制

3.八进制

4.十六进制

二、正负

1.表示方式

2.原码、反码与补码

三、JAVA使用的字符集

1.转义字符

四、基本数据类型转换

1.自动类型转换(隐式类型转换)

①把存储范围小的量赋给存储范围大的变量

②当存储范围小的数据类型与存储范围大的数据类型混合运算,会按照范围大的计算

③当byte、short、char数据类型进行算术运算,按照int处理

2.强制类型转换

①把存储范围大的值赋给存储范围小的值,可能会损失精度或溢出

②boolean类型不参与转换

③当某个值想要提升数据类型时,也可以使用强制类型转换

3.特殊的数据类型转换

①任意数据类型与String类型数据进行“+”运算时

②String类型不能通过强制类型转换转化为其他类型

五、运算符

1.算术运算符

2.赋值运算符  =

3.比较运算符

4.逻辑运算符

5.位运算符(二进制)

6.三元运算符

六、流程控制

1.顺序结构

        使用scanner对象从控制台读取数据

        import java.util.Scanner;

2.分支结构

①if语句

②if…else语句

③if…else if…else语句

④if…else嵌套

⑤switch…case语句


一、四种进制

1.十进制

        正常表示

System.out.println(10);

2.二进制

        0b或0B开头

System.out.println(0b10);

3.八进制

        0开头

System.out.println(010);

4.十六进制

        0x或0X开头

System.out.println(0x10);

二、正负

1byte=8bit

1.表示方式

用最高位数字表示正负,0为正数,1为负数

负数:1000 0001   -1          1000 0000    -128

正数:0000 0000    0           0111 1111     127

2.原码、反码与补码

正数的原码,反码,补码相同

负数:

        原码:转化为二进制,最高位取1

        反码:除最高位,其余位取反

        补码:反码+1

三、JAVA使用的字符集

Unicode字符集

1.转义字符

\n \r \t \\ \" \' \b
换行 回车键 Tab键 \键 "键 '键 删除键

四、基本数据类型转换

1.自动类型转换(隐式类型转换)

将取值范围小的类型自动提升为取值范围大的数据类型

        取值范围从小到大

                byte<short=char<int<long<float<double

①把存储范围小的量赋给存储范围大的变量

public class Translation{
    public static void main(String [] args){
        double d = 10;
        byte b = 130;//损坏 byte∈[-128,127]
        long num = 12345;
        long bigNum = 12345678912L;//右边超过int范围要加L
    }
}

②当存储范围小的数据类型与存储范围大的数据类型混合运算,会按照范围大的计算

③当byte、short、char数据类型进行算术运算,按照int处理

2.强制类型转换

        格式:数据类型  变量名 = (数据类型)被强制转换的数据

①把存储范围大的值赋给存储范围小的值,可能会损失精度或溢出

public class Date{
    public static void main{

        int i = (int)3.14;
        double d = 1.2;
        int num = (int)d;//损失精度
    }
}

②boolean类型不参与转换

③当某个值想要提升数据类型时,也可以使用强制类型转换

public class Date{
    public static void main{

        int i = 1;
        int d = 2;
        double shang = (double)i/j;//无风险
    }
}

​

3.特殊的数据类型转换

①任意数据类型与String类型数据进行“+”运算时

        输出结果一定是String类型(其他类型在前先按其他类型运算方式计算)

public class Translation{

    public static void main(String [] args){

        
        System.out.println("" + 1 + 2);//12
        System.out.println(5 + 10 + "abc");//15abc

    }
}

可以通过""+……将其他类型的数据转化为String类型

②String类型不能通过强制类型转换转化为其他类型

五、运算符

1.算术运算符

+ - * / % ++ --
正/加/字符串连接 负/减 除(取整) 取余(取模) 自增 自减

除数不能为0

如果不能整除,会自动舍弃小数部分

结果的正负与被模数正负一致,结果可能是小数

++在前,先运算后取值

a=2;b=++a

a是3,b是3

++在后先取值后运算

a=2;b=a++

a是3,b是2

--在前,先运算后取值

a=2;b=--a

a是1,b是1

--在后,先取值后运算

a=2;b=a--

a是1,b是2

2.赋值运算符  =

运算方向:从右到左

例:n += (n++) + (++n)

public class Give{
    public static void main(String[] args){ 

        int n = 10;
        n += (n++) + (++n);


        // 实际运行的结果是32
        System.out.println(n);
    }
}
​

借助字节码文件的分析:javap -c Give.class

public class Give {
    public static void main(String[] args){

        //short s = 2;
        //①,错误:不兼容的类型,从int转换为short可能会有损失
        //原因:byte、short、char做数学运算时就自动转换为int类型
        //s+2是int类型
        //s = s + 2;

        //②,编译通过,说明+=有自动的类型转换
        /* s += 2;

        System.out.println(s);

        int i = 1;
        i *= 0.1;
        System.out.println(i);
        i ++;
        System.out.println(i); */

        /* int m =2;
        int n = 3;

        先取m=2,计算“n*=m”,再计算++
        n *= m++;
        System.out.println("m=" + m);
        System.out.println("n=" + n); */

        /* 
            0: bipush        10
            2: istore_1     将10赋值给n
        */
        int n=10;

        /* 
            3: iload_1      读取变量n的值   [10+?]
            4: iload_1      读取变量n的值   [10+10]
            5: iinc          1, 1   执行自增1   n从10变成11
            8: iinc          1, 1   执行自增1   n从11变成12
            11: iload_1     读取变量n的值,n为12
            12: iadd        执行加法10+10=20
            13: iadd        执行加法12+20=32
            14: istore_1    把最后一个加法的值32赋给n
        */
        n += (n++) + (++n);

        System.out.println(n);
    }
}

除+=还有-=、*=、/=、%=

3.比较运算符

        最终返回布尔值true/false

== != < > <= >= instanceof
是否等于 是否不等于 是否小于 是否大于 是否小于等于 是否大于等于

是否是类的对象

public class Compare{
    
    public static void main(String[] args){

        System.out.println(5 == 6);

        System.out.println("Hello" instanceof String);

        boolean b1 = false;

        if(b1 == true){
            System.out.println("结果是真的");
        }else{
            System.out.println("结果为假");
        }
    }
}

4.逻辑运算符

& && | || ! ^
逻辑与 短路与 逻辑或 短路或 取反 异或

前面即使判断出结果,后面还会执行

有短路效果

只要前面的表达式为false,整体就是false,后面不执行

前面即使判断出结果,后面还会执行

带短路效果

只要前面的表达式为true,整体就是true,后面不执行

相同为false

不同为true

5.位运算符(二进制)

符号 含义 规则 例子
<< 左移 空位补0,被移除的高位丢弃,空缺位补0 3<<2        12
>> 右移

当最高位是0,右移后,空缺位补0

当最高位是1,右移后,空缺位补1

4>>1        2
>>> 无符号右移 被移位二进制最高位无论是0或者是1,空缺位都用0补 3>>>1        1
& 按位与 二进制位进行&运算,只有1&1时结果是1,否则是0 6&3        2
| 按位或 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1 6|3        7
^ 按位异或 二进制位相同是0,二进制位不同是1 6^3        5
~ 按补码取反 ~6        -7

6.三元运算符

        格式:(条件表达式)?表达式1:表达式2;

true,结果为表达式1

false,结果为表达式2

public class Give{
    public static void main(String[] args){
        int i = 30;
        int j = 20;
        String result = (i>j)?"i比j大":"i比j小";
    }
}

六、流程控制

1.顺序结构

        使用scanner对象从控制台读取数据

导入scanner类

        import java.util.Scanner;

// 导入Scanner类
import java.util.Scanner;
​
public class Demo16Scanner {
    
    public static void main(String[] args){
        
        // 1.创建Scanner对象
        Scanner scanner = new Scanner(System.in);
        
        // 2.读取int类型数据
        System.out.print("请输入一个整数:");
        
        // 调用scanner对象的nextInt()方法
        int age = scanner.nextInt();
        
        System.out.println("age="+age);
        
        // 3.读取boolean类型数据
        System.out.print("请输入一个布尔值:");
        boolean flag = scanner.nextBoolean();
        
        System.out.println("flag="+flag);
        
        // 4.读取字符串
        System.out.print("请输入一个字符串:");
        
        // next()方法会因为空格而终止读取
        String strValue = scanner.next();
        System.out.println("strValue="+strValue);
        
        // 建议使用:
        // nextLine()方法不会因为空格而终止读取
        strValue = scanner.nextLine();
        System.out.println("strValue="+strValue);
        
    }
    
}

2.分支结构

①if语句

// 创建Scanner对象
Scanner scanner = new Scanner(System.in);

public class If{
​    public static void main(String[] args){
        System.out.print("请输入i:");
        int i = scanner.nextInt();
​
        System.out.print("请输入j:");
        int j = scanner.nextInt();
​
        // 测试使用单独的if语句
        // 当if(判断条件)为true时执行{}中的语句
        if (i > j){
        System.out.println("i 比 j 大");
    }
​
}
如果if语句块中只有一条语句,可以省略{}
import java.util.Scanner;

public class If{
	
	public static void main(String[] args){
		
		//创建scanner对象
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("请输入i:");
		int i = scanner.nextInt();
		
		System.out.print("请输入j:");
		int j = scanner.nextInt();
		
		//省略{}
		if (i < j)
            System.out.println("i 比 j 小");
		
		System.out.println("后续操作");
	}
}

对于布尔值

import java.util.Scanner;

public class If{
	
	public static void main(String[] args){
		
		// 读取一个布尔值
        System.out.print("请输入flag:");
        boolean flag = scanner.nextBoolean();
​
        // 没有必要写flag == true
        if (flag) {
            System.out.println("flag是真的");
        }
	}
}

②if…else语句

③if…else if…else语句

④if…else嵌套

import java.util.Scanner;

public class If{
	
	public static void main(String[] args){
		
		//创建scanner对象
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("请输入i:");
        int i = scanner.nextInt();
​
        System.out.print("请输入j:");
        int j = scanner.nextInt();
​
        if (i > j){                             // 执行条件判断①
            System.out.println("i 比 j 大");  // ①为true时执行
        } else if (i < j) {                     // ①为false继续执行下一个条件判断②
            System.out.println("i 比 j 小");  // ②为true时执行
        } else {                                
            System.out.println("i 和 j 相等"); // ②为false时执行
    
        // 嵌套在其他if...else结构内的if
            if (m > n){
                System.out.println("m 比 n 大");
            }
        }
​
	}
}

⑤switch…case语句

        当case都不满足,则执行default分支

        break:跳出循环

import java.util.Scanner;
​
public class Demo18SwitchCase {
    
    public static void main(String[] args){
        
        // 创建Scanner对象
        Scanner scanner = new Scanner(System.in);
​
        System.out.print("请输入季节:");
        String season = scanner.nextLine();
        
        // 使用season变量的值和后面的case依次进行比较
        // 遇到一个满足条件的case,那么后面的都会被执行,包括default分支
        // 除非在某个case中使用了break关键字,停止了case的执行。
        switch(season){
            case "spring":
                System.out.println("我喜欢春天");
                
                break ;
            case "summer":
                System.out.println("我喜欢夏天");
                
                break ;
            case "autumn":
                System.out.println("我喜欢秋天");
                
                break ;
            case "winter":
                System.out.println("我喜欢冬天");
                
                break ;
                
            // 当前面每一个case都不匹配时执行default分支(默认分支)
            default:
                System.out.println("我喜欢梅雨季节");
        }
        
    }
    
}

上一篇:Java用户交互Scanner


下一篇:递归结构