Java学习笔记 第三天

第二章 运算符

2.2 赋值运算符

赋值运算符含义
=,等号/
+=,加等a += 4 —> a = a + 4
-=,减等a -= 4 —> a = a - 4
*=,乘等a *= 4 —> a = a * 4
/=,除等a /= 4 —> a = a / 4
%=,模等a %= 4 —> a % a + 4

注意:
 1.只有变量才可以使用赋值运算符,常量不能进行赋值。如:5 = 3是错误写法
 2.复合赋值运算符其中隐含了一个强制类型转换。

byte x = 10;

//	x = x + 5
//	x = byte + int
//	x = int	+	int
//	x = int
//	x = (byte) x

x += 5;	//	输出的结果是byte类型的的15,不是int类型的15.

2.3 比较运算符

比较运算符含义
==比较运算符两边数据是否相等,相等结果是true
<比较符号左边的数据是否小于右边的数据,如果小于,结果是true
>
<=
>=
!=如果比较符号两边的数据不相等,结果是true

注意:
 1.比较运算符的结果一定是boolean值,成立是true,不成立就是false
 2.如果进行多次判断,不能连着写。如:不能按照数学中的1 < x < 3

2.4 逻辑运算符

逻辑运算符含义
&&(与)全部都是true,才会是true;否则就是false
||(或)只要有一个是true,就是true;全都是false才是false
!(非)原来是true,变为false;原来是false,变为true

注意:
 1.与“&&”,或“||”具有短路效果,如果根据左边已经可以判断出结果,那么右边的代码将不再执行,从而节省一定的性能。

int a = 10;
//	false && ...
System.out.println(3 > 4 && ++a < 100);	//	False
System.out.println(a);	//	返回结果是10,原因在于上面那行后面的++a < 100被短路了,实际并没有被执行

int b = 20;
//	true	||	...
System.out.println(3 < 4 || ++b < 100);	//	true
System.out.println(b);	//	返回结果是20,原因在于上面那行后面的++b < 100被短路了,实际并没有被执行

 2.逻辑运算符只能用于boolean值
 3.与、或需要左右各自有一个boolean值,但是取反只需有一个boolean值即可
 4.与、或两种运算符,如果有多个条件,可以连续写。
 两个条件: 条件A && 条件B
 多个条件; 条件A && 条件B && 条件C
如:
  TIPS:对于1 < x < 3的情况,应该拆成两个部分,然后用逻辑运算符连接起来,即x > 1 && x < 3

2.5 三元运算符

  • 一元运算符:只需要一个数据就可以进行操作的运算符。如:自增++、自减–、取反!
  • 二元运算符:需要两个数据才可以进行操作的运算符。如:加法+、赋值=
  • 三元运算符:需要三个数据才可以进行操作的运算符

格式:
数据类型 变量名称 = 条件判断?表达式A:表达式B;
流程:
首先判断条件是否成立:
   如果成立为true,那么将表达式A的值赋值给左侧的变量
   如果不成立为false,那么将表达式B的值赋值给左侧的变量
二者选其一
如:

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

		//	数据类型 变量名称 = 条件判断?表达式A:表达式B;
		//	判断a	>	b是否成立,如果成立,将a的值赋值给max,如果不成立将b的值赋值给max,二者选其一
		int max = a > b?a : b;
	}
}

注意:
 1.必须保证三元运算符中表达式A和表达式B都符合左侧的数据类型的要求。
如:

// 尽管结果应该是是10,是int类型,但是2.5是double类型,不是int,也没有强制类型转换,故下面代码写法错误
int result = 3 > 4 ? 2.5 : 10;

 2.三元运算符的结果必须被使用,可以像上面的例子一样用变量去接受,也可以用来打印输出
如:

int a = 2;
int b = 10;
System.out.println(3 > 4 ? 2.5 : b);	//	正确写法


a > b ? a : b;	//	这是错误写法,因为三元运算符的结果并没有被使用

第一章 方法入门

定义:
 就是将一个功能抽取出来,将代码单独定义在一个大括号内,形成一个单独的功能
格式:

public static void 方法名称(){
	方法体
}

//	方法体的命名规则和变量一样,使用小驼峰(首个字母小写,后面每个单词的首字母大写)
//	方法体:也就是大括号当中的内容,可以包含任意条语句

注意事项:

  • 方法定义的先后顺序无所谓
  • 方法的定义不能产生嵌套包含关系
  • 方法定义好了之后,不会执行的。如果要想执行,必须要对方法进行调用。

方法的调用格式:
方法名称();

如:

public class Demo08Operator{
	public static void main(String[] args){
		farmer();
		seller();
		customer();
	}
	//	顾客
	public static void customer(){
		System.out.println("买菜");
		System.out.println("洗菜");
		System.out.println("做饭");
		System.out.println("吃饭");
	}
	//	农名
	public static void farmer(){
		System.out.println("种菜");
		System.out.println("杀虫");
		System.out.println("收割");
		System.out.println("贩卖");
	}
	//	商贩
	public static void seller(){
		System.out.println("进菜");
		System.out.println("贩卖");
	}
}

第二章 Jshell脚本工具

2.1 Jshell

特点: 不需要创建.java文件,也不需要创建类,可直接一步一步和剧本一样脚本式运行
启动:
 在DOS命令窗口中输入jshell即可进入
退出:
 /exit
使用场景: 在代码量很少,很简单时候建议使用。

例子如下:
在这里插入图片描述

2.2 编译器的两点优化

第一点优化:

/*
对于byte、short、char三种类型来说,如果右侧赋值的数据没有超过左侧的数据范围,
且不是小数据范围向大数据范围的自动类型转换
那么即使没有人为添加强制类型转换
javac编译器也会自动为我们隐含的添加一个(byte)或(short)或(char),以此来进行强制类型转换
但要注意byte、short、char三种类型在进行数学运算时后一定是先转化为int类型,然后再进行数学运算的

而对于非byte、short、char之外的int、long、float、double、boolean(不能发生数据类型转换)来说
如果右侧赋值的数据超过左侧的数据范围,而且没有认为添加强制类型转换,javac编译器直接报错
*/

public class Demo12Notice{
	public static void main(String[] args){
		//	右侧确实是一个int数字,但是没有超过左侧的范围,就是正确的。
		//	int ---> byte,不是自动类型转换
		byte num1 = (byte)30;	//	右侧没有超过左侧的范围
		System.out.println(num1);	//	30
		
		//	byte num2 = 128;	//	右侧超过了范围
		
		// int ---> char,不是自动类型转换
		//	右侧没有超过左侧的范围
		char zifu = 65;	
		System.out.println(zifu);	//	A
		
		int a = (int)6L;		//	虽然右侧也没有超过左侧的范围,也不是自动类型转换,但是int类型不是byte、short、char三种类型之一,所以这行代码错误
		System.out.println(a);
	}
}

第二点优化:

/*
在给变量进行赋值的时候,如果右侧的表达式全都是常量
那么编译器javac将会直接将若干个常量表达式直接计算出来
short result = 5 + 8;//	等号右边全是常量,没有任何变量参与运算
编译之后,得到的.class字节码文件相当于【直接就是】:
short result = 13;
右侧的常量结果数值,没有超过左侧范围,所以正确

这称为“编译器的常量优化”
但是注意:一旦赋值符号“=”右边的表达式中有变量参与,这种优化将不能进行,而且,这种优化只发生在byte、short、char三种变量赋值的时候
*/
public class Demo13Notice{
	public static void main(String[] args){
		short num1 = 10;	//	正确写法,int ---> short虽然不是自动类型转换,但是右侧没有超过左侧数据范围,因此javac编译器会自动添加(short)进行强制数据类型转换
		
		short a = 5;
		short b = 8;
		//	short + short ---> int + int ---> int
		//	short result = a + b	//	错误写法!左侧需要是int类型
		//	5 + 8 = 13明明没有超过左边short的数据范围,为什么没有按照上一个知识点所说发生隐含的强制数据类型转换呢?
		//	原因在于short result = a + b 在给short类型变量result赋值时候,“=”右边有变量参加,上个知识点中的隐含强制类型转换只能发生在“=”右边全是常量的情况下
		
		
		//	右侧不用变量,而用常量,而且只有常量,可以发生“编译器的常量优化”
		short result = 5 + 8;
		System.out.println(result);
		
		//	右侧有变量,不能发生“编译器的常量优化,下面代码错误”
		//	short result = 5 + a + 8;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值