当数据类型不一样的变量发生计算时候会发生数据类型转换
自动类型转换(隐式)
1.特点:代码不需要进行特殊处理,自动完成
2.规则:数据范围从小到大,与字节数不一定相关的(=的左边类型大于=右边的类型)
int x =50;
long y = 40;
float z = x + y;
System.out.println(z);----90.0
强制类型转换(强制)-了解
1.特点:代码需要进行特殊的格式处理,不能自动完成
2.格式:范围小的类型 范围小的变量名 = (范围小的变量名) 原本范围
JAVA中的=还有赋值的意思,将右边的数值赋值给=左侧大的数据
转化的时候如果涉及到计算不能忘记小括号
int x =50;
byte y = 40;
byte z = (byte)(x + y);
System.out.println(z);
数据溢出和数据类型转换的注意事项
1 强制类型一般不推荐使用,因为有可发生精度损失,数据溢出
2 byte short char这三种类型都可以发生数学运算例如 +
3 byte short char这三种类型运算的时候.都会被首先提升为int类型,然后再计算
4 boolean类型不能发生数据类型转换
char类型如果进行了计算,那么字符会按照一定的规则翻译成一个数字
一些字符类型的字符也可以参加计算的原因是因为字符在ASCII码表中有对应的固定的数值,中文汉字也有参照的表格UNICODE
ASCII: A = 65; a = 97; 0 = 45;(大小写字母之间相差32)
范围小的像范围大的提升
Byte--> short --> char --> int --> long --> float --> double
2 4 1
四则运算中"+"有常见的三种用法
1 对于数值来说,那就是加法
2 对于字符char来说,在计算之前char会被提升为int,然后计算
char类型字符,和int类型数字,之间关系对照表ASCII
3 字符串相加 + 只能 = 进行拼接,不是在原来的基础上进行拼接而是生成了一个新的字符串
标识符:在JAVA中没有实际含义的是自己取的名字(类名,方法名)-见名知意 驼峰命名
常量:程序运行期间不会改变的量
分类-整数常量(int) 浮点数常量(double)字符串常量(String)字符常量(char)空常量(null)
null:在JAVA中表空值
浮点数的类型都要比整数类型大
取模%是为了取余数 例如 (10 % 3 = 1)
自增自减运算
自增++
自减--
含义:让一个变量涨一个数字或者降一个数字,写在变量之前或者变量名之后
使用方式:单独使用或者混合使用
使用区别:单独使用的时候,前++和后++没有任何区别,完全一样的
在混合使用的时候有重大区别
a:如果前++,立刻马上加1 [先加后用]
b:后++,先使用本来的数值再变量+1 [先用后加]
先++
1 先进行自增
2 将自增结果拿出来
3将拿出来的值参与运算
后++
1 先把值拿出来
2 再进行自增
3 将拿出来的值参与运算
先--,后--运算同理
注意:只有变量才能进行自增,自减运算,因为常量是不可变得
错误写法 30++
-----------------------------看视频
赋值运算:
1 基本赋值 = 代表将右侧的数值赋值给左侧
2 复合赋值 += a += 1 相当于 a=a+1
-= b -+ 1 相当于 b=b-1
*= c *= 1 相当于 c=c*1
/= d /= 1 相当于 d=d/1
%= e %= 1 相当于 e=e%1
比较运算符 ==(相等) < > <= >= !=(不相等)
注意事项:1 比较运算符的结果一定是布尔值
2 如果进行多次判断 不能连着写 错误演示 1< 2< 3----程序当中不允许这种写法
逻辑运算符 && 与(并且):连接两个布尔值,全都是true,才能是true,否则就是false
|| 或(或者):至少一个是true,就是true,全都是false才是false
! 非(取反):本来是true变成false,本来是false变成true
&& || 具有短路效果:根据左边的就已经可以判断得到的最终结果,那么右边的代码将不再执行,从而节省一定的性能
注意事项:
只能用于boolean值
与 或需要左右各自有一个boolean值,但是取反只要有唯一一个布尔值就可
与或两种运算符 如果有多个运算符,可以连续写
TIPS: 1 < 2 || 2 < 3
逻辑运算符也可以单个使用 | &
区别:&& || 一般称之为短路效果,左边满足一定条件时右边就不执行了
& | 不管左边结果是什么,右边都执行
实际开发的时候用短路的多一点,增加执行效率
共同点:结果都是一样的
三元运算符:
格式: 数据类型 变量名称 = 条件判断 ? 表达式A : 表达式B;
流程:首先判断条件是否成立,成立将表达式A给左侧变量,不成立将表达式B赋值给左侧变量二者选其一.
System.out.println( 3 > 4 ? 2 : 10)
注意事项:条件判断语句一定要有一个布尔类型的结果
表达式A和表达式B的类型一定要和等号左侧的类型保持一致
表达式A和表达式B 一定要有个结果,不能写输出语句
方法(方法的入门):
格式: publie static void 方法名称(){
方法体 ; }
方法名称的命名规则和变量一样,多个单词的时候使用小驼峰(getName)
一个单词的时候都要用小写(main)
方法体:也就是大括号当中可以包含任意条语句
注意事项:
1 方法定义的先后顺序无所谓
2 方法的定义不能产生嵌套包含关系(和其他方法是平级关系)-但要在同一个类中
3 方法定义好了之后不会执行的 .如果想要执行一定要进行方法的调用,一个方法调用格式method();调用成功
方法执行顺序:
1:规则.程序的主入口一定是main方法
2:一定是从main方法开始找
3:程序在main方法里面从上到下执行的.上面的代码没有执行完毕,下面的代码也是不会执行的
将代码定义成方法,不会提高代码的执行效率
但是1:代码的复用性-某个过程多次运行可以直接多次调用方法,不需要一遍又一遍的复制粘贴
2:代码的可维护性-某个过程修改可以直接在方法中修改不需要一个个修改,一次修改多次使用
-当代码出现了问题或者需求发生了变更的时候,我们尽量减少需要更改代码的地方
Jshell:
适合于轻量极其简单--在简单的代码中--测试一些特殊方法的使用的场景,是一个轻量级的帮助工具,可以省去定义类,定义方法,编译,运行的麻烦
进入 shell:
打开cmd窗口直接输入 jshell--回车enter-进入了jshell
可以直接在cmd窗口输入代码然后--回车(enter)--直接编译运行,输入一个代码--运行一次
退出jshell: / exit--回车--退出jshell
小拓展:
如果赋值变量,在 = 右侧的范围超过左侧数据类型
1:对于byte short char三种类型来说,如果右侧赋值的数值没有超过范围
那么JAVA编译器将会自动隐含的为我们补上一个(byte)(char)(short)
1-如果右侧没有超过左侧类型范围 编译器补上强转
2-如果右侧超过左侧类型范围,
在给变量赋值的时候如果右侧的表达式当中全都是常量,没有任何变量
那么编译器JAVA将会直接将若干个常量表达式计算得到的结果--(先斩后奏)
右侧的常量结果数值没有超过范围,所以正确--这称为"编译器的常量优化"
注意,一旦表达式当中有变量参与,那么久不能进行这种优化了
变量 + 变量
(byte)(char)(short)类型的变量在参与运算的时候,类型会自动提升为int
其他类型在运算的时候,会自动提升为范围大的类型
变量 + 常量
只要有变量存在,那么就跟变量+变量是一样的
常量+常量
出发常量优化机制
在编译的时候右边就已经是一个固定的数了
会看右边的数是否在左边的范围之中,如果在就强制转换;如果不在就报错