数据类型转换
当数据类型不一样的时候,需要发生类型转换。Java中的类型分为两种:
- 自动类型转换(隐式)
特点:代码不需要进行特殊处理,自动完成。
原则:只能从数据范围小的类型,转换为数据范围大的类型。(从小到大)
- 强制类型转换(显式)
特点:代码需要进行特殊格式处理,不能自动完成。
格式:小范围类型 变量名称=(小范围类型)原本大范围的数据。
注意事项:
强制类型转换使用必须谨慎,因为有可能发生数据溢出、精度损失。
Byte/short/char三种类型,都可以发生数学运算,例如加法。
Byte/short/char三种类型,在发生运算的时候,都有首先向上提升为int类型,然后再运算。
Boolean类型不能发生类型转换。
Char 和 int 之间的转换关系为:
ASCII表:0-127分别代表不一样的字符。
Unicode表:万国码,0-127和ASCII完全一样,但是从128开始,可以包含更多字符。
运算符
运算符:对数据进行操作的符号。
表达式:用运算符连起来的常量或变量,叫做表达式。
Java中常用的运算符
算术运算符:包括 加 + 减 - 乘 * 除 /
赋值运算符
比较运算符
逻辑运算符
三元运算符
注意事项:
- 对于整数来说,除法使用的是小学一年级的算法。
被除数 / 除数 = 商……余数
如果运算当中有小数参与,那么结果直接就是小数。
取模运算的典型应用:判断奇偶数
算术运算符当中的加号,其实可以有多种用法。
数学加法运算。
还可以用英语char类型,会首先提升成为int (查ASCII表/Unicode表),然后再运算。
还可以用于字符串连接。
备注:任何数据类型和字符串进行+连接的时候,都会转换成为字符串形式。
算术运算符
自增运算符:++,在一个变量本来数值的基础上,累加1。
自减运算符:–,在一个变量本来数值的基础上,累减1。
使用格式:
写在一个变量的前面。例如: ++a –b
写在一个变量的后面。例如: x– y–
使用方法:
单独使用:独立成为一个语句步骤,不和其他任何操作混合。
混合使用:与其他操作仪器混合,例如赋值语句、打印输出语句等等。
使用区别(重点):
在单独使用的时候,前++和后++没有任何区别。
在混合使用的时候,前++和后++存在重大区别。
A. 如果是【前++】,那么变量【立刻马上+1】,然后拿着结果进行使用。(先加后用)
B. 如果是【后++】,那么变量先使用本来之前的数据,【然后变量再+1】。(先用后加)
注意:该加是一定会加的,只不过是先后时机不一样。
注意事项:
只有变量才能使用这样的运算符。
这种运算符只需要一个变量就行,不需要两个或者更多。
赋值运算符
基本写法
= 代表将右侧的数据交给左侧的变量
复合写法
+= a+=3 a=a+3
-= b-=3 b=b-3
= c =3 c=c *3
/= d/=3 d=d/3
%= e%=3 e=e%3
注意事项
左侧必须是一个变量,才能赋值;右侧变量、常量无所谓。
比较运算符
比较运算符也叫做关系运算符:
大于 >
小于 <
大于等于 >=
小于等于 <=
等于 == [注意]
不等于 !=
结果一定的boolean值,如果成立就是true,如果不成立结果就是false
逻辑运算符
逻辑运算符主要分为四种(其中三种常用)
与(并且) & 全部是true,才是true;否则就是false
或(或者) | 至少一个是true,就是false;全部是false,才是false
异或 ^ 两个相同就是false;一样一个就是true。(了解即可,不太常用)
非(取反) ! 本来是true,变成false;本来是false,变成true
注意几点问题
这些逻辑运算符是作用在布尔数据上的。
非运算符只 一个数据,其他的都是左右各一个数据。
如果遇到了类似于两个条件的判断(例如区间),那么不能连这写,一定要用逻辑运算符。
1
三元运算符
一元运算:需要一个数据,例如: ++ – !
二元运算:需要两个数据,例如:+ - * /
三元运算,格式:
数据类型 变量名称 = 条件判断 ? 表达式A : 表达式B;
含义逻辑:
1.首先进行条件判断,得到true或者false值
2.如果条件成立,那么取用表达式A的值。
3.如果条件不成立,那么取用表达式B的值。
注意事项
- 三元运算表达式,结果必须被使用,不能不用。要么左侧赋值,要么打印输出。
- 打印输出语句可以支持所有类型,但是如果左侧是变量,必须同时保证表达式A和表达式B符合。
方法
概念
所谓方法,可以被当做是一种比类更小一级的大括号,是代码的更小组织单位。
定义方法的基本格式(今天)
public static void 方法名称(){
方法体
return;
}
备注
- void代表方法不产生任何返回值(返回值day04学习)
- 小括号之内留空,代表方法没有任何参数(参数day04学习)
- 方法体:就是希望这个方法做什么事情,可以是一行或多行代码。
- 最后一行return;代表方法的结果,最后一行可不写。
注意事项
- 方法定义的前后顺序,无所谓。
- 方法定义不能包含嵌套关系。(带有public static void 的就就做定义)
- 最后一行return;代表方法的结束,今天可写可不写。
- 方法定以后,是不会主动自己运行的。如果希望执行方法,必须进行调用。
方法的调用
- 可以在main方法中调用其他方法。
- 也可以在一个任意的方法当中,调用另一个方法。
- 方法的定义先后顺序不影响结果,调用顺序才会影响结果。
- 今天我们要尽量避免“循环调用”(今后学习的递归调用)。a->b->a 不能形成一个无限的环路
编译器的常量优化和隐含强转
复合赋值运算符,其中隐含了一个强制类型转换。
对于byte、short、char三者来说,只要赋值的右边不超过本类型的范围,那么编译器(javac)将会自动隐含地补上强制类型转换:(byte)(short)(char)。
编译器的常量优化
如果一个表达式完全由常量组成,那么在javac编译 的时候,就会直接计算出结果,放在.class字节码文件中。而此时此刻刚刚编译通过,还没有运行程序。
.java–> javac –> .class –>java –>运行结果
编译器–>运行期
编译器的常量优化,发生在编译器,而不是运行期。
只有常量才会有这种表达式优化;如果变量就不会再优化了。