四 Java详细基础(java数据类型 数据类型转换 运算符 控制结构)

## Java数据类型

两大类:
基本数据类型(八种)
八大基本数据类型
整型(4种)byte short int long
浮点型(2种)float double
字符型(1种)char
布尔型(1种)boolean
引用数据类型(复杂数据类型):
数组 类 接口等

注意:字符串类型是引用数据类型(字符串是类)

java强类型的语言:对数据类型校验非常严格
int age = 18;

弱类型的语言:js 对数据类型校验不严格
var 变量名 = 初始化值;
var val = 8;
val = 2.5;
val = “hello”;

java数据类型:
两大类:

基本数据类型
八大基本数据类型–四类八种

整型(4种) 根据大小或者存储空间来划分
在这里插入图片描述

正整数、负整数:

通过二进制的最高位来区分

xxxx xxxx

最高位–符号位

扫描二维码关注公众号,回复: 12665287 查看本文章

0(正数) 1(负数)

0000 0000–0 0111 1111–127

1000 0000-- -128
1111 1111 – -1

注意:

1、在java中数字较大的情况下,可以通过_来进行位数的划分,方便计算位数

2、int类型是最常用的

3、整数字面值默认是通过int类型来表示的;如果需要指定通过long类型来存储,则可以在整数字面值后边加L或者l后缀

浮点型(2种)
在这里插入图片描述

注意:

1、浮点数字面值默认类型为double类型;

2、当把默认double类型的浮点数字面值赋值给float类型,程序认为可能会出现溢出,所以编译报错;可以在浮点数字面值后边加F或者f后缀;

3、常用的浮点型是double

4、float有效数字的位数 7-8位

double有效数字的位数15-16位

5、double类型数值也可以加D或者d后缀

6、浮点数存在精度损失问题
在这里插入图片描述

例如0.01+0.05=0.060000000000000005

字符型(1种)
char 字符型
注意:char类型的变量可以通过整数来进行赋值;但是该整数值必须在码表的范围之内
在这里插入图片描述

布尔型(1种)
boolean:布尔型
true false
以字节为基本单位
引用数据类型:数组 类 接口 枚举等

八大基本数据类型:
四类八种
byte short int long float double char boolean
byte:-128~127

数据类型的转换

自动数据类型转换
数值型:从小到大
byte->short->int->long–>float->double
char->int->long–>float->double

整型转为浮点型,直接补.0
强制数据类型转换
从大到小,直接转程序认为可能会溢出,编译报错;
格式:(要强转类型)数据值或变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
虽然18是int类型 18也在byte内,但是在编译时不知道数所以编译会报错
在这里插入图片描述

注意:

1、浮点型强转为整型,直接舍弃小数部分在这里插入图片描述

2、大的数据类型强转为小数据类型时,从大数据类型的最低位开始截取小数据类型所能存储的最大的位数;
在这里插入图片描述
在这里插入图片描述

3、请谨慎使用

运算符

概念:被定义了运算规则的符号
分类:
算术运算符
赋值运算符
关系运算符
逻辑运算符
三目运算符

算术运算符:+ - * / %:
结果数据类型:和元素中大的数据类型保持一致
特殊情况:byte short char而言,当参与运算时会自动提升为int类型

面试题:结果数据类型的判断
byte b1 = 3;
byte b2 = 4;
byte sum = b1+b2;–编译会报错 b1会自动提升为int b2也会提升为int型 大的类型给小的类型会报错
byte sum1 = 3+4;–编译优化会对整数字面值进行运算,先3+4求和得到7,会判断结果在不在byte类型内,如果超出byte的范围则会报错

这个为什么不会报错呢?下面这个是整数字面值,上面那个是变量,变量程序只会检查其数据类型 不知道是多少
解决方法:1.将sum的类型改成int 2.强转
在这里插入图片描述
在这里插入图片描述

基本用法:
1、输出语句中直接运算并打印
2、对变量做运算并输出
3、将运算结果赋值给变量

/:

int/int 结果仍然为int类型的整数(直接舍弃小数部分)
如果希望得到小数结果:
1、将元素类型改为double
2、运算中通过*1.0改变元素类型
3、通过强制类型转换将某个元素转为double

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1、被除数为整数,除数为0时:
抛出一个运行时异常:
Exception in thread “main” java.lang.ArithmeticException: / by zero
at OperatorDemo.main(OperatorDemo.java:60)
2、被除数为正浮点数,除数为0时:
Infinity–无穷大
3、被除数为负浮点数,除数为0时:
-Infinity–无穷小
4、0.0/0:
NaN:Not a Number(非数字)

%:
整除:取余是否为0
奇偶数:对2取余是否为0

++ --:
++:自增运算符 每次+1
–:自减运算符 每次-1

注意:
1、++ – 作用于变量,不能作用于数据值或者常量
2、++ – 底层默认包含了强制类型的转换
i++;可以理解为:
i=(type)(i+1);

++ --可以在变量的前边,也可以变量的后边;
如果,++ 单独使用,前后没区别的;
如果++和其他语句一起使用,有区别
变量在前,++在后,先使用变量原来的值,再+1
++在前,变量在后,先让变量在原来值的基础上+1,再使用增加之后的值;

在这里插入图片描述
在这里插入图片描述
i无论前后都最后加1
在这里插入图片描述

–同理

赋值运算符 =
+= -= *= /= %=
赋值运算符的优先级是最低的

+=:
x+=y;-----x = (type)(x + y);
先使用x和y进行求和运算,将结果赋值给x;
x必须为变量
其他的和+=同理

关系运算符
比较运算符,运算结果一定是boolean类型

< >= <= (>或=)
== (相等) !=(不相等)

在这里插入图片描述
在这里插入图片描述

逻辑运算符
对boolean类型的值做运算,结果仍然为boolean类型
& | ! ^
&:且 与 AND
x&y:
x:true false
y:true false
true&true=true
true&false=false
false&true=false
false&false=false

运算规则:都为true,则为true;有false,结果为false;

|:或 OR
x|y
true|true=true
true|false=true
false|true=true
false|false=false

运算规则:都为false,则为false;有true,结果为true

!:取反
!true=false
!false=true

^:异或
x^y
true^true=false
false^false=false
true^false=true
false^true=true

运算规则:
两个相同为false,不同为true;

**&& ||:短路
&&短路与 双与
如果&&左边是false,则右边短路不再执行,结果必然为false;
**
在这里插入图片描述

||:短路或
如果||左边为true,则右边短路不再执行,结果必然为true;
自行测试||短路效果

三目运算符

三元表达式
单目运算符:作用于一个元素 ++ – !
双目运算符:作用于二个元素 + - & >
三目运算符:作用于三个元素

格式:表达式或值 ? 表达式1 : 表达式2
执行流程:
1、表达式或值,要求结果必须是boolean
true: 则执行表达式1
false: 则执行表达式2

案例:
判断奇偶数在这里插入图片描述

判断两个整数变量值的大小 输出最大值在这里插入图片描述
在这里插入图片描述

判断三个整数变量值的大小 输出最大值

在这里插入图片描述
或者三目运算符的嵌套(不建议用)
在这里插入图片描述

位运算(底层框架用)

整数 基于二进制来进行运算的,位元素符的效率最高
& | ~ ^
<< >> >>>
&:按位与
1 true 0 false

1&1=1
1&0=0
0&1=0
0&0=0

在这里插入图片描述

|:按位或
1 true 0 false

1|1=1
1|0=1
0|1=1
0|0=0

在这里插入图片描述
~:按位取反
~1=0
~0=1

计算机中存储和计算使用的都是二进制的补码形式
正数:原码=反码=补码
负数:
原码:符号位1,按照十进制转二进制直接转出来的
反码:符号位不变,其余位依次取反
补码:反码的基础上+1
在这里插入图片描述
在这里插入图片描述

^:按位异或
0^0=0
1^1=0
0^1=1
1^0=1

1^2=3

两个变量交换数值:

int a=3;
int b=5;

方式一:定义一个临时变量

int tmp = a;
a = b; 
b = tmp;
System.out.println(a);
System.out.println(b);

方式二:先求和再求差

a = a+b;//a=8 b=5
b = a-b;//a=8 b=3
a = a-b;//a=5 b=3
System.out.println(a);
System.out.println(b);

方式三:使用^

规律:一个数亦或另一个数两次 ,结果是那个数
在这里插入图片描述

int a = 3;
int b = 5;
a = a ^ b;//a=3^5
b = a ^ b;//a=3 ^ 5,b=3 ^ 5 ^ 5=3
a = a ^ b;//a=3 ^ 5 ^ 3=5,b=3
System.out.println(a); 
System.out.println(b);

<<:左移

x<<y:将x的二进制整体左移y位,左侧多出来的直接舍弃,右侧空出来用0补齐
在这里插入图片描述

1<<1==>2 (1左移一位)
1<<2==>4(1左移两位)
在一定的范围内:x*2^y
在这里插入图片描述

1 :>>:右移

x>>y:将x的二进制整体右移y位,右侧多出来的直接舍弃,左侧空出来的补数字:
如果x是正数 则空出来的补0
如果x是负数 则空出来的补1

2>>1==>1
8>>2==>2
在这里插入图片描述

在一定的范围内:x/(2^y)

1 : > > >:无符号右移

x>>>y:将x的二进制整体右移y位,右侧多出来的直接舍弃,左侧空出来的补0

正数和右移一样

补充知识点

如何定义字符串变量:

字符串不是基本数据类型;
是类String,是引用数据类型

数据类型 变量名 = 初始化值;

格式:String name = “zhangsan”;

+:求和 字符串拼接
字符串+字符串
字符串+基本数据类型 例如:hello100
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Scanner:–JDK

获取用户键盘输入的数据
步骤:
1、导包import java.util.Scanner;
位置:类定义之前
2、创建Scanner类的对象
Scanner sc = new Scanner(System.in);
3、调用对象的方法
格式:对象.方法名();
方法名:nextInt();–获取int类型的整数
nextDouble();–获取double类型的浮点数
next();–获取String类型的字符串

例如:int 变量 = sc.nextInt();
double 变量 = sc.nextDouble();
String 变量 = sc.next();

4、关闭Scanner sc.close();
在这里插入图片描述

控制结构

概念:控制程序执行语句
分类:
顺序结构:从上到下 从左到右,最基本也是最常用的控制结构语句。
分支结构
循环结构

分支结构:1.if判断语句
格式一:
if(判断条件){
当判断条件成立时要执行的代码块;
}

判断条件结果必须是boolean

案例:
判断一个数是否大于0,如果大于则输出这个数
在这里插入图片描述

判断一个数的奇偶性
在这里插入图片描述

格式二:if else

if(判断条件){
当判断条件成立时要执行的代码块;
}else{
当判断条件不成立时要执行的代码块;
}

案例:
判断一个数的奇偶性
在这里插入图片描述

三目运算符就是格式二的简化形式

格式三:if.else if.else

格式:

if(判断条件1){
当判断条件1成立时要执行的代码块;
}else if(判断条件2){
当判断条件1不成立

判断条件2成立
要执行的代码块;
}else if(判断条件3){
当判断条件1不成立

判断条件2不成立

判断条件3成立
要执行的代码块
}else{
当所有的判断条件都不成立时要执行的代码块;
}

案例:

获取用户输入的成绩,根据成绩输出对应的等级
<60–不合格
60-70–合格
70-80–中等
80-90–良好
90-100—优秀

在这里插入图片描述

练习:

获取用户输入的月份值,输出该月份所属的季节
1-12 春(3-5)夏(6-8)秋(9-11)冬(12 1 2)
在这里插入图片描述

if嵌套:
if语句中可以嵌套if语句
将内层if语句看做外层if语句的代码块
在这里插入图片描述
下面这个项目
if else if 但凡能进入else if 说明上面的已经不成立了,所以if的大于等于0可以不用写,else if 的大于等于60也不用写,因为能进入else if 的说明if的不成立
其实不太建议省略
在这里插入图片描述
注意:如果见到if后面每加大括号的,说明大括号里面只有一句,所以大括号可以省略,但是如果大括号里面有多个句子不能省略在这里插入图片描述

switch case选择语句

格式:
switch(值或表达式){
case 值1:
当值和值1匹配要执行的代码块;
break;
case 值2:
当值和值2匹配要执行的代码块;
break;
case 值3:
当值和值3匹配要执行的代码块;
break;

default:
当值和所有case的值都不匹配时要执行的代码块;
}

注意:

1、switch case只支持int(byte short char可以自动提升为int)、
String(JDK1.7开始)、枚举数据类型的匹配

2、case穿透:
当值和某个case匹配成功之后,不仅要执行该case的代码块,而且会将之后所有case的代码块都执行一遍;

解决:
每个case最后加个break;–break语句
–结束switch case语句

案例:
10086客服小程序
欢迎致电10086
1-查询话费余额
2-查询套餐内剩余流量
3-查询积分
0-人工客服
请输入您要查询的业务编码
获取用户输入的业务编码
和提供的业务编码进行匹配

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43872169/article/details/113748817