关于Java语言基础知识同学们需要学会什么?

  • 类型转换知识:如何实现程序中不同类型的变量或者数据互相传输,不同类型的数据运算的结果数据的类型如何确定?

  • 运算符的使用:程序中怎么进行数据的基本算术运算、以及一些逻辑运算、Java提供了具体哪些运算方式

  • 怎么调用Java提供的程序:程序中怎么进行数据的基本算术运算、以及一些逻辑运算、Java提供了具体哪些运算方式

变量详解

变量里的数据在计算机中的底层逻辑

二进制

二进制:只有0、1,按照逢2进1的方式表示数据

十进制转二进制的算法:除二取余法。

字节和位

计算机中数据最小的组成单元:使用8个二进制位为一组,称之为一个字节(byte,简称B)

字节中的每个二进制位就称为 位(bit,简称b),1B = 8b

  • 数据在计算机底层都是怎么存储的?
    都是采用二进制:使用0、1,按照逢2进1的规则表示数据来存储。

  • 如何快速的算出一个数据的二进制形式?
    除二取余法

  • 数据在计算机底层存储的最小单位是什么?
    字节,一个字节等于8个二进制位:1B=8b

  • 其他数据是如何储存的?
    Text文本、Image图片、Sound声音

  • 字符在计算机中是如何存储的呢?
    ASCII编码表:即美国信息交换标准编码,规定了现代英语、数字字符、和其他西欧字符对应的数字编号。

  • 图片数据-彩色图

    1. 图片就是无数个像素点组成的
    2. 每个像素点的数据:用0 ~ 255*255*255表示其颜色
  • 声音数据:波形图

  • 字符数据在计算机中是怎么存的?

    • 字符存的是ascii码表中对应的数字的二进制形式。
    • 字符’A’对应的数字是 65
    • 字符’a’对应的数字是 97
    • 字符’0’对应的数字是 48

十进制与二进制相互转换

  • 十进制转二进制:除二取余
  • 二进制转十进制:乘权求和

2022-99 (1)

八进制、十六进制介绍

  • 为了便于观察和表示二进制,推出了八进制和十六进制。

  • 每3位二进制作为一个单元,最小数是0,最大数是7,共8个数字,这就是八进制

    1. 97=>001100001九十七转为二进制
    2. 001、100、001=>141二进制转为八进制
  • 每4位二进制作为一个单元,最小数是0,最大数是15,共16个数字,依次用: 0~9 A B C D E F 代表就是十进制

    1. 97=> 011000010110、0001=>61
    2. 250=> 11111010,1111、1010=>FA`

Java程序中支持书写二进制、八进制、十六进制的数据,分别需要以0B或者0b、0、0X或者0x开头。

计算机的数据单位

计算机最小的组成单元是:字节,1B = 8b

在B的基础上,计算机发展出了KB、MB、GB、TB、…. 这些数据单位。

1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB

数据类型

数据类型的作用

数据类型就是约束变量存储数据的形式:数据类型 变量名称 = 初始值;

数据类型的分类

  • 引用数据类型:除基本数据类型之外的,如String ,其他的后面学习
  • 基本数据类型:4大类8种

2022-99 (2)

总结

  • 数据类型分为几种?

    • 引用数据类型:String
    • 基本数据类型:4大类8种。
      • byte short int(默认) long 整型
      • float double(默认) 浮点型
      • char 字符型(一个字母、数字或汉字)
      • boolean 布尔型
  • 随便写的整数、小数字面值默认什么类型?

    • 23 ,默认是int类型 , 加上L/l就是long类型的数据了。
    • 23.8,默认是double类型,加上F/f就是float类型了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package study;

/**
* 基本数据类型
*/
public class Dome2 {
public static void main(String[] args) {

// 整数
byte a = 1;
short b = 22;
int c = 333;
long d = 4444L;

// 浮点数
float e = 5555.5F;
double f = 666.666;

// 字符
char g = '字';

// 布尔
boolean h = true;
boolean i = false;
}
}

  1. java中的单引号表示字符,java中的双引号是字符串。
  2. 单引号引的数据一般是char类型的;双引号引的数据 是String类型的。
  3. java中单引号里面只能放一个字母或数字或符号;java中的双引号里面是0到多个字符构成。所以字符可以直接转换成字符串。字符串需要使用charAt(n) 来获取第几个字符。

类型转换

自动类型转换

  • 为什么要进行类型转换?
    存在不同类型的变量赋值给其他类型的变量

  • 自动类型转换是什么样的?
    类型范围小的变量,可以直接赋值给类型范围大的变量。

  • 自动类型转换底层原理

    2022-99 (3)

表达式的自动类型转换

  • 在表达式中,小范围类型的变量会自动转换成当前较大范围的类型再运算。
    byte、short、char=>int=>long=>float=>double

  • 达式的最终结果类型由表达式中的最高类型决定。

  • 在表达式中,byte、short、char直接转换成int类型参与运算的。

强制类型转换

  • 类型范围大的数据或者变量,不能直接赋值给类型范围小的变量,会报错。

    1
    2
    int a = 20;
    byte b = a; // 报错
  • 强制类型转换:可以强行将类型范围大的变量、数据赋值给类型范围小的变量。

    1
    2
    int a = 20;
    byte b = (byte) a;

    语法是数据类型 变量 = (数据类型) 变量或数据

  • 强制类型转换底层原理

    2022-99 (4)

  • 注意事项:

    • 强制类型转换可能造成数据(丢失)溢出
    • 浮点型强转成整型,直接丢掉(截断)小数部分,保留整数返回
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package study;

/**
* 强制类型转换
*/
public class Dome4 {
public static void main(String[] args) {
// int 类型
int a = 20;
// byte 类型,一个字节8位 -128~127
byte b = (byte) a;

System.out.println(b);


int c = 2000;
byte d = (byte) c;
System.out.println(d);
}
}

运算符

基本算术运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package study;

/**
* 算术运算符
*/
public class Dome5 {
public static void main(String[] args) {
// 加+
System.out.println(1 + 1);

// 减-
System.out.println(1 - 2);

// 乘*
System.out.println(1.0 * 10);

// 除/
System.out.println(2 / 3);

// 取余%
System.out.println(2 % 3);
}
}
  • Java中两个整数相除结果还是整数,浮点数与整数相除结果是浮点数,取决于最高类型是什么。

案例:数值拆分

  • 需求:一个三位数,将其拆分为个位、十位、百位后,打印在控制台
    1. 使用 Scanner 键盘录入一个三位数
    2. 个位的计算:数值 % 10

公式总结:
个位 :数值 % 10
十位 :数值 / 10 % 10
百位 :数值 / 10 / 10 % 10
千位 :数值 / 10 / 10 / 10 % 10;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package study;

/**
* 数值拆分
*/
public class Dome6 {
public static void main(String[] args) {
int a = 362;
// 个位
System.out.println("个位" + a % 10);
// 十位
System.out.println("十位" + a / 10 % 10);
// 百位
System.out.println("百位" + a / 10 / 10 % 10);
}
}

案例知识:键盘录入技术

1
2
3
4
5
6
7
8
// 输入扫描
Scanner scanner1 = new Scanner(System.in);
int b = scanner1.nextInt(); // 接整型
System.out.println(b);

Scanner scanner2 = new Scanner(System.in);
String str = scanner2.next(); // 接字符串
System.out.println(str);

+符号做连接符

“+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package study;

/**
* 加号做连接符
*/
public class Dome7 {
public static void main(String[] args) {

int a = 5;

System.out.println("数字是:" + a);

// 字符串abc和字符a连接到一起
System.out.println("abc" + 'a');

// 字符串abc和a的值连接到一起
System.out.println("abc" + a);

// 能算就算,不能算就拼在一起
System.out.println(5 + a);

// 无法运算,只能拼接
System.out.println("abc" + 5 + 'a');

// 15abc15
System.out.println(15 + "abc" + 15);

// 5 + 97 = 102
System.out.println(a + 'a');

// 1 + 49 = 50
System.out.println(1 + '1');
System.out.println('1' + 1);

// 将字符串强转为数字,得97
char ch = 'a';
int ab = ch;
System.out.println(ab);

// a=5 a+"" 5a
System.out.println(a + "" + 'a');

// 能算则算:5+97=102 102+”htu“ "102htu"
System.out.println(a + 'a' + "htu");

// htu5a
System.out.println("htu" + a + 'a');

// 先算小括号:5+97=102 再算小括号外:”htu102“
System.out.println("htu" + ( a + 'a' ));
}
}

自增自减运算符

  • ++-- 既可以放在变量的后边,也可以放在变量的前边。

  • ++--只能操作变量,不能操作字面量。

  • 注意事项:如果不是单独使用(如在表达式中、或者同时有其它操作),放在变量前后会存在明显区别

    1. 放在变量的前面,先对变量进行+1、-1,再拿变量的值进行运算。
    2. 放在变量的后面,先拿变量的值进行运算,再对变量的值进行+1、-1

拓展案例(面试笔试题)

1
2
3
4
5
6
7
int c = 10;
int d = 5;
int rs3 = c++ + ++c - --d - ++d + 1 + c--;
// 10 + 12 - 4 - 5 + 1 + 12
System.out.println(rs3);
System.out.println(c);
System.out.println(d);

逐步分析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package study;

/**
* 自增自减运算符扩展案例
*/
public class Dome8 {
public static void main(String[] args) {
int c = 10;
int d = 5;
int rs3 = c++ + ++c - --d - ++d + 1 + c--;
// c++ // rs3=10 c=10+1=11
// ++c // c=11+1=12
// 10 + ++c // rs3=11+12=23
// --d // d=5-1=4
// 23 - --d // rs3=23-4=19
// ++d // d=4+1=5
// 19 - ++d // rs3=19-5=14
// 14 + 1 // rs3=14 + 1 =15
// c-- // c=12-1=11
// 15 + 11 // rs3=26
System.out.println(rs3); // 26
System.out.println(c); // 11
System.out.println(d); // 5
}
}

赋值运算符

2022-99 (5)

  • 作用:
    1. 基本作用是赋值,扩展运算符还自带了强制类型转换。
    2. +=还可以实现数据的累加,把别人的数据加给自己。

关系运算符

2022-99 (6)

  • 注意:在做相等判断是,千万不要把 == 误写成 =

逻辑运算符

2022-99 (7)
2022-99 (8)

  • 逻辑运算符有哪些,有什么特点?
    • 逻辑与 & :有一个为false、结果是false
    • 短路与 && : 一个为false、结果是false。前一个为false,后一个条件不执行了
    • 逻辑或 | :有一个为true、结果是true
    • 短路或 || :一个为true、结果是true。前一个为true,后一个条件不执行了
    • 逻辑非 ! :!false=true、 !true=false
    • 逻辑异或 ^ :相同是false、不同是true
    • 注意:实际开发中、常用的逻辑运算符还是:&&||!

三元运算符

格式:条件表达式 ? 值1 : 值2;

执行流程:首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2

案例:求三个整数最大值

  • 需求:定义三个整数,找出最大值并打印在控制台。
    1. 用三元运算符获取前两个整数的最大值,并用临时变量保存起来。num1 > num2 ? num1 : num2;
    2. 用三元运算符,让临时最大值,和第三个整数,进行比较,并记录结果。temp > num3 ? temp : num3;
    3. 输出结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package study;

/**
* 三元运算符案例:求三个整数最大值
*/
public class Dome10 {
public static void main(String[] args) {
int a = 5;
int b = 3;
int c = 8;

int temp = a > b ? a : b;
System.out.println(temp > c ? temp : c);
}
}

结合键盘输入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package study;

import java.util.Scanner;

/**
* 三元运算符案例:求三个整数最大值
*/
public class Dome10 {
public static void main(String[] args) {
Scanner scanner1 = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int a = scanner1.nextInt();

Scanner scanner2 = new Scanner(System.in);
System.out.println("请输入第二个整数:");
int b = scanner2.nextInt();

Scanner scanner3 = new Scanner(System.in);
System.out.println("请输入第三个整数:");
int c = scanner3.nextInt();

int temp = a > b ? a : b;
int max = temp > c ? temp : c;
System.out.println("最大的数是:" + max);
}
}

运算符优先级

优先级 运算符
1 ()
2 !~++--
3 */%
4 +-
5 <<>>>>>
6 <<=>>=instanceof
7 ==!=
8 &
9 ^
10 `
11 &&
12 `
13 ?:
14 =+=-=*=/=%=&=

参考内容:


键盘录入技术

  • 请完成Java程序与用户交互,比如录入用户输入的名称、年龄,怎么办?

    2022-99 (9)

  • API(Application Programming Interface,应用程序编程接口)

  • 键盘录入功能实现的三个步骤:

    2022-99 (10)

  • API是什么?

    1. Application Programming Interface,应用程序编程接口。
    2. Java写好的程序,咱们可以直接调用。
  • 键盘录入的开发步骤

    1. 导包:import java.util.Scanner;
    2. 抄写代码得到扫描器对象: Scanner sc = new Scanner(System.in)
    3. 抄写代码等待接收用户输入的数据: sc.nextInt()sc.next()