2. Java基础语法
2.1 数据存储(了解)
2.1.1 二进制
- 计算机中的所有信息都是二进制方式进行存储的,二进制就是只有0、1
- 换句话说,计算机只认识0和1两个数字,
- 我们要想把数字、文字、图片、视频等等内容保存到计算机中,都要想办法把它们转换为0和1才行
2.1.2 数字存储
1. 数字存储
- 二进制就是只有0、1,按照逢2进1的方式表示数
- 由上图可以看出4的二进制为: 100
2. 十进制转二进制的算法
你现在说的数字很小,那我一个数很大, 比如153,他的二进制难道我一个个12345678…. 这样推出来吗,有没有更直接的算法呢?
- 解决流程如下:
1. 将给定的十进制数不断地除以2,同时记录下每次的商和余数。
2. 将每次得到的余数作为二进制数的一个位数,从最低位开始记录。
3. 重复上述步骤,直到商为0为止。
4. 将得到的二进制数倒序排列,即可得到最终结果。
5. 以下是使用这种方法将十进制数153转换为二进制的过程:
153 ÷ 2 = 76 余 1(最低位)
76 ÷ 2 = 38 余 0
38 ÷ 2 = 19 余 0
19 ÷ 2 = 9 余 1
9 ÷ 2 = 4 余 1
4 ÷ 2 = 2 余 0
2 ÷ 2 = 1 余 0
1 ÷ 2 = 0 余 1(最高位)
然后将得到的余数倒序排列,即可得到153的二进制表示为10011001。
3. 计算机中的数据的基本单元和最小单位
- 数据存储基本单元:使用8个二进制位为一组,称之为一个字节(byte,简称B)
- 数据存储最小单位: 数据基本单元中,每个二进制位称为比特(bit,简称b), 1B = 8b
- 补充: 最高位一般作为符号位,0代表正数,1代表负数
4. 总结
- 数据在计算机底层都是使用___二进制___进制存储的
- 快速计算一个数据的二进制形式的方法是___除2取余法___
- 数据在计算机底层存储的基本单元是___字节(byte, B)___
- 数据在计算机底层存储的最小单位是___位(bit, b)___
2.1.3 其他存储
- 字符在计算机中是如何存储的呢?
- ASCII编码表:即美国信息交换标准编码,规定了现代英语、数字字符、和其他西欧字符对应的数字编号。
char ch = 'a';
- 图片数据
- 图片就是无数个像素点组成的
- 每个像素点的数据:用0 ~ 255255255表示其颜色
- 声音数据
- 总结
- 字符存的是___ASCII码表中对应的数字的二进制____形式
- 字符’0’对应的数字是__48___
- 字符’A’对应的数字是__65___
- 字符’a’对应的数字是__97___
- 图片、声音、视频等等内容在计算机中都是想办法转为___二进制____存储的
2.2 数据类型(重点)
2.2.1 数据类型的分类
1. 基本数据类型
- 基本数据类型: 4类8种
- 总结:
- 字符串的拼接使用+号
- +号的左右两边有任意一边是字符串,+就是拼接
2. 引用数据类型
- String : 字符串类型,
- 用于如: 需要存储姓名, 或者一段话 的时候会用到.
2.2.2 自动类型转换
1. 什么是自动类型转换?
- 类型转换就是指的不同类型的变量相互转换
- 类型范围小的变量,可以直接赋值给类型范围大的变量。
- 自动类型转换在计算机中的执行原理
- 自动类型转换的其他形式
int c = 10;
double d = c;
System.out.println(d);
char x = ‘中’;
int y = x;
2. 表达式的自动类型转换
- 在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型,再参与运算。
2.2.2 强制类型转换
- 类型范围大的数据或者变量,直接赋值给类型范围小的变量,会报错。
int a = 20;
byte b = a; //报错
1. 强制类型转换
- 强行将类型范围大的变量、数据赋值给类型范围小的变量。
- 目标数据类型 变量名 = (目标数据类型)变量值
int a = 20;
byte b = (byte)a;
2. 强制类型转换在计算机中的执行原理
3. 注意事项:
- 强制类型转换可能造成数据(丢失)溢出;
- 浮点型强转成整型,直接丢掉小数部分,保留整数部分返回.
2.2.3 总结
- 什么是强制类型转换?
- 默认情况下, 大范围类型的变量转小范围的变量会报错.
- 可以强制将类型大的变量, 数据赋值给数据类型范围小的变量.
- 强制类型转换有哪些需要注意的
- 可能会造成数据丢失.
- 小数强制全换成整数是直接截断小数保留整数.
2.3 运算符(重点)
2.3.1 算数运算符
1. 基本的算术运算符
- “+” 符号可以做连接符的
- “+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。
- “abc” + 5 —> “abc5”
int a = 5;
System.out.println("abc" + a);
System.out.println(a + 5);
System.out.println("itheima"+ a + 'a');
System.out.println(a + 'a' + "itheima");
- 秘籍: +号左右两边只要有一边就字符串, +号就做连接符使用
2. 总结:
- 算数运算符有哪些?
- (加)+ 、(减)-、 (乘)*、 (除)/、 (取余)%
-
/(除) 需要注意什么,为什么?
如果两个整数做除法,其结果一定是整数,因为最高类型是整数。 -
+(加) 除了做基本数学运算,还有哪些功能?
与字符串做+运算时会被当成连接符,其结果还是字符串。
识别技巧:能算则算,不能算就在一起。
- 案例:
package com.itheima.b_operator;
/*
算数运算符
+ 加法
- 减法
* 乘法
% 取余
/ 除法 在Java中,两个整数相除,结果还是整数,其实就是商
注意事项:
1. 如果想让结果是小数,那么必须让小数参与运算
2. 目前我么不用浮点数做精确运算(后面使用java提供的类完成精确运算)
*/
public class Demo1 {
public static void main(String[] args) {
int a = 10;
int b = 3;
double c = 4.0;
//1. 基本运算 , + - * %
System.out.println(a + b); //13
System.out.println(a - b); //7
System.out.println(b - a); //-7
System.out.println(a * b); //30
System.out.println(a % b); //1
//2. 两个整数相除,结果为整数,即 商
System.out.println(a/b); //2
//3. 如果想让结果是小数,那么必须让小数参与运算
System.out.println(a/c); //2.5
//4. 目前不用浮点数做精确运算(后面使用java提供的类完成精确运算)
//如:0.1+0.2
System.out.println(0.1+0.2); //人为计算是0.3,但是计算机计算后结果会在0.3上下浮动
}
}
### 2.3.2 自增自减运算符
#### 1. 自增自减运算符
- 
- 注意:++ 、-- 只能操作变量,不能操作字面量的。
#### 2. 自增自减的使用注意事项
- ++、--如果不是单独使用(如在表达式中、或者同时有其它操作),放在变量前后会存在明显区别
放在变量的前面,先对变量进行+1、-1,再拿变量的值进行运算。
```java
int a = 10;
int rs = ++a; //(先加再用)
- 放在变量的后面,先拿变量的值进行运算,再对变量的值进行+1、-1
int b = 10;
int rs = b++; //(先用再加)
3. 总结
-
1、自增、自减运算符是什么,有什么作用,需要注意什么?
- ++、–;对当前变量值+1、-1
- 只能操作变量,不能操作字面量
-
2、自增、自减运算符放在变量前后有区别吗?
- 如果单独使用放前放后是没有区别的。
- 非单独使用:在变量前 ,先进行变量自增/自减,再使用变量。
- 非单独使用:在变量后 ,先使用变量,再进行变量自增/自减。
4. 案列
package com.itheima.b_operator;
/*
自增 自减
自增:++ 放在某个变量前面或者后面,对变量自身的值加1
自减:-- 放在某个变量前面或者后面,对变量自身的值减1
注意事项:
1. 如果变量单独使用,符号在前、在后没有区别
2. 自增 自减 只能操作变量,不能操作字面量
3. 如果变量参与操作
符号在前:就先++, 后参与操作
符号在后: 就先参与操作, 后++
4. 打印也是一种操作,会按照第2条执行
*/
public class Demo4 {
public static void main(String[] args) {
int a=10;
System.out.println(a++); //10
System.out.println(a++); //11
System.out.println(++a); //13
System.out.println("--------分割线-----------");
int c=10;
int d=5;
// c: 11
// d: 5
// rs3: 10 + 12 - 4 - 5 + 1 + 12 = 26
int rs3= c++ + ++c - --d - ++d + 1 + c--;
System.out.println(c); //11
System.out.println(d); //5
System.out.println(rs3); //26
}
}
2.3.3 赋值运算符
1. 基本赋值运算符
- 就是“=”,从右边往左看。
int a = 10; // 先看“=”右边,把数据10赋值给左边的变量a存储。
2. 扩展赋值运算符
- 注意:扩展的赋值运算符隐含了强制类型转换。
3. 总结
- 赋值运算符有哪些?
- 基本的赋值运算符:= (从右边往左看)
- 扩展的赋值运算符:+=、-=、*=、/=、%=
- 扩展赋值运算符的作用是什么?有什么特点
- +=可以实现数据的累加,把别人的数据加给自己。
- 扩展的赋值运算符自带强制类型转换。
package com.itheima.b_operator;
/*
赋值运算符
基本赋值运算符 =
将=号右边的值赋值给左边的变量
扩展赋值运算符 +=
将符号两边的变量做加法,然后将结果再复制给等号左边
a+=b ----> a = (a的类型)(a+b)
经典面试题:
已知: short s = 1;
那么下面两种写法的结果是否一致:
s+=1;
s = s + 1;
*/
public class Demo5 {
public static void main(String[] args) {
//基本赋值运算符 =
int a = 10;
//扩展的赋值运算符:+=、-=、*=、/=、%=
System.out.println(a+=2); //12
System.out.println(a); //12
System.out.println(a-=2); //10
System.out.println(a*=2); //20
System.out.println(a/=2); //10
System.out.println(a%=2); //0
short b=1;
b+=2; //3 b+=2;详细为 b = (short)b + 2;
// b=b+2; //报错, byte, short, char在运算时会先转换成int型,在计算
}
}
2.3.4 关系运算符
1. 关系运算符
- 判断数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值:true或者false。
- 注意:在java中判断是否相等一定是“== ” ,千万不要把 “== ”误写成 “=”。
2.3.5 逻辑运算符
1. 逻辑运算符
- 把多个条件放在一起运算,最终返回布尔类型的值:true、false。
- 注意:在java中, “&” 、 “|”: 无论左边是 false还是 true,右边都要执行。
2. 总结
- 逻辑运算符有哪些,有什么特点?
-
& : 有一个为false、结果是false
-
&&: 一个为false、结果是false,但前一个为false,后一个条件不执行了
-
| : 有一个为true、结果是true
-
|| :一个为true、结果是true,但前一个为true,后一个条件不执行了
-
! :!false=true、 !true=false
^ :相同是false、不同是true。 -
注意:实际开发中、常用的逻辑运算符还是:&& 、 || 、 !
-
案例:
package com.itheima.b_operator;
/*
逻辑运算符: 把多个条件放在一起运算,最终返回布尔类型的值:true、false
& 逻辑与 理解为并且 多个条件中有一个是false,结果就是false
| 逻辑或 理解为或者 多个条件中有一个是true, 结果就是true
! 逻辑非 取反
^ 逻辑异或 相同为false,不同为true
短路逻辑运算符
&& 同&,但是一旦表达式有false,右边不再执行
|| 同|,但是一旦表达式有true,右边不再执行
*/
public class Demo7 {
public static void main(String[] args) {
int a = 1;
//& 逻辑与 理解为并且 多个条件中有一个是false,结果就是false
boolean b = 3 > 1 & 2 < 1;
System.out.println(b); //false
boolean b2 = 3 > 1 & 2 > 1;
System.out.println(b2); //true
boolean b3 = 3<1 & a++<1;
System.out.println(b3); //false
System.out.println(a); //2, 右边执行
//| 逻辑或 理解为或者 多个条件中有一个是true, 结果就是true
boolean b4 = 3>1 | 2>1;
System.out.println(b4); //true
boolean b5 = 3<1 | a++<1;
System.out.println(b5); //false
System.out.println(a); //3, 右边执行
//! 逻辑非 取反
boolean b6= !(3>1);
System.out.println(b6); //false
//^ 逻辑异或 相同为false,不太为true
boolean b7= 3 > 1 ^ 2 < 1;
System.out.println(b7); //true
//短路逻辑与&& 同&,但是一旦表达式有false,右边不再执行
boolean b8 = 3 > 1 && 2 < 1;
System.out.println(b8); //false
boolean b9 = 3 > 1 && 2 > 1;
System.out.println(b9); //true
boolean b10 = 3<1 && a++<1;
System.out.println(b10); //false
System.out.println(a); //3, &&左边不执行
//短路逻辑或|| 同|,但是一旦表达式有true,右边不再执行
boolean b11 = 3>1 || 2>1;
System.out.println(b11); //true
boolean b12 = 3<1 || 2>1;
System.out.println(b12); //true
boolean b13 = 3<1 || a++<1;
System.out.println(b13); //false
System.out.println(a); //4, ||右边执行
boolean b14 = 3>1 || a++>1;
System.out.println(b14); //true
System.out.println(a); //4, ||右边不执行
}
}
2.3.6 三元运算符
1.三元运算符
- 格式: 条件表达式 ? 值1 : 值2;
- 执行流程:首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2。
2. 总结
- 案列:
package com.itheima.b_operator;
/*
三元运算符
格式:
数据类型 变量名 = 条件表达式 ? 表达式1 : 表达式2;
执行流程:
先判断条件表达式,如果成立,返回表达式1的结果; 如果不成立,返回表达式2的结果
*/
public class Demo8 {
public static void main(String[] args) {
//案例1: 使用三元运算符判断成绩score是否及格
int score = 90;
String s = score >= 60 ? "及格" : "不及格";
System.out.println(score + "(成绩): " + s);
//案例2: 使用三元运算符,判断两个整数中的最大值,并打印
int a = 10;
int b = 20;
int max = a>b?a:b;
System.out.println("a, b中最大值为: " + max);
//案例3: 使用三元运算符,判断三个整数中的最大值,并打印
int x = 10;
int y = 30;
int z = 20;
int max2 = x>y?x:y;
max2 = max2>z?max2:z;
System.out.println("x, y, z中最大值为:" + max2);
}
}
2.3.7 运算符优先级
- 在表达式中,哪个运算符先执行后执行是要看优先级的,例如 “*、/” 的优先级高于”+、-”。
优先级 | 运算符 |
---|---|
1 | () |
2 | !、-、++、– |
3 | *、/、% |
4 | +、- |
5 | <<、>>、>>> |
6 | <、<=、>、>=、instanceof |
7 | ==、!= |
8 | & |
9 | ^ |
10 | | |
12 | && |
13 | ?: |
14 | =、+=、-=、*=、/=、%/、&= |
- 看看Java是否存在优先级,大家以后需要注意优先级问题
- System.out.println(10 > 3 || 10 > 3 && 10 < 3); // true
2.4 键盘录入(重点)
1. 需求
- API (Application Programming Interface:
应用程序编程接口)- Java写好的程序,咱们程序员可以直接拿来调用。
- Java为自己写好的程序提供了相应的 程序使用说明书(API文档)。
- 下载API文档:官方API文档
2. 分析
3. 代码实现:
package com.itheima.c_scanner;
import java.util.Scanner;
/*
键盘录入对象 Scanner (java写好的程序)
1、导包(照抄): Scanner是JDK中已经写好的一个类,我们要找到它,就要先导入它所在的包
2、创建对象(照抄): Scanner类代表键盘扫描到的内容
3、接收数(照抄): 可以从Scanner中接收整数、小数和字符串
*/
public class Demo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("用户的年龄是: " + age);
System.out.print("请输入你的姓名: ");
String name = sc.next();
System.out.println("用户的姓名是: " + name);
}
}
4. 总结:
- API是什么?API文档是什么?
- 应用程序编程接口:Java写好的程序,咱们可以直接调用。
- Java提供的程序使用说明书。
- Java程序中如何实现接收用户键盘输入的数据?
- 使用Java提供的Scanner来完成,步骤如下:
- 导包:import java.util.Scanner;
- 创建扫描器对象: Scanner sc = new Scanner(System.in)
- 等待接收用户输入的数据:
- int age = sc.nextInt();
- String name = sc.next();
-
- 到此教程就结束了.
- 转载: 请附上本文链接.
- 如果文章对你有帮助, 可以点赞收藏一下, 以防下次需要可以快速找到.