Java 基础语法
文章目录
类型转换
自动类型转换
什么是自动类型转换,为什么要学习自动类型转换?
- 类型范围小的变量,可以直接赋值给类型范围大的变量。
自动类型转换的底层原理
自动类型转换的其他形式
- 为什么要进行类型转换?
- 存在不同类型的变量赋值给其他类型的变量。
- 自动类型转换是什么样子的?
- 类型范围小的变量,可以直接赋值给类型范围大的变量。
表达式的自动类型转换
表达式的自动类型转换
- 在表达式中,小范围类型的变量会自动转换成较大范围的类型再运算。
注意事项: - 表达式的最终结果类型由表达式种的最高类型决定。
- 在表达式中,byte、short、char是直接转换成 int类型参与运算的。
- 表达式的自动类型转换是什么样的?
- 小范围的类型会自动转换成大范围的类型运算。
- 表达式的最终结果类型是由谁决定的?
- 最终类型由表达式中的最高类型决定。
- 表达式中有哪些类型转换是需要注意的?
- byte short char 是直接转换成 int 类型参与运算的。
强制类型转换
场景
问题
- 类型范围大的数据或者变量,不能直接赋值给类型范围小的变量,会报错。
强制类型转换
- 可以强行将类型范围打的变量、数据赋值给类型范围小的变量。
强制类型转换底层原理
注意事项 - 强制类型转换可能造成数据(丢失)溢出;
- 浮点型强转成整型,直接丢掉小数部分,保留整数部分返回。
- 什么是强制类型转换?
- 可以强行将类型范围大的变量、数据复制给类型范围小的变量。
数据类型 变量 = (数据类型)变量、数据
- 强制类型转换有哪些需要注意的?
- 可能出现数据丢失。
- 小数强制转换成整数是直接截断小数保留整数。
运算符
基本算数运算符
运算符
- 运算符:对字面量或者变量进行操作的符号。
算数运算符
- 算数运算符有哪些?
- +、-、*、/、%
- ==/==需要注意什么,为什么?
- 如果两个整数做除法,其结果一定是整数,因为最高类型是整数。
案例:数值拆分
+ 符号做连接符
“+” 做连接符
- “+” 符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。
独门秘籍
- 能算则算,不能算就在一起。(计算机很聪明)
// 目标:+ 符号做连接符的识别
int a = 5;
System.out.println("abc" + 'a'); // abca
System.out.println("abc" + a); // abc5
System.out.println(5 + a); // 10
System.out.println("abc" + 5 + 'a'); // abc5a
System.out.println(15 + "abc" + 15); // 15abc15
System.out.println(a + 'a'); // 102,'a'的底层是二进制存储,是97,所以结果是102
System.out.println(a + "" + 'a'); // 5a
System.out.println(a + 'a' + " itheima "); // 102 itheima
System.out.println("itheima" + a + 'a'); // itheima5a
System.out.println("itheima" + (a + 'a')); // itheima102
- + 除了做基本数学运算,还有哪些功能?
- 与字符串做 + 运算时会被当成连接符,其结果还是字符串。
- 能算则算,不能算就在一起。
自增自减运算符
自增自减运算符
注意:
- ++ 和 – 既可以放在变量的后边,也可以放在变量的前边。
- ++、–只能操作变量,不能操作字面量。
自增自减的使用注意事项
- ++、–如果不是单独使用(如在表达式中、或者同时有其它操作),放在变量前后会存在明显区别
- 放在变量的前面,先对变量进行 +1、-1,再拿变量的值进行运算。
- 放在变量的后面,先拿变量的值进行运算,再对变量的值进行 +1、-1
- 放在变量的前面,先对变量进行 +1、-1,再拿变量的值进行运算。
- 自增、自减运算符是什么,有什么作用?
- ++、–。对当前变量 +1、-1
- 自增、自减运算符在变量前后有区别吗?
- 如果单独使用放前后是没有区别的。
- 非单独使用:在变量前,先进行变量自增 / 自减,再使用变量。
- 非单独使用:在变量后,先使用变量,再进行变量自增 / 自减。
案例:自增、自减拓展案例(有些面试题会出现)
int c = 10;
int d = 5;
int rs3 = c++ + ++c - --d - ++d + 1 + c--;
// c 10 11 12 11
// d 5 4 5
// rs3 = 10 + 12 - 4 - 5 + 1 + 12 = 26
System.out.println(c); // 11
System.out.println(d); // 5
System.out.println(rs3); // 26
赋值运算符
基本赋值运算符
- 就是 “=”
int a = 10; // 先看 “=” 右边,把数据10赋值给左边的变量 a 存储。
扩展赋值运算符
注意:扩展的赋值运算符隐含了强制的类型转换。
- 赋值运算符有哪些?
- =、+=、-=、*=、/=、%=
- 作用是什么?
- 基本作用是赋值。
- += 还可以实现数据的累加,把别人的数据加给自己。
关系运算符
关系运算符
- 是对数据进行条件判断的符号,最终会返回一个比较的布尔结果(false,true)。
注意:在做相等判断时,千万不要把 == 误写成 =
逻辑运算符
逻辑运算符概述
- 可以把多个条件的布尔结果放在一起运算,最终返回一个布尔结果。
短路逻辑运算符
注意:逻辑与 “&”、逻辑或 “|”:无论左边是 false 还是 true,右边都要执行
示例:
int a = 10;
int b = 20;
// System.out.println(a > 100 & ++b > 10); // false
// System.out.println(b); // b = 21
System.out.println(a > 100 && ++b > 10); //false
System.out.println(b); // b = 20
int i = 10;
int j = 20;
// System.out.println(i > 2 | ++j > 10); // true
// System.out.println(j); // j = 21
System.out.println(i > 2 || ++j > 10); // true
System.out.println(j); // 20
- 逻辑运算符有哪些,有什么特点?
- 逻辑与 “&”:有一个为 false、结果是 false
- 短路与 &&:一个为 false、结果是 false。前一个为 false,后一个条件不执行了
- 逻辑或 “!”:有一个为 true、结果是 true
- 短路或 “!!”:一个为 true、结果是 true。前一个为 true,后一个条件不执行了
- 逻辑非 “!”:!false = true、!true = false
- 逻辑异或 “^”:相同是 false、不同是 true
- 注意:实际开发中、常用的逻辑运算符还是:&&、||、!
三元运算符
三元运算符介绍
- 格式:
条件表达式 ? 值1 : 值2;
- 执行流程:首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2。
案例:求三个整数的最大值
需求:定义三个整数,找出最大值并打印在控制台。
分析:
- 用三元运算符获取前两个整数的最大值,并用临时变量保存起来。
- num1 > num2 ? num1 : num2;
- 用三元运算符,让临时最大值,和第三个整数,进行比较,并记录结果。
- tem > num3 ? tem : num3;
- 输出结果
int i = 10;
int j = 30;
int k = 50;
// 1. 找出2个整数的较大值
int temp = i > j ? i : j;
// 2. 拿临时变量与第三个变量的值继续比较
int rsMax1 = temp > k ? temp : k;
System.out.println(rsMax1);
System.out.println("---------------拓展知识----------------");
int rsMax2 = i > j ? (i > k ? i : k) : (j > k ? j : k);
System.out.println(rsMax2);
运算符优先级
运算符优先级
- 在表达式中,哪个运算符先执行后执行是要看优先级的,例如 “*、/” 的优先级高于 “+、-”。
运算符优先级
// 目标:看看 Java 是否存在优先级,大家以后需要注意优先级问题
System.out.println(10 > 3 || 10 > 3 && 10 < 3); // true
System.out.println((10 > 3 || 10 > 3) && 10 < 3); // false
案例知识:键盘录入技术
需求:
- 请完成 Java 程序与用户的交互,比如录入用户输入的名称、年龄,怎么办?
API(Application Programming Interface,应用程序编程接口)
- Java 写好的程序(功能代码),咱么可以直接调用。
- Oracle 也为 Java 写好的程序提供了相应的 API 文档(技术使用说明书)
下载 API 文档
http://www.oracle.com/technetwork/java/javase/downloads/index.html
键盘录入功能实现的三个步骤:
- 导包:告诉程序去 JDK 的哪个包中找扫描器技术
- 谢依阿华功能代码代表得到键盘扫描器对象
- 等待接受用户输入数据
// 1. 导包操作(并不需要自己写,以后通过工具进行导入更方便)
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
// 目标:学会使用键盘录入技术
// 2. 得到一个键盘扫描器对象
Scanner sc = new Scanner(System.in);
// 3. 调用 sc 对象的功能等待接受用户输入的数据
// 这个代码会等待用户输入数据,指导用户输入完数据并按了回车键就会把数据拿到。
System.out.println("请输入您的年龄:");
int age = sc.nextInt();
System.out.println("年龄是:" + age);
System.out.println("请输入您的名称:");
String name = sc.next();
System.out.println("欢迎:" + name);
}
}
注意:
- System、String 在 JDK 中的 Java.lang 包下
- lang 包不需要我们导包,是默认的包
- API 是什么?
- Application Programming Interface,应用程序编程接口。
- Java 写好的程序,咱们可以直接调用。
- 键盘录入的开发步骤
- 导包:import java.util.Scanner;
- 抄写代码得到扫描器对象:Scanner sc = new Scanner(System.in)
- 抄写代码等待接收用户输入的数据:sc.nextInt()、sc.next()