JAVASEday03

本文介绍了Java中的引用数据类型,包括Scanner的使用,如接收不同类型的键盘输入,并展示了如何处理enter遗留问题。此外,讲解了流程控制语句,如if...else、switch的选择结构以及循环结构(for、while、do...while),并提供了实例代码展示。
摘要由CSDN通过智能技术生成

JAVASEday03

一、这里我们说引用数据类型

大部分的引用数据类型都具有以下结构:

1、导包

​ 告诉java当前要使用的引用数据类型的位置
​ import 包名.类名;
​ 位置: 类的上面

2、构建当前引用数据类型的引用或变量

	引用数据类型 变量名或引用 = new 引用数据类型();

3、使用功能

​ 引用.功能名字();

这里我们接受Scanner: 接收键盘输入

​ 1、导包

    import java.util.Scanner;

​ 2.构建Scanner的引用|变量

    Scanner sc = new Scanner(System.in);

​ 3、功能

    // 接收用户键盘输入byte类型的数据
    sc.nextByte();
    //接收用户键盘输入short类型的数据
    sc.nextShort();
    sc.nextInt();
    sc.nextLong();
    sc.nextFloat();
    sc.nextDouble();
    //从有效字符开始接收,如果遇到空格停止接收,enter代表功能的结束
    sc.next();//接收用户键盘输入String类型的数据  
    //以上的系列next功能不接受enter键,从有效字符开始接收
    sc.nextLine();//接收用户键盘输入String类型的数据,接收一整行内容,作为String字符串类型的数据,包含空格,接收到enter结束功能
    sc.close();//在当前类中使用完毕之后关闭,节省资源
注意:

​ 如果nextLine()功能的前面存在系列next功能enter遗留问题,需要在nextLine()开启之前,通过nextLine()处理遗留问题

import java.util.Scanner;
public class ScannerDemo01{
	public static void main(String[] args){
		//构建Scanner的引用|变量
		Scanner sc = new Scanner(System.in);
		//功能
		System.out.println("请输入年龄:");
		int i = sc.nextInt();
		System.out.println(i);
		System.out.println("请输入余额:");
		double d = sc.nextDouble();
		System.out.println(d);
		//处理enter遗留
		sc.nextLine();

		System.out.println("请输入用户名:");
		//String s= sc.next();
		String s= sc.nextLine();
		System.out.println(s);
		//关闭
		sc.close();

	}
}

二、

流程控制语句

顺序结构: 默认顺序从上到下,从左到右
选择结构: 根据条件决定是否执行一段语句
if…
switch
循环结构: 控制一段代码执行多次 (执行的次数可以有条件控制)
for
while
do…while
选择结构:
单选|单分支:
if(选择判断){
执行的语句体;
}

​ 满足()条件就执行语句体,不满足就不执行
​ 选择判断 : 是一个结果为boolean类型的表达式 true满足|false不满足
​ 双选|双分支:
​ if(选择判断){
​ 满足条件执行的语句体1;
​ }else{
​ 不满足条件执行的语句体2;
​ }
​ 根据条件的结果,决定执行那种语句体
​ 如果结果为true,执行语句体1,结果为false执行语句体2
​ 多选|多分支:
​ if(条件1){
​ 满足条件执行的语句体1;
​ } else if(条件2){
​ 不满足条件执行的语句体2;
​ } else if(条件3){
​ 不满足条件执行的语句体3;
​ }

​ …

​ else{
​ 以上条件都不满足就执行语句体n; --接盘侠,可以存在可以不存在
​ }

注意: 多选择的多个判断 从上到下一次进行,只要执行了一个对应的语句体,后面的语句体不会再次执行
一个if结构只能执行一个语句体
如果语句体中的语句只有一条,前后的{}可以省略

//if语句
public class Demo02{
	public static void main(String[] args){
	//单选择
	System.out.println("if语句开始");
	if(false){
		System.out.println("if语句体中");
	}
	System.out.println("if语句结束");
	//双选择
	int i =-1;
	if(i>0){
		System.out.println("dayu");
	}else{
		System.out.println("budayu");
	}
	
	//多选择
	if(i==0){
		System.out.println("=0");
	}else if(i>0){
		System.out.println(">0");
	}else if(i<0){
		System.out.println("<0");
	}
	
	if(i==0) 
		System.out.println("=0");
	else if(i>0) 
		System.out.println(">0");
	else 
		System.out.println("<0");
	
    }
}
//计数器
	int count = 0;  //满足条件的个数
	
	if(height>180){
		//count = count+1;
		count++;  //count变量的值自身+1
	}
	if(money>1000000){
		count++;
	}
	if(face>90){
		count++;
	}
//多选择
		//通过判断得到 一共满足了几个条件
		if(count==3){
			System.out.println("高富帅");
		}else if(count==2){
			System.out.println("潜力股");
		}else if(count==1){
			System.out.println("屌丝");
		}else{
			System.out.println("辣鸡!!!");
		}     
//这里是计数器,更加方便if语句的编写

2、switch 定值判断

	switch(表达式){
			case1:
				语句体1break;
			case2:
				语句体2break;
			case3:
				语句体3break;
			....
			default:
				语句体n;
				break;
		}

执行流程:
1.计算表达式,得到一个结果
2.从上到下与每一个case后的值进行判断是否相等,相等执行对应的语句体,不相等继续向下判断
3.break;代表结束当前switch语句结构,没有break会发生case穿透
4.如果所有的case都不满足,就执行default后面的语句体n,相当于else,可以不写

表达式: 一般为变量名,可以为表达式,可以为常量(没意义)
类型: byte,short,int,char,枚举(jdk1.5),字符串(jdk1.7)

case 穿透:
当执行完毕语句体之后如果没有break,发生case穿透,下面的case无论是否满足,都不会再判断,直接执行对应的语句体,知道遇到下一个break或者switch语句的结束而结束
default: 位置可以任意改变

switch 与 if的区别:
if: 区间判断,定值判断
switch: 定值判断
能用switch都能用if,但是能用if不一定能用switch

public class Demo04{
	public static void main(String[] args){
	//判断 年龄: 18~20岁之间的员工,根据年龄决定工资  18-》18万 19-》19万 20-》20万
		int age = 180;
		int sal = 0; //年薪
	//根据年龄判定 ,决定年薪的值

		switch(age){
		case 18:
			sal = 180000;
			System.out.println("年薪的值为:"+sal);
			//break;
		case 19:
			sal = 190000;
			System.out.println("年薪的值为:"+sal);
			//break;
		case 20:
			sal = 200000;
			System.out.println("年薪的值为:"+sal);
			//break;
		default:
			System.out.println("年龄不符合要求!!!");
	}
}

三、

①算术运算符: +,-,*,/,%,++,–

+:
正号(省略)
加法运算 a+b
字符串的连接符 : 当+左右两边一旦出现字符串,+都作为字符串的连接符使用,把两边的数据最终连接成为一整个字符串
%: 求余数
3%5
规律: 当第一个操作数小于第二个操作数的时候,结果就为第一个操作数

++: 自增,自身+1

–: 自减,自身-1
只影响自己:
++放在操作数的前面还是后面,都是自身+1
–放在操作数的前面还是后面,都是自身-1

影响其他值: (++|–赋值运算,输出语句,表达式)
++或–放在操作数的前面,先自身+1或-1,然后再去参与运算(赋值,输出,计算表达式)
++或–放在操作数的后面,然后再去参与运算(赋值,输出,计算表达式),先自身+1或-1

	public static void main(String[] args){
		int a = 1;
		int b = 2;
		
		System.out.println(a+","+b);
		//影响自己(操作数)的值
		a++;  //a=a+1;
		++a;  //a=a+1;
		System.out.println(a);
		
		--b; //b=b-1;
		b--; //b=b-1;
		System.out.println(b);  //0
		
		//影响别人
		System.out.println(b++);  //0
		System.out.println(b);  //1
		
		int c = ++a + 10;
		System.out.println(c);  //
		System.out.println(a);  
	}

②赋值运算符

​ 基础赋值运算符
​ =
​ 自右向左运算的符号

​ 扩展赋值运算符
​ += a+=b; --> a=a+b;
​ -=
​ *=
​ /=
​ %=
​ 优点:

​ 帮助自动做强制类型转换
​ 提高执行效率,默认把优化成扩展赋值运算符的样子
​ 推荐使用扩展赋值运算符

public static void main(String[] args){
		int a = 5;
		int b = 3;
		
		//正常写法      
		a  = a+1;  //a +=1;
		
		System.out.println(a+=b);
		System.out.println(a+","+b);
		System.out.println(a-=b);
		System.out.println(a+","+b);
		System.out.println(a*=b);
		System.out.println(a+","+b);
		System.out.println(a/=b);
		System.out.println(a+","+b);
		System.out.println(a%=b);
		System.out.println(a+","+b);
		
		a+=10;
		//a+=1;  a++;
		System.out.println(a+","+b);
		
		short s = 1;
		s = (short)(s+1);
		//帮助自动做强制类型转换
		s++;
		s+=1;
		System.out.println(s);
	}

③关系运算符或比较运算符

​ > < >= <= == !=

​ < >= <=

​ 操作数只能为为基础数据类型的数据 byte,short,int,long,float,double,char
​ == != 任意类型都能判断

​ 注意: 所有的比较运算符结果为boolean值
​ boolean 类型不参与类型转换
​ !=就是==取反

public static void main(String[] args){
		
		int a = 7;
		int b = 5;
		
		boolean flag = a+b> 10;
		
		System.out.println(flag);
		
		String name = "zhangsan";
		String name2 = "zhangsanfeng";
		System.out.println(name==name2);
		
		System.out.println('a'>=97);
		
		System.out.println(true!=false);
		System.out.println(true!=a>b);
		
	}

注意: 如果以后比较字符串内容是否相等,都通过equals() 进行比较
字符串1.equals(字符串2) --> 相等true,不相等false
equals就是根据两个字符串的内容比较字符串是否相等

④逻辑运算符

两边的操作数必须值为boolean类型(值,表达式)
一般用来用来连接两个条件

& 与
两边都满足才是满足,一个为false就是false
|或

​ 一个为true就是true,两个都为false才是false

! 取反 !true=>false !false->true

^ 异或

两边的操作数相等为false,不等为true

短路: 如果操作操作数能够决定整个结果,右边的操作数将不会执行

&&
||

注意: 逻辑运算符两边操作数结果必须为boolean
逻辑运算符最终的结果boolean类型的值
建议使用短路运算符

	public static void main(String[] args){
		System.out.println("----------&---------------");
		System.out.println(true & false);  //false
		System.out.println(true & true);  //true
		System.out.println(false & true);  //false
		System.out.println(false & false);  //false
		System.out.println("zhangsan"!="zhangsan" & "lisi".equals("lisi"));  //false
		
		System.out.println("----------|---------------");
		System.out.println(true | false);  //true
		System.out.println(true | true);  //true
		System.out.println(false | true);  //true
		System.out.println(false | false);  //false
		System.out.println("zhangsan"!="zhangsan" | "lisi".equals("lisi"));  //true
		
		System.out.println("----------!---------------");
		System.out.println(!false);  //true
		System.out.println(!true);  //false
		
		System.out.println("----------^---------------");
		System.out.println(true ^ false);  //true
		System.out.println(true ^ true);  //false
		System.out.println(false ^ true);  //true
		System.out.println(false ^ false);  //false
		System.out.println("zhangsan"!="zhangsan" | "lisi".equals("lisi"));  //true
		
		System.out.println("----------&&---------------");
		System.out.println(true && false);  //false
		System.out.println(true && true);  //true
		System.out.println(false && true);  //false
		System.out.println(false && false);  //false
		System.out.println("zhangsan"!="zhangsan" & "lisi".equals("lisi"));  //false
		//System.out.println("zhangsan"!="zhangsan" & 5/0==0);  //java.lang.ArithmeticException: / by zero
		System.out.println("zhangsan"!="zhangsan" && 5/0==0);  //false,因为第二个操作数不会执行,发生短路
		
		String name = "张三";
		int pwd = 1234;
		//用户名与张三相等,同时必须是否为123相等,相等登录成功,不等登录失败
		if(name.equals("张三")  &&  pwd==123 ){
			System.out.println("登录成功"); 
		}else{
			System.out.println("登录失败"); 
		}
		
	}

⑤位运算符

先把操作数转为二进制,然后运算,结果转为十进制

十进制整数转为二进制:
使用十进制的整数不停的除以2,最终的结果为0的时候,从下晚上看余数
0b开头标识二进制的整数
二进制转为十进制:

​ 从最后一位数开始,不停的通过这一位置的数据*当前进制数^0,次方每次+1,最终的和就是十进制的表现形式

& : 同一个位置的两个数,一个为0就是0,两个都为1才是1
| : 同一个位置的两个数,一个为1就是1,连个都为0才是0
^ : 同一个位置的两个数,相等为0,不等为1
以上三个运算符,当两边的操作数为boolean,最为逻辑运算符,当两边的操作数为数字,作为位运算符存在

注意: 一个数据如果对另一个数据异或两次,结果是元数据本身

(>>)右移运算符

操作数1>>操作数2 : 操作数1先转为二进制,然后对二进制的操作数1向右移动操作数2个位数,移出的数据不看,保留的数据转为十进制
规律: 变小 操作数1>>操作数2 ==> 操作数1/2^操作数2

(<< )左移运算符

操作数1<<操作数2 : 操作数1先转为二进制,然后对二进制的操作数1向左移动操作数2个位数,空位补0,保留的数据转为十进制
规律: 变大 操作数1<<操作数2 ==> 操作数1*2^操作数2

注意: 位运算符执行效率更高,如果位移比*|/效率高,所以很多源码中会常常见到

public static void main(String[] args){
		System.out.println(10);
		System.out.println(0b10);
		System.out.println(0b1110);
		
		System.out.println(2&3);  //2
		System.out.println(2|3);  //3
		System.out.println(2^3);  //1
		
		System.out.println(2^3); 
		
		System.out.println(14>>2); //3
		System.out.println(2<<2); //8
		System.out.println(14<<3); //112
		
	}

⑥条件运算符

根据一个条件,决定最终的结果

条件? 值1 : 值2;

条件: 是一个值为boolean类型的表达式 true|false

执行流程:

​ 1、计算条件表达式
​ 2、如果值为true,最终的结果为值1
​ 3、如果值为false,最终的结果为值2

条件运算符与if语句之间的区别:

​ 1、条件运算符肯定会得到一个结果,if不一定

​ 2、条件运算符结果只能为某一个值,if语句体可以是一个语句块

​ 3、条件运算符对简单的条件判定效率高,毕竟是运算符, if对复杂的比较适合

public static void main(String[] args){
		
		int a = 5;
		int b = 10;
		
		String str = a>10? "a大于10" : "a<=10";
		System.out.println(str);
		
		//求2个数中最大的数字
		int result = a>b? a : b;
		System.out.println(result);
		
		
		System.out.println(true?"哈哈":"呵呵");
		
		if(true){
			System.out.println(123);
			System.out.println(123);
			System.out.println(123);
			System.out.println(123);
		}else{
			System.out.println(111);
			System.out.println(111);
			System.out.println(111);
		}

⑦运算符的优先级

运算符的优先级:
优先级: 优先执行谁
口诀: 单目算数位关系,逻辑三目后赋值
默认从左向右运算,()|. 优先级最高

运算符分类:
根据操作数的个数进行根类
单目: 操作数只有一个 ++ – +正号 -负号 !
双目: 操作数有2个 + - * / % > < …
三目: 条件运算符

排序:&>^>|>&&>||

public static void main(String[] args){
		
		//&& 与 || 之间的优先级: &&优先级高于||
		System.out.println(true && true || false);  //true
		System.out.println(true || true && false);  //true
	
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值