1.Java基础知识
1.类型转换知识(如何实现程序中不同类型的变量或者数据互相传输,不同类型的数据运算的结果数据的类型如何确定)
2.运算符的使用(程序中怎么进行数据的基本算数运算、以及一些逻辑运算、Java提供了具体哪些运算方式)
3.怎么调用Java提供的程序(程序员需要调用Java写好的一些程序,这些程序如何去调用)
2.自动类型转换
类型范围小的变量,可以直接赋值给类型范围大的变量
底层原理
byte a = 12; // a 0000 1100 (8位)
int b = a; // b 00000000 00000000 00000000 00001100 (32位)
自动类型转换的其他形式
byte —》 short —》 int —》 long —》 float ----》 double
char —》 int
int age = 23;
double db = age;
System.out.println(db); // 23.0
char ch = 'a';
int code = ch;
System.out.println(code); // 97
表达式的自动类型转换
在表达式中,小范围类型的变量会自动转换成昂前较大范围的类型再运算
byte、short、char —》 int ----》 long —》 float —》 double
注意:表达式的最终结果类型由表达式中的最高类型决定
在表达式中,byte、short、char是直接转换成int类型参与运算的
// 面试题
byte i =10;
byte j = 20;
int k = i+j;
System.out.println(k);
3.强制类型转换
类型范围大的数据或者变量,不能直接赋值个类型范围小的变量,会报错
强制类型转换
可以强行将类型范围的变量、数据赋值给类型范围小的变量
类型 变量 = (类型)变量
int a = 20;
byte b = (byte)a;
System.out.println(b);
System.out.println(a);
int i = 1500;
byte j = (byte)i;
System.out.println(j); // -36
注意:强制类型转换可能造成数据(丢失)溢出
浮点型强转成整型,直接丢掉小数部分,保留整数部分返回
double score = 99.5;
int i1 = (int) score;
System.out.println(i1); // 99
4.运算符
对字面量或者变量进行操作的符号
1.+ - * / %
int a = 10;
int b = 3;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b); // 3.3333 ==> 3
System.out.println(a * 1.0 / b); // 3.333333333
System.out.println(3 * 1.0 / 2); // 1.5
System.out.println(3 / 2 * 1.0); // 1.0
System.out.println(a % b);
若两个整数做除法,其结果一定是整数,若需要小数,可将被除数*1.0
2.+ 做连接符
+符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串
int a = 5;
System.out.println("abc" + 5); // abc5
System.out.println(a+'a'); // 102
System.out.println("a"+a+'a'); // a5a
能算则算,不能算就拼接
3.自增自减运算符
符号 | 作用 | 说明 |
---|---|---|
++ | 自增 | 变量自身的值加1 |
– | 自减 | 变量自身的值减1 |
注意:++和–既可以放在变量的后边,也可以放在变量的前边
++、–只能操作变量,不能操作字面量
++ – 如果不是单独使用(如在表达式中、或者同时有其他操作),放在变量前后会存在明显区别
放在变量的前面,先对变量及进行+1、-1,再拿变量的值进行计算
放在变量的后面,先拿变量的值进行计算、再对变量及进行+1、-1
int i = 10;
int j = ++i;
System.out.println(i); // 11
System.out.println(j); // 10
int m = 10;
int n = m++;
System.out.println(m); // 11
System.out.println(n); // 10
4.赋值运算符
基本赋值运算符
’=‘
扩展赋值运算符
符号 | 作用 | 说明 |
---|---|---|
+= | 加后赋值 | a+=b等价于(a的数据类型)(a+b);将a+b的值给a |
-= | 减后赋值 | a-=b等价于(a的数据类型)(a-b);将a-b的值给a |
*= | 乘后赋值 | a*=b等价于(a的数据类型)(ab);将ab的值给a |
/= | 除后赋值 | a/=b等价于(a的数据类型)(a/b);将a/b的值给a |
%= | 取余后赋值 | a%=b等价于a=(a的数据类型)(a%b); 将a%b的值给a |
注意:扩展运算符隐含了强制类型转换
// 赋值运算符 += -= *= /= %=
int a = 10;
int b = 200;
a += b; // a = (int)(a+b)
System.out.println(a); // 210
byte i =10;
byte j = 20;
i = (byte)(i+j); // i+=j
System.out.println(i); // 30
int m = 10;
int n = 5;
m -= n; // 5
// m *= n; // 50
// m /= n; // 2
// m %= n; // 0
5.关系运算符
是对数据进行条件判断的符号,最终会返回一个比较的布尔结果(false,true)
符号 | 说明 |
---|---|
== | a==b,判断a和b的值是否相等,成立为true不成立为false |
!= | a!=b,判断a和b的值是否不相等,成立为true不成立为false |
> | a>b,判断a是否大于b,成立为true不成立为false |
>= | a>=b,判断a是否大于等于b,成立为true不成立为false |
< | a<b,判断a是否小于b,成立为true不成立为false |
<= | a<=b,判断a是否小于等于b,成立为true不成立为false |
注:在做相等判断时,不要把 == 误写成 =
// 关系运算符
int a = 10;
int b = 10;
boolean rs = a == b;
System.out.println(rs); // true
System.out.println(a == b); // true
System.out.println(a != b); // false
System.out.println(a > b); // false
System.out.println(a >= b); // true
System.out.println(a < b); // false
System.out.println(a <= b); // true
6.逻辑运算符
可以把多个条件的布尔结果放在一起运算,最终返回一个布尔结果
符号 | 介绍 | 说明 |
---|---|---|
& | 逻辑与 | 必须都是true,只要有一个是false,记过一定是false |
| | 逻辑或 | 只要有一个为true、结果就是true |
! | 逻辑非 | 假为真 真为假 |
^ | 逻辑异或 | 如果两个条件都是false或者都是true结果是false。两个条件不同结果是true |
// 逻辑运算符,并能选择合适的逻辑运算符解决问题
double height = 175.8;
double weight = 155.5;
// 需求:身高大于175,体重小于 130
System.out.println(height > 175 & weight < 130); // false
// 需求:身高大于175或者体重小于130
System.out.println(height > 175 | weight < 130); // true
System.out.println(!(height > 175)); // false
短路逻辑运算符
符号 | 介绍 | 说明 |
---|---|---|
&& | 短路与 | 判断结果与"&"一样。过程是左边false,右边不执行 |
|| | 短路或 | 判断结果与 "|"一样。过程是左边为true,右边则不执行 |
注意:逻辑与"&"、逻辑或"|":无论左边是false还是true,右边都要执行
int a = 10;
int b = 20;
System.out.println(a > 100 && ++ b > 10); // false
System.out.println(b); // 20
System.out.println(a > 100 & ++ b > 10); // false
System.out.println(b); // 21
int i = 10;
int j = 20;
System.out.println(i > 2 || ++j > 10); // true
System.out.println(j); // 20
System.out.println(i > 2 | ++j > 10); // true
System.out.println(j); // 21
7.三元运算符
格式: 条件表达式 ? 值1 : 值2
执行流程: 首先计算关系表达式的值,如果值为true,则返回值1,若为false,则返回值2
// 三元运算符
double score = 98;
String rs = score >= 60 ? "及格" : "挂科";
System.out.println(rs); // 及格
// 需求:需要从两个整数中找出最大值
int a = 10;
int b =200;
int max = a > b ? a : b;
System.out.println(max); // 200
8.运算符优先级
优先级 | 运算符 |
---|---|
1 | () |
2 | !、++、– |
3 | *、/、% |
4 | +、- |
5 | <<、>>、>>> |
6 | <、<=、>、>=、instanceof |
7 | == |
8 | & |
9 | ^ |
10 | | |
11 | && |
12 | || |
13 | ? |
14 | =、+=、-=、*=、/=、%=、&= |
// 优先级
System.out.println(10>3 || 10 > 3 && 10<3); //ture
System.out.println((10>3 || 10 > 3) && 10<3); // false
5.案例 数值拆分
需求:一个三位数,将个位数、十位数、百位数打印
int data = 589;
int ge = data % 10;
System.out.println(ge);
int shi = data / 10 % 10;
System.out.println(shi);
int bai = data / 100;
System.out.println(bai);
6.案例:自增、自减扩展案例
int k = 3;
int p = 5;
int rs = k++ + ++k - --p + p-- - k-- + ++p;
// 3(k=4) + 5(k=5) - 4(p=4) + 4(p=3) - 5(k=4) + 4(p=4)
System.out.println(k); // 4
System.out.println(p); // 4
System.out.println(rs); // 7
7.案例:求三个整数的最大值
分析:1.用三元运算符获取前两个整数的最大值,并用临时变量存储起来
2.用三语运算符,让临时最大值,和第三个整数,进行比较,并记录结果
3.输出结果
第一种方式
int i = 10;
int j = 20;
int k = 15;
int temp = i > j ? i : j;
int maxNum = temp > k ? temp : k;
System.out.println(maxNum);
第二种方式: 三元表达式嵌套
int i = 10;
int j = 20;
int k = 15;
int maxNum =( i > j ? i : j) > k ? j : k;
System.out.println(maxNum);
8.案例:键盘录入技术
需求:完成Java程序用户交互,如录入用户输入的名称、年龄
API(应用程序编程接口)
Java写好的程序(功能代码),可以直接调用
Oracle也为Java写好的程序提供了相应的API文档(技术使用说明书)
键盘录入功能实现的三个步骤
1.导包:告诉程序去JDK的哪个包中找扫描器技术
2.写一行代码代表得到键盘扫描器对象
3.等待接收用户输入数据
// 1.导包
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
// 学会使用键盘录入技术
// 2.得到一个键盘扫描器对象
Scanner sc = new Scanner(System.in);
// 3. 调用对象的功能 等待接收用输入的数据
// 这个代码会等待用户输入数据,知道用户输入数据并按下回车键就会把数据拿到
System.out.println("请输入您的姓名");
String name = sc.next();
System.out.println("请输入您的年龄");
int age = sc.nextInt();
System.out.println("您的姓名是:"+name+",您的年龄是:"+age);
}
}
注意:System、String在JDK中的Java.lang包下
lang包是不用导入的