JavaSE学习笔记 Day3

JavaSE学习笔记 Day3

[上一篇](https://blog.csdn.net/CHiN_951/article/details/134538976)


文章目录

  • JavaSE学习笔记 Day3
    • 二、java语言基础
      • ···
      • 2.9数据类型转换
        • 2.9.1自动类型转换
        • 2.9.2强制类型转换
        • 2.9.3char类型的转换
        • 2.9.4补充
    • 三、运算符
      • 3.1数学运算符
      • 3.2自增与自减
      • 3.3赋值运算符
      • 3.4关系运算符
      • 3.5逻辑运算符
      • 3.6三木运算符
      • 3.7控制台录入
    • 四、流程控制语句
      • 4.1分支结构
        • 4.1.1if结构
        • 4.1.2if/else结构
        • 4.1.3多重if结构
        • 4.1.4if结构嵌套
        • 4.1.5if中的细节


二、java语言基础

···

2.9数据类型转换

基本数据类型之间是可以相互转换的,这种转换可分为如下两种
自动类型转换
小范围的类型可以自动转换为大范围类型
强制类型转换
大范围类型若想转换为小范围类型需要强制类型转换

2.9.1自动类型转换

在java中有个符号叫等号,等号的作用是赋值(区别与数学中)
要求等号的左右两侧的类型要保持一致,若不一致就需要类型转换
等号的运算顺序是从右向左的
java是强类型语言,要求等号左右类型必须保持一致

byte short int long float doule 按照此顺序进行自动类型转换
boolean类型不参与转换
char特殊情况,使用较少
从前向后就是自动类型转换
自动类型转换又称隐式类型转换,无需做任何处理

//	自动类型转换
public static void main(String[] args) {
    //		=从右向左的
    int a = 10;//定义变量

    //		double = int 将int类型赋值给double类型
    double d = a;

    //		float = double 将double赋值给float
    //		float f = d;
}
2.9.2强制类型转换

在数据类型兼容的情况下,大转小就是强制类型转换
又称为显示类型转换
顺序和自动类型转换相反
强制类型转换会丢失精度

语法
目标类型 = (目标类型) 源类型;

public static void main(String[] args) {
    double d = 10.022222222222222222222222;

    //		float = double
    float f = (float) d;

    System.out.println(f);
}
2.9.3char类型的转换

char类型的取值是0~65535的
char的范围是在int取值范围之内的,char向int转换是自动类型,int向char是强制类型

char可以理解为是完全正向的short类型,因为两者的范围是一样的都是65536个数

public static void main(String[] args) {
    char c = '你';
    //		byte = char 强制类型转换
    byte b = (byte) c;
    //		byte = char 强制类型转换
    short s = (short)c;


    b = 10;
    //		char = byte 强制类型转换
    c = (char)b;
    //		char = short 强制类型转换
    c = (char)s;
}
2.9.4补充

超出范围的强制类型转换,需要进行二进制操作的

public static void main(String[] args) {
    //		-128下一位(-129)就是127
    int i = -129;
    byte b = (byte) i;
    System.out.println(b);

    //		127下一位(128)是-128
    i = 128;
    b = (byte) i;
    System.out.println(b);
}

三、运算符

3.1数学运算符

+
1.数值相加 在java中做计算时最小的返回结果为int,最大结果为double
char本身可以当做数值型类处理
2.正数
3.字符串拼接 拼接的顺序是从左向右的,所有和字符串拼接的结果都是字符串

public static void main(String[] args) {
    //		1.加法计算
    int a = 10;
    int b = 20;
    System.out.println(a + b);

    char c = 'a';
    //		char+int结果为int类型
    System.out.println(c + 1);

    byte bb = 10;
    short ss = 20;
    char cc = 'h';
    //		相加的结果可以使用哪些类型接收:int long float double
    //		int result = bb + ss + cc;
    //		long result = bb + ss + cc;
    //		float result = bb + ss + cc;
    double result = bb + ss + cc;

    //		2.正数
    System.out.println(+10);

    //		3.字符串拼接 ""空串:没有任何内容的字符串
    System.out.println(2+""+3);//23
    System.out.println(""+2+3);//23
    System.out.println(2+3+"");//5
    //		小括号先计算
    System.out.println(""+(2+3));//5
}

-
1.数值相减 2.负数

public static void main(String[] args) {
    int a = 10;
    int b = 10;

    System.out.println(a - b);

    byte bb = 10;
    short ss = 10;
    char cc = 10;

    int result = bb + ss - cc;
}

*
乘法运算,注意乘法时最容器超出范围

public static void main(String[] args) {
    System.out.println(10 * 10);
    System.out.println(1000000000 * 1000000000);
}

/
java中所有的int/int的结果为int(取整)
除数为0时,会抛出异常ArithmeticException(数学异常),异常之下的代码不会执行了
除数为0.0时,结果为Infinity(无穷)
0/0.0时,结果为NaN(Not a Number,不是一个数,非数)

public static void main(String[] args) {
    System.out.println(10 / 2);

    System.out.println(10 / 3);//结果为3 取整

    //		ArithmeticException数学异常
    //		System.out.println(10 / 0);//除0 /by zero

    //		异常之下的代码是无法执行的
    System.out.println("嗨嗨嗨");

    System.out.println(10 / 0.0);//Infinity

    System.out.println(0 / 0.0);//NaN
}

%
模运算,取余运算符

public static void main(String[] args) {
    System.out.println(5 % 3);//2
    System.out.println(5 % -3);//2
    System.out.println(-5 % 3);//-2
    System.out.println(-5 % -3);//-2
}

3.2自增与自减

++ –
i++ 和 ++i
语法上都是自增
i-- 和 --i
语法上都是自减

过程中有区别
i++ 先使用,再自增
++i 先自增,再使用

public static void main(String[] args) {
    int i = 10;
    i ++;
    System.out.println(i);

    int j = 10;
    ++ j;
    System.out.println(j);

    System.out.println("------------------------------");

    int a = 2;
    System.out.println(a ++);//2 ==> 3 在语句之内先使用对应的值
    System.out.println(a);//3
    System.out.println(++ a);//4 在语句之内后使用对应的值
}

3.3赋值运算符

赋值运算符的优先级最低
= 赋值 从右向左
+= sum+=i 等价与 sum = sum + i
-= sum-=i 等价与 sum = sum - i
*= 同上
/= 同上
%= 同上

public static void main(String[] args) {
    int a = 10;

    a += 10;//a = a + 10;
    System.out.println(a);

    a -= 5;
    System.out.println(a);

    a *= 2;
    System.out.println(a);

    a /= 10;
    System.out.println(a);

    a %= 3;
    System.out.println(a);
    System.out.println("-----------------------------");
    //		++ 和 += 自带类型转换 但是 s = s + i不能类型转换
    //		byte/short自增可以使用++ 和 +=1 但 s=s+1不能使用
    byte i = 10;
    i ++;
    System.out.println(i);

    i += 1;
    System.out.println(i);

    /*i = i + 1;//1是int类型
		System.out.println(i);*/
}

3.4关系运算符

比较运算符
返回结果都为boolean
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于

public static void main(String[] args) {
    System.out.println(1 > 2);
    System.out.println(1 < 2);

    System.out.println(1 >= 2);
    System.out.println(1 <= 2);

    System.out.println(1 == 2);
    System.out.println(1 != 2);
}

3.5逻辑运算符

逻辑运算符由关系运算符组成,返回结果同样为boolean
&&/& 和
两个条件并列
同真为真,有假则假*
||/| 或
两天条件选一个
同假为假,有真则真*
! 是
是非转换
非真即假,非假即真*

public static void main(String[] args) {
    System.out.println(true && true);
    System.out.println(1 < 2 && 3 < 4);

    System.out.println(true && false);
    System.out.println(false && true);
    System.out.println(false && false);
    //		&& 和 &结果是一样的
    System.out.println(true & true);
    System.out.println(true & false);
    System.out.println(false & true);
    System.out.println(false & false);

    System.out.println("---------------------------------------");
    System.out.println(true || true);
    System.out.println(true || false);
    System.out.println(false || true);
    System.out.println(false || false);

    System.out.println(true | true);
    System.out.println(true | false);
    System.out.println(false | true);
    System.out.println(false | false);
    System.out.println("---------------------------------------");
    System.out.println(!true);
    System.out.println(!false);
}

&& 和 & 的区别
&&短路语句,效率高
若条件1为false,条件2就不执行
&不短路
若条件1为false,条件2正常执行

|| 和 | 的区别
||短路语句,效率高
若条件1为true,条件2就不执行
|不短路
若条件1为true,条件2正常执行

public static void main(String[] args) {
    int a = 10;
    System.out.println(1 > 2 && a ++ > 10);//条件1为:false 条件2不执行了 a没有进行++
    System.out.println(a);

    int b = 10;
    System.out.println(1 > 2 & b ++ > 10);//不短路
    System.out.println(b);

    int c = 10;
    System.out.println(1 < 2 || c ++ > 10);
    System.out.println(c);

    int d = 10;
    System.out.println(1 < 2 | d ++ > 10);
    System.out.println(d);
}

3.6三木运算符

三元运算/三目运算
boolean?结果1:结果2;
boolean为true时,得到结果1
boolean为false时,得到结果2

public static void main(String[] args) {
    System.out.println("请输入java成绩:");
    int score = 59;

    System.out.println(score >= 60 ? "奖励自己一顿大餐" : "请大家吃雪糕");
}

3.7控制台录入

使用java的控制台,接收用户输入的信息,和程序之间进行交互
步骤:
1.创建控制台扫描器Scanner
2.引入Scanner工具类
3.使用Scanner对控制台输入的内容进行扫描
扫描器(Scanner)在一个类中可以使用多次,只定义一次即可
常用的接收类型:int double String

//	2.引入Scanner
import java.util.Scanner;

public class Demo12 {

	public static void main(String[] args) {
//		1.定义扫描器
		Scanner input = new Scanner(System.in);//ctrl+shift+o
		
//		3.对输入的内容进行扫描
		
//		情况1:int类型
		System.out.println("请输入一个int类型的值:");
		int a = input.nextInt();
		System.out.println("您输入的int类型为:"+a);
		
//		情况2:double类型
		System.out.println("请输入一个double类型的值:");
		double d = input.nextDouble();
		System.out.println(d);
		
//		情况3:String类型
		System.out.println("请输入一个String类型的值:");
		String str = input.next();
		System.out.println(str);
		
//		其他情况
		System.out.println("请输入一个byte类型的值:");
		byte b = input.nextByte();
		System.out.println(b);
		
		System.out.println("请输入一个boolean类型的值:");
		boolean boo = input.nextBoolean();
		System.out.println(boo);
//		char需要特殊记忆,使用较少
		System.out.println("请输入一个char类型的值:");
		char c = input.next().charAt(0);
		System.out.println(c);
	}
}

四、流程控制语句

可以通过流程控制语句改变代码的执行顺序
默认的顺序:从上向下,从左向右
分支结构:有选择的执行或者跳过某段代码
循环结构:重复执行某段代码

4.1分支结构

4.1.1if结构

语法
if(boolean){
//代码段
}

当boolean类型为true时执行代码段;false时跳过

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("请输入钟良的余额:");

    double balance = input.nextDouble();

    //		当boolean为true会执行代码段,为false时跳过
    if(balance < 10) {
        System.out.println("我没钱了,妈给我打点钱");
    }

    System.out.println("程序结束");
}
4.1.2if/else结构

语法
if(boolean){
//代码段1
}else{
//代码段2
}

当boolean类型为true时执行代码段1;false时执行代码段2

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("请输入钟良的余额:");

    double balance = input.nextDouble();
    //		实际开发中,尽量少的使用else语句
    /*if(balance < 10) {
			System.out.println("我没钱了,妈给我打点钱");
		}else {
			System.out.println("我要吃一顿大餐,9.9疯狂星期四");
		}*/
    //		更推荐写如下代码
    if(balance < 10) {
        System.out.println("我没钱了,妈给我打点钱");
    }
    if(balance >= 10) {
        System.out.println("我要吃一顿大餐,9.9疯狂星期四");
    }
    System.out.println("程序结束");
}
4.1.3多重if结构

语法
if(boolean){
//代码段1
}else if(boolean){
// 隐藏条件,不满足上面的条件,满足当前条件是执行
//代码段2
}else if(boolean){
//代码段3
}…else if(boolean){
//代码段n
}else {
// 不符合上面条件执行的代码块
}

执行条件为true的代码段,上面的判断会拦截下面的判断

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("请输入钟良的余额:");

    double balance = input.nextDouble();

    if(balance >= 100) {
        System.out.println("吃点好的,来份臭豆腐");
    }/*else if(balance >= 60){
//			逻辑出了问题 
			System.out.println("嘿嘿嘿");
		}*/else if(balance >= 90 /*隐藏条件&& balance < 100 可以不写*/) {
            System.out.println("鸡架拌面");
        }else if(balance >= 80) {
            System.out.println("打卤面");
        }else {
            System.out.println("回家煮鸡蛋吃");
        }

    System.out.println("程序结束");
}
4.1.4if结构嵌套

语法
if(条件1){
if(条件2){
同时满足条件1条件2
}else{
满足条件1但不满足条件2
}
}else{
不满足条件1,与条件2没有关系
}

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("请输入百米的时间:");

    double time = input.nextDouble();

    if(time < 10) {
        System.out.println("请输入性别:");
        String gender = input.next();
        //			字符串的判断使用equals方法  使用"男"和gender去比较
        if("男".equals(gender)) {
            System.out.println("进入男子组决赛");
        }else {
            System.out.println("进入女子组决赛");
        }
    } else {
        System.out.println("哥们在接着练吧");
    }
}
4.1.5if中的细节

1.java中基本数据类型的比较使用 ==,字符串类型的比较使用str1.equals(str2) 若一致返回true,否则返回false

String str1 = "hello";
String str2 = "hello";
//		内容相同返回true,内容不一致返回false
System.out.println(str1.equals(str2));

2.当且仅当,if结构有一条语句时,{}可以省略

if(str1.equals(str2)) 
    System.out.println("好");

3.多重if时,要注意逻辑错误,要将更严苛的条件写在前面

rintln("嘿嘿嘿");
		}*/else if(balance >= 90 /*隐藏条件&& balance < 100 可以不写*/) {
            System.out.println("鸡架拌面");
        }else if(balance >= 80) {
            System.out.println("打卤面");
        }else {
            System.out.println("回家煮鸡蛋吃");
        }

    System.out.println("程序结束");
}

你可能感兴趣的:(JavaSE,笔记,java)