Day02
Java基础语法
1、变量详解
1.变量里的数据在计算机的底层原理
变量里数据存储通过二进制的形式( 0,1)
十进制转二进制的算法:除二取余,倒着取
- 计算机中数据的最小单位:字节(byte,B)
- 字节中每个二进制位称为:位(bit,b)
- 1B=8b
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d44JKKpd-1668092231998)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110101240575.png)]
其他数据形式存储:
- 文本:字符在计算机中存储也是二进制,通过ASCII编码表,转换为二进制
- 记:A:65,a:97,0:48
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hm0XgeZX-1668092231999)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110101612062.png)]
- 图片:图片由像素点组成:0~255 * 255 * 255表示颜色(红黄蓝)
- 声音:也是二进制表示
十进制转二进制的方法:除二取余
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p4TzlTdO-1668092231999)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110124608508.png)]
二进制转十进制:
- 记:二进制 1111 每个位置对应 8 4 2 1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JP1eZECC-1668092232000)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110124633613.png)]
八进制,十六进制:
- 八进制:每3位二进制一个单元,范围:0-7,相邻单元拼接
- 十六进制:每4位二进制一个单元,范围:0-15,超过9,用A(10),B,C,D,E,F,相邻单元拼接
- 注:Java程序中支持书写二进制、八进制、十六进制的数据,分别需要以0B或者0b、0、0X或者0x开头。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Di5qdqM-1668092232001)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110124800591.png)]
计算机的数据单位:
- 计算机最小的数据单位是:字节(byte,B)
- 一个字节由8位(bit,b)组成:1B = 8 b;
- 在B的基础上,计算机发展出了KB、MB、GB、TB、…. 这些数据单位。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ix8RcVMU-1668092232001)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110125446571.png)]
2.数据类型:
数据类型:
- 基本数据类型:4大类8种
- 引用数据类型:后面学
基本数据类型:
- 记字节
- 记字符表示的数据范围,以及其他类型数据范围位数
- long类型超过10位,数据后面要加:L/l
- float类型,数据后面加:F/f
- int类型为整数默认类型
- double为浮点型默认类型
- 数据.var可以自动填充数据类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iiAZe38h-1668092232001)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110125717180.png)]
package com.itheima.datatype;
public class Demo {
public static void main(String[] args) {
//目的:掌握四大类8种基本数据类型的表示
//整型:4种
//byte:1个字节 -128-127
byte age = 127;
// byte age2 = 128;
//short:2个字节
short money = 32000;
// short money2 = 35000;
//int:4个字节 默认类型 10位
int people = 1400000000;
//long:8个字节 19位
// 注意因为默认类型是int,所以超过10位会报错,想正确表示后面加L/l
long h = 1234567890;
long i = 2333333333333333333L;
//浮点型
//float :4个字节 ,后面加F/f
float b = 3.14F;
//double:8个字节,默认类型
double c = 1223.233;
//字符型:2个字节 0-65535
char d = 65535;
char g ='s';
//布尔型:一个字节
boolean e = true;
boolean f = false;
}
}
2、类型转换
1.自动类型转换
- 自动类型转换:数据类型范围小的变量,可以直接赋给数据类型范围大的变量
- 二进制表示数据:开头0为正数,1为负数
- char类型直接转换为int
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2oV3JOF8-1668092232002)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110164053104.png)]
为什么要进行类型转换?
- 因为存在不同类型的变量赋值给其他类型变量场景的存在
- 存在不同数据类型进行计算
什么是自动类型转换?
- 数据类型范围小的变量可以直接赋值给数据类型大的变量
2.表达式的自动类型转换
- 表达式中的小范围的变量类型会自动转换成表达式中范围大的变量类型,再参与运算
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XkWP09s8-1668092232003)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110172815967.png)]
注意:
- 表达式最终的结果是由表达式中最高类型决定
- 表达式中,byte,short,char是直接转换为int类型再去参与运算
package com.itheima.typeconversion;
public class Demo2 {
public static void main(String[] args) {
//目标:掌握表达式自动类型转换
//表达式的结果类型由最高类型决定
//最高为long,表达式结果为long
//最高为float,表达式结果为float
//最高为double,表达式结果为double
//表达式只有byte,short , char ,表达式结果类型为int
//若是同类型运算超出该类型范围,计算时会损失精度,计算后的结果虽转换为高一级也不对
int i = 1500000000;
int i2 = 1000000000;
long i3 = i + i2;
System.out.println(i3);
byte a = 127;
byte b = 100;
int c = a + b;
float d = 3.14f;
int e = 20;
float f = e + d;
long g = 1234567890;
int h = 1222222222;
long p = g + h;
}
}
3.强制转换
- 数据类型范围大的变量直接赋值给数据类型范围小的变量会报错
- 强制类型转换:就是强行将数据类型范围大的变量赋值给数据类型范围小的变量
- 数据类型 变量2 = (数据类型)变量1/数据
int a = 20;
byte b = (byte)a;
-
强制转换的原理:范围大的末尾二进制依次给到范围小的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IWlqnNUm-1668092232003)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110185047930.png)]
-
注意:
- 强制转换类型可能导致数据丢失
- 浮点型转换成整型,会直接丢掉小数部分,保留完整整数部分
package com.itheima.typeconversion;
public class Demo3 {
public static void main(String[] args) {
// 目的:掌握数据的强制类型转换
//格式:数据类型 变量 = (数据类型)变量1/数据
int a = 200;
byte b = (byte) a;//转换快捷键 alt+enter
System.out.println(b);//-56
float c = 3.14f;
int d = (int) c;
System.out.println(d);//3
}
}
3、运算符
1.基本运算符,连接符+
- 基本运算符: + - * / %
- 注意:除法,在Java中两个整数相除仍然是整数,小数会去掉,因为两个整数,最高类型就是整数,故结果是整数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k0OV3xnZ-1668092232004)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110185912589.png)]
package com.itheima.operator;
public class Demo1 {
public static void main(String[] args) {
int a = 40;
int b = 30;
System.out.println(a+b);
System.out.println(a-b );
System.out.println(a/b); //注意两个整数进行除法运算,结果取整数部分,舍弃小数部分,因为要选择参与运算的数据的最高数据类型
System.out.println(a%b );
//需要a/b结果以小数形式,结果为1.33333333333
System.out.println(a *1.0/b );
//错误答案
System.out.println(a/b*0.1);
System.out.println((a/b)*0.1);
}
}
- 连接符:+
- 当"+"符号与字符串运算的时候是起连接作用,结果依然是一个字符串
- 能算则算,不能算则在一起
package com.itheima.operator;
public class Demo2 {
public static void main(String[] args) {
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
System.out.println(a + "" +'a');//5a
System.out.println(a + 'a'+" itheima ");//102itheima
System.out.println("itheima"+ a + 'a');//itheima5a
System.out.println("itheima"+ ( a + 'a' ));//itheima102
}
}
-
案例
需求:有一个三位数123,将其拆分为个位、十位、百位后,打印在控制台
package com.itheima.operator;
public class Demo3 {
public static void main(String[] args) {
int a = 123 ;
System.out.println("个位" + a%10);
System.out.println("十位" + a/10%10);
System.out.println("百位" + a/10/10%10);
}
}
2.自增自减运算符
-
++ –
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1QDcRQJ0-1668092232004)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110191347783.png)]
-
注意: ++ – 只能操作变量,不能操作字面量
int a = 10; a++ //不可以 10++
-
使用注意事项
-
如果是单独使用,则++/–在变量前后操作结果都一样
-
非单独使用,如在表达式中
- ++/–在前,先对变量进行+1 -1 ,再进行运算
- ++/–在后,先进行运算 ,再对变量进行+1 -1
package com.itheima.operator; public class Demo4 { public static void main(String[] args) { // c:10 11 12 11 // d:4 5 //rs3:10 + 12 - 4 - 5 + 1 + 12 = 26 int c = 10; int d = 5; int rs3 = c++ + ++c - --d - ++d + 1 + c--; System.out.println(rs3);//26 System.out.println(c);//11 System.out.println(d);//5 } }
-
3.赋值运算符
-
基本赋值运算符: = 从右向左赋值
-
扩展赋值运算符:+= -= *= /= %=
-
注意:
-
扩展运算符隐含了强制转换类型
-
+=可以实现数据的累加
-
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rRq15tcq-1668092232005)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110192410455.png)]
package com.itheima.operator;
public class Demo5 {
public static void main(String[] args) {
//赋值运算符
//1.基本赋值运算符 : =
int a = 10;
//扩展关系运算符:+=,-=,*=,/=,%=
int x = 10;
int y = 20;
x+=y;
System.out.println(x);//30
x-=y;
System.out.println(x);//10
x*=y;
System.out.println(x);//200
x/=y;
System.out.println(x);//10
x%=y;
System.out.println(x);//10
//扩展运算符隐含了强制类型转换
byte i = 5;
byte j = 6;
i+=j;
//i = (byte)(i+j);
// System.out.println(m);
System.out.println(i);
}
}
4.关系运算符
- 关系运算符:> >= < <= == !=
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c0U6NCzB-1668092232006)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110193519226.png)]
- 判断数据是否满足条件,最终会返回判断结果,这个结果是布尔值类型:true /false
package com.itheima.operator;
public class Demo6 {
public static void main(String[] args) {
//关系运算符
// > >= < <= == !=
int a = 10;
int b = 20;
System.out.println(a>b);//fales
System.out.println(a>=b);//false
System.out.println(a<b);//true
System.out.println(a<=b);//true
System.out.println(a==b);//false
System.out.println(a!=b);//true
System.out.println("=================");
int x = 30;
int y = 30;
System.out.println(x>y);//false
System.out.println(x>=y);//true
System.out.println(x<y);//false
System.out.println(x<=y);//true
System.out.println(x==y);//true
System.out.println(x!=y);//false
}
}
5.逻辑运算符
-
多个条件在一起运算,最终返回布尔值类型的值:true,false
-
逻辑运算符:&(与) |(或) !(非) ^ (异或) && (短路与) ||(短路或)
- & 两边都是true,结果才为true,两边都会计算
- && 两边都是true,结果才为true,但是如果左边为false,结果就为false,右边不会执行
- | 一边是true,结果为true,两边都会计算
- || 两边都是true,结果才为true,但是如果左边为true,结果就为true,右边不会执行
- !true = flase , !false = true
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2qsNep6c-1668092232006)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110223156016.png)]
package com.itheima.operator;
public class Demo7 {
public static void main(String[] args) {
//逻辑运算符
//1.逻辑与 & 两边都为true,结果才为true
int a = 10;
double b = 22.2;
System.out.println(a>=10 & b<=20);//f
//2.逻辑或 | 有一边为true,结果就是true
System.out.println(a>=10 | b<=20);//t
//3.逻辑非 ! 取反
System.out.println(!true);//f
System.out.println(!false);//t
//4.逻辑异或 ^ ,两边不同才是真,相异为真
System.out.println(false ^ false);//f
System.out.println(false ^ true);//t
//短路与 && 判断结果与&相同,但是若左边为false,则右边不执行
int c = 20;
int d = 25;
System.out.println(c<=15 && d++>20);//f
System.out.println(c);//20
System.out.println(d);//25
//短路或 || 判断结果与|相同,但是若左边为true,则右边不执行
System.out.println(c>18 || ++d <25);//t
System.out.println(c);//20
System.out.println(d);//25
}
}
6.三元运算符
-
格式:
条件表达式 ? 值1 : 值2
- 表达式正确,返回值1。表达式错误,返回值2
package com.itheima.operator;
public class Demo8 {
public static void main(String[] args) {
//三元运算符
//条件表达式 ? 条件1 : 条件2 判断表达式,true输出条件1,false输出条件2
//需求:考试成绩大于等于60,及格,否则不及格
int score = 61;
System.out.println(score >= 60 ? "及格" : "不及格");
//需求:找到三个整数最大的值
int a = 10;
int b = 20;
int c = 30;
int i = a > b ? a : b ;
int j = c > i ? c : i ;
System.out.println(j);
}
}
7.运算符优先级
-
在表达式中,哪个运算符先执行是看优先级的
- & > | > && >||
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D5lnYiU3-1668092232007)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110224139164.png)]
-
计算时要注意优先级的问题
package com.itheima.operator;
public class Demo8 {
public static void main(String[] args) {
/*因为&&优先级高所以10 > 3 && 10 < 3看成一个整体
表达式仍然是先计算10 > 3,后计算10 > 3 && 10 < 3*/
System.out.println(10 > 3 || 10 > 3 && 10 < 3); // true
}
}
8.案例(Scanner交互)
- API(Application Programming Interface:应用程序编程接口)
- Java写好的程序,可以直接拿来用
- Java为自己写好的程序提供了相应的程序使用说明书(API文档)
- 下载API文档:https://www.oracle.com/java/technologies/javase-jdk17-doc-downloads.html
- 案例:使用Scanner接收用户键盘输入的数据
- 步骤:-
- 1.导包,Scanner
- 2.创建scanner对象
- 3.接收数据
- 步骤:-
r;
public class Demo8 {
public static void main(String[] args) {
/因为&&优先级高所以10 > 3 && 10 < 3看成一个整体
表达式仍然是先计算10 > 3,后计算10 > 3 && 10 < 3/
System.out.println(10 > 3 || 10 > 3 && 10 < 3); // true
}
}
#### 8.案例(Scanner交互)
- API(Application Programming Interface:应用程序编程接口)
- Java写好的程序,可以直接拿来用
- Java为自己写好的程序提供了相应的程序使用说明书(API文档)
- 下载API文档:https://www.oracle.com/java/technologies/javase-jdk17-doc-downloads.html
- 案例:使用Scanner接收用户键盘输入的数据
- 步骤:-
- 1.导包,Scanner
- 2.创建scanner对象
- 3.接收数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bMpuP7rE-1668092232008)(C:\Users\王超越\AppData\Roaming\Typora\typora-user-images\image-20221110225222154.png)]