目录
byte,short,char都能发生数学运算,例如 "+"
第一章.数据类型转换
1.自动转换(隐式)
1.1 特点
代码不需要特殊处理,自动完成
1.2 规则
数据范围从小到大
1. byte 的取值范围为:-128到127
2. short 的取值范围为:-32768到32767
3. int 的取值范围为:-2147483648到2147483647
4. long 的取值范围为:-9223372036854775808到-9223372036854775807
package day20;
/*
当数据类型不同时,将会发生数据类型转换
*/
public class Demo01 {
public static void main(String[] args) {
System.out.println(1024); //这是一个整数,默认数据类型为int
System.out.println(3.14); //这是一个浮点数,默认数据类型为double
long num1 = 100;
System.out.println(num1);
//左面是long类型,右面是默认的int类型,一个等号代表赋值,把右面的int常量,交给左面的long变量储存
//int ---> long ,符合数据范围从小到大的规则,发生了自动类型转换
double num2 = 2.5F;
System.out.println(num2);
//左面是double类型,右面是float类型,左右不一样
//float --->double,符合数据范围从小到大,发生了自动类型转换
float num3 = 30L;
System.out.println(num3);
//左面是float类型,右面是long类型,左右不一样
//float --->long,符合数据范围从小到大,发生了自动类型转换
}
}
2.强制转换(显式)
1.1 特点
代码需要特殊格式处理,不能自动完成
1.2 格式
范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据
package day20;
public class Demo02 {
public static void main(String[] args) {
int num = (int)1000L;
System.out.println(num); //int --> long ,不是从小到大,不能发生自动类型转换
}
}
1.3 注意事项
1.强制类型一般不推荐使用,因为有可能发生数据溢出,精度损失
数据溢出
package day20;
public class Demo03 {
public static void main(String[] args) {
int num = (int) 6000000000L;
System.out.println(num);
}
}
输出结果:1705032704 //较大的值强制转换为范围小的数据类型,
//发生了数据溢出
精度损失
package day20;
public class Demo04 {
public static void main(String[] args) {
int num = (int) 2.5;
System.out.println(num);
//2.5为double类型,强制转换为int类型,数据值变成了2,发生了精度损失
//不是四舍五入,是直接舍弃小数位
}
}
byte,short,char都能发生数学运算,例如 "+"
package day20;
public class Demo05 {
public static void main(String[] args) {
char var = 'a';
System.out.println(var + 1);
}
}
输出结果:98
/*计算机中的数据都是用二进制存储的,所以当在进行数学运算时,
会先char类型的数据转换成int类型的数值在进行运算
*/
package day20;
public class Demo05 {
public static void main(String[] args) {
byte num1 = 40 ; //右侧数值范围不能超出在侧的数据类型范围
byte num2 = 50 ;
int result = num1 +num2 ; // byte +byte --> int + int = int
System.out.println(result);
}
}
short num3 = 60;
short result2 = (short) (num1 + num3);
System.out.println(result2);
//当运算结果数值没有超出接受数据类型的范围时,可以使用强制数据类型转换,否则会发生数据溢出
3.ASCII码表
除了这张表还有一张表,叫做万国码(Unicode),也是数字和符号对照关系,但比ASCII码表涵盖更广
第二章.运算符
-
运算符: 进行特定操作的符号
-
表达式: 用运算符连接起来的式子,叫做表达式
1.算术运算符
1.1 加减乘除,取模运算
- 对于一个整数的表达式来说,除法用的是整除,整数除以整数结果仍然是整数,只看商不看余数;
- 取模只对整数才有意义
- 一旦运算当中有数据类型不同的数据,那么结果是数据类型范围大的那种
package day20;
public class Demo06 {
public static void main(String[] args) {
int num1 = 20;
int num2 = 30;
System.out.println(num1 + num2); // " + " 加 结果:50
System.out.println(num1 - num2); //" - " 减 结果:-10
System.out.println(2 * num1); //" * " 乘 结果:40
System.out.println(num1 / 2); //" / " 除 结果:10
System.out.println(num1 % 3); //" % " 取模 结果:2
double result = num1 + 2.5;
System.out.println(result); //结果:22.5
}
}
1.2 四则运算符中的"+" :
1.对于数值来说, 就是加法
2.对于字符char类型来说,在计算之前,char会被先提升为int类型(按照ASCII或者Unicode),在进行计算
3.对于字符串String类型来说,加号表示连接操作
package day20;
public class Demo07 {
public static void main(String[] args) {
int num1 = 6;
int num2 = 7;
int result = num1 +num2;
System.out.println(result);
char var = 'a';
int result2 = num1 + var;
System.out.println(result2);
String str1 = "hello";
String str2 = "java";
System.out.println(str1 + str2);
System.out.println(str1 + num1 + num2);
System.out.println(str1 +(num1 + num2)); //小括号优先级最高
}
}
运行结果:
13
103
hellojava
hello67
hello13
1.3 自增自减运算符
- 含义: 让一个变量自增一个数字,或者让一个数字自降一个数字
- 使用格式: 放在变量名称之前,或者放在变量名称之后,例如: ++num , num++
- 使用方法:
单独使用:不和其他任何操作混合使用,自己独自成为一个步骤
混合使用:和其他操作混合,例如与赋值混合,或者与打印操作混合,等
4.使用区别:
- 单独使用时,前++和后++是相同的,没有任何区别
- 在混合使用时,有重大区别
- A.如果是前++,那么结果立刻马上加1,<先加后用>
- B.如果是后++,那么结果先运算结果加一,<先用后加>
自增自减只能对变量用
package day20;
public class Demo08 {
public static void main(String[] args) {
int num1 = 6;
System.out.println(num1);
++num1;
System.out.println(num1); // 7 单独使用前++
num1++;
System.out.println(num1); // 8 单独使用后++
System.out.println(++num1); // 9 与打印混合使用,num数值为8,立刻加一,然后打印输出
System.out.println(num1++); // 9 与打印混合使用,num数值为9, 先执行打印操作,然后在结果加一
int num2 = 40;
int result = --num2;
System.out.println(result); // 39
System.out.println(num2); // 39 前--,先减一,在赋值给result
int num3 = 39;
int result2 = num3--;
System.out.println(result2); // 39
System.out.println(num3); // 38 后--,先赋值给result2 ,再减一
int x = 10;
int y = 20;
int result3 = ++x + y--; // 11 + 20 = 31
System.out.println(result3); // 31
System.out.println(x); // 11
System.out.println(y); // 19
}
}
2.赋值运算符
1.1 基本赋值运算符
int a = 30;
1.2 复合运算符
- += a += 2,相当于 a =a+2
- -= a -= 3,相当于a =a-3
- *= a *= 4,相当于 a =a*4
- /= a /= 5,相当于a = a/5
- %= a %= 6,相当于a = a%5
-
package day20; public class Demo09 { public static void main(String[] args) { int a = 10; a += 5 ; System.out.println(a); int b = 6; b -= 3 ; System.out.println(b); int c = 8; c *= 2 ; System.out.println(c); int d = 10; d /= 2 ; System.out.println(d); int f = 20; f %= 3 ; System.out.println(f); } } 运行结果: 15 3 16 5 2
3.比较运算符
1.种类
- "=="
- "
- ">"
- ">="
- "
- "!="
public class Demo10 { public static void main(String[] args) { System.out.println(10 > 5); int num1 = 12; int num2 = 20; System.out.println(num1 < num2); System.out.println(num1 >= 100); System.out.println(num2 <= 20); System.out.println(num1 == 12); System.out.println(num1 != 12); } } 运行结果: true true false true true false
2.注意事项
比较运算符的结果一定是个布尔值(bollean)
4.逻辑运算符
1.种类:
与(&): 两个都是true结果才是true
或(||): 有一个是true结果就是true
非(!): 本来是true,变成false;本来是false,变成true;
package day21;
public class Demo01 {
public static void main(String[] args) {
System.out.println(true && false);
System.out.println(true || false);
System.out.println(!true);
System.out.println(!true && false);
System.out.println(3<4 && 6>4);
}
}
运行结果:
false
true
false
false
2.短路效果
package day21;
public class Demo02 {
public static void main(String[] args) {
System.out.println(false && true);
System.out.println(true || false);
int num1 =4;
System.out.println(num1 > 100 && 5 > 4); // false 代码判断num1不大于100,就不会往下进行了
System.out.println(num1 < 100 || 4 > 5); // true 代码判断num1 < 100,就不会往下进行了,判断结果为true
}
}
3.注意事项
- 逻辑运算符左右两边必须是布尔值(boolean)
- 与,或需要两边各自有一个布尔值,但是取反只需有一个布尔值即可
-
对于1 < x < 3 ,拆分成x > 1 && x < 3
5.三元运算符
- 数据类型 变量名称 = 条件判断? 表达式A: 表达式B
package day21; public class Demo03 { public static void main(String[] args) { int a =10; int b =20; int max = a > b? a : b; System.out.println(max); } } 运行结果: 20
第三章.方法入门
1.概述:
方法:就是把功能抽取出来,把代码单独放在一个大括号内,形成一个单独的功能,需要的时候就可以去调用,增加了代码的复用性,减少了代码的冗余
- 全局变量:通常把类的属性成为类的全局变量(成员变量),全局变脸声明在类体中
- 局部变量:方法中的属性称之为局部变量,局部变量声明在方法体中
2.方法的定义:
public static 方法名称(){
方法体;
}
package day21;
public class Demo04 {
public static void main(String[] args) {
}
public static void farmer(){
System.out.println("播种");
System.out.println("施肥");
System.out.println("浇水");
System.out.println("收割");
System.out.println("卖给小商贩");
}
public static void seller(){
System.out.println("抬到农贸市场");
System.out.println("提高价格");
System.out.println("吆喝");
System.out.println("卖给厨子");
}
public static void cook(){
System.out.println("洗菜");
System.out.println("切菜");
System.out.println("炒菜");
System.out.println("装盘");
}
public static void me(){
System.out.println("吃");
}
}
注意事项:
方法定义的顺序无所谓
定义方法的时候,不能产生嵌套包含关系
方法定义好了之后,不会执行的,如果想要执行,一定要进行方法的调用
3.方法的调用:
方法调用的格式:
方法名称();
4.练习
package day21;
public class Demo04 {
public static void main(String[] args) {
farmer();
cook();
seller();
me();
}
public static void farmer(){
System.out.println("播种");
System.out.println("施肥");
System.out.println("浇水");
System.out.println("收割");
System.out.println("卖给小商贩");
}
public static void seller(){
System.out.println("抬到农贸市场");
System.out.println("提高价格");
System.out.println("吆喝");
System.out.println("卖给厨子");
}
public static void cook(){
System.out.println("洗菜");
System.out.println("切菜");
System.out.println("炒菜");
System.out.println("装盘");
}
public static void me(){
System.out.println("吃");
}
}
运行结果:
播种
施肥
浇水
收割
卖给小商贩
洗菜
切菜
炒菜
装盘
抬到农贸市场
提高价格
吆喝
卖给厨子
吃
补:
第四章.JShell脚本工具
1.JShell脚本工具:
1.当我们编写的代码非常少,不想创建类,main方法时,可以使用JShell脚本工具
使用方法:
打开cmd命令提示符窗口,输入jshell命令,输入代码后,按回车执行,按/exit退出
jdk9或以上版本可以使用,jshell不适用于开发
2.编译器的优化
package day21;
public class Demo05 {
public static void main(String[] args) {
byte num1 = 30;
System.out.println(num1);
//右面的30是一个int类型的数,int --> byte ,不是自动类型转换
//当右侧数值没有超过左侧数据类型的时候,编译器会自动补上强制类型转换的格式
}
}
package day21;
public class Demo06 {
public static void main(String[] args) {
short a = 5;
short b = 8;
//short result =a + b; //错误:左侧应该用int类型
short result = 5 + 8;
System.out.println(result);
//当右侧两个为常量时,没有别的量时,就是正确的 "编译器的常量优化",当有变量参与时,此优化不再启用
}
}