【JAVA基础】类型转换 常用运算符 流程控制

简介: 🍊前言:🍉类型转换1.自动类型转换2.表达式的自动类型转换3.强制类型转换🥦运算符1.基本算数运算符 2.+符号做连接符3.自增自减运算符4.赋值运算符5.关系运算符6.逻辑运算符7.三元运算符8.运算符优先级🍒程序流程控制 分支结构If分支switch分支循环结构for 循环while循环do-while循环死循环循环嵌套跳转关键字:break、continue案例技术:随机数Random类

🍊前言:

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


🍉类型转换

1.自动类型转换

什么是自动类型转换,为什么要学习自动类型转换?


类型范围小 的变量,可以 直接赋值 给 类型范围大 的变量。

自动类型转换的底层原理

byte a = 12 ;
int b = a;
System.out.println(b); // 12

自动类型转换的其他形式

public class base {
    public static void main(String[] args) {
        char a='a';
        int b=a;
        System.out.println("a:"+a);
        System.out.println("b:"+b);
        byte c = 12 ;
        int d = c;
        System.out.println("d:"+d); // 12
    }
}

2.表达式的自动类型转换


在表达式中,小范围类型的变量会自动转换成当前较大范围的类型再运算。

    public static void main(String[] args) {
      byte a=10;
      int b=20;
      double c=1.0;
      double sum=a+b+c;
        System.out.println(sum);
        byte i=100;
        byte j=120;
        int k=i+j;
        System.out.println(k);
    }

之所以  2个byte类型相加是int类型,是因为2个byte类型相加后 其值可能会越界 所以用

int来接收

注意事项:


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


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


3.强制类型转换

场景:

问题

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


强制类型转换


可以强行将类型范围大的变量、数据赋值给类型范围小的变量。

强制类型转换底层原理

注意事项


强制类型转换可能造成数据(丢失)溢出;


浮点型强转成整型,直接丢掉小数部分,保留整数部分返回。


🥦运算符


1.基本算数运算符


运算符


运算符:对字面量或者变量进行操作的 符号。


算数运算符

案例:数值拆分

需求:一个三位数,将其拆分为个位、十位、百位后,打印在控制台


公式总结:

个位 :数值 % 10

十位 :数值 / 10 % 10

百位 :数值 / 10 / 10 % 10

千位 :数值 / 10 / 10 / 10 % 10;

...

2.+符号做连接符

“+” 做连接符


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

    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');
        System.out.println(15 + "abc" + 15);
        System.out.println(a + 'a');
        System.out.println(a + "" +'a');
        System.out.println(a + 'a'+"itheima");
        System.out.println("itheima"+ a + 'a');
        System.out.println("itheima"+ ( a + 'a' ));
    }


3.自增自减运算符


自增自减运算符


注意:

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


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


自增自减的使用注意事项


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


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

int a = 10;
int rs = ++a;

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

int b = 10;
int rs = b++;


4.赋值运算符

基本赋值运算符

就是“=”。

int a = 10; // 先看“=”右边,把数据10赋值给左边的变量a存储。

扩展赋值运算符


符号 作用 说明


+= 加后赋值 a+=b 等价于 a = (a的数据类型)(a+b); 将a + b的值给a


-= 减后赋值 a-=b 等价于 a = (a的数据类型)(a-b); 将a - b的值给a


*= 乘后赋值 a*=b 等价于 a = (a的数据类型)(a*b); 将a * b的值给a


/= 除后赋值 a/=b 等价于 a = (a的数据类型)(a/b); 将a / b的商给a


%= 取余后赋值 a%=b 等价于 a = (a的数据类型)(a%b); 将a % b的商给a


注意:扩展的赋值运算符隐含了强制类型转换。

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


<= a<=b,判断a是否小于等于b,成立为true,不成立为false


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


6.逻辑运算符


逻辑运算符概述


可以把多个条件的布尔结果放在一起运算,最终返回一个布尔结果。


符号 介绍 说明


& 逻辑与 必须都是true,结果才是true; 只要有一个是false,结果一定是false。


| 逻辑或 只要有一个为true、结果就是true


! 逻辑非 你真我假、你假我真。 !true=false 、 !false= true


^ 逻辑异或 如果两个条件都是false或者都是true则结果是false。两个条件不同结果是true。


&& 短路与


判断结果与“&”一样。过程是 左边为 false ,右边则不执行。


|| 短路或 判断结果与“|”一样。过程是左边为 true, 右边则不执行。


注意:逻辑与 “&” 、 逻辑或“ |”: 无论左边是 false还是 true, 右边都要执行。


7.三元运算符


三元运算符介绍


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


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

案例:求三个整数的最大值


需求:定义三个整数,找最大值并打印在控制台。


分析:


① 用三元运算符获取前两个整数的最大值,并用临时变量保存起来。


num1 > num2 ? num1 : num2;


② 用三元运算符,让临时最大值,和第三个整数,进行比较,并记录结果。

temp > num3 ? temp : num3;


③ 输出结果


8.运算符优先级


运算符优先级


在表达式中,哪个运算符先执行后执行是要看优先级的,例如 “*、/” 的优先级高于”+、-”。

运算符优先级

// 目标:看看Java是否存在优先级,大家以后需要注意优先级问题
System.out.println(10 > 3 || 10 > 3 && 10 < 3); // true
System.out.println( (10 > 3 || 10 > 3 ) && 10 < 3); // false

🍒程序流程控制

流程控制语句

Java提供了一些流程控制语句,来 控制程序 的 执行流程

如果你没有写其他的结构,按照代码的先后顺序,依次执行程序中大多数的代码都是这样执行的。


分支结构

If分支

根据判定的结果(真或假)决定执行某个分支的代码


If分支有三种格式

格式1:
if (条件表达式) {
语句体; }
格式2:
if (条件表达式) {
语句体1;
} else {
语句体2;
}
格式3:
if (条件表达式1) {
语句体1;
} else if (条件表达式2) {
语句体2;
} else if (条件表达式3) {
语句体3;
} 
. . .
else {
语句体n+1;
}

if 第一种格式

的结果,如果为true执行语句体,为 false 就不执行语句体。


注意事项:


if 语句中,如果大括号控制的只有一行代码,则大括号可以省略不写。


if 第二种格式



执行流程:


① 首先判断条件表达式的结果,如果为true执行语句体1,为 false 就执行语句体2。


if 第三种格式

格式:

if (条件1) {

语句体1;

} else if (条件2) {

语句体2;

} else if (条件3) {

语句体4;

}

. . .

else {

语句体n+1;

}

执行流程:


① 先 判断条件 1 的值,如果为 true 则执行语句体 1 ,分支结束;如果为 false 则 判断条件 2 的值


② 如果值为 true 就执行语句体 2 ,分支结束;如果为 false 则 判断条件 3 的值

③ ...


④ 如果没有任何条件为 true ,就执行 else 分支的语句体 n+1 。

switch分支


也是匹配条件去执行分支 , 适合做值匹配的分支选择,结构清晰,格式良好 。

switch(表达式){
case 值1:
执行代码...;
break;
case 值2:
执行代码...;
break;
case 值n-1:
执行代码...;
break;
default:
执行代码n;
}

执行流程:


① 先执行表达式的值,拿着这个值去与 case 后的值进行匹配。


② 匹配哪个 case 的值为 true 就执行哪个 case ,遇到 break 就跳出 switch 分支。

③ 如果 case 后的值都不匹配则执行 default 代码。


switch案例


周一:埋头苦干,解决 bug


周二:请求大牛程序员帮忙


周三:今晚啤酒、龙虾、小烧烤


周四: 主动帮助新来的女程序解决 bug


周五:今晚吃鸡


周六:与王婆介绍的小芳相亲


周日:郁郁寡欢、准备上班。


switch分支注意事项:


① 表达式类型 只能是byte、short、int、char ,JDK5开始支持枚举,JDK7开始支持String、


不支持double、float、long 。


② case给出的值不允许重复,且只能是字面量,不能是变量。


③ 不要忘记写break,否则会出现穿透现象。


switch的穿透性


如果代码执行到没有写 break 的 case 块 ,执行完后将直接进入下一个 case 块执行代码( 而且不会进行任何匹配 ),直到遇到break 才跳出分支,这就是 switch 的穿透性。

循环结构


for 循环


控制一段代码反复执行很多次。


格式:

for ( 初始化语句 ; 循环条件 ; 迭代语句 ) {

循环体语句 ( 重复执行的代码 );

}

// 输出3次HelloWorld
for (int i = 0; i < 3; i++) {
System.out.println("Hello World");
}

for 循环案例详细流程说明


执行的流程:


① 循环一开始,执行int i = 0 一次。


② 然后判断循环条件:0 < 3 返回true ,进入到循环体中执行输出 :helloWorld ,然后执行迭代语句i++ , 此时i=1了。


③ 然后判断循环条件:1 < 3 返回true ,进入到循环体中执行输出 :helloWorld ,然后执行迭代语句i++ , 此时i=2了。


④ 然后判断循环条件:2 < 3 返回true ,进入到循环体中执行输出 :helloWorld, 然后执行迭代语句i++ , 此时i=3了。


⑤ 然后判断循环条件:3 < 3 返回false, 循环立即结束!!

while循环

while 循环格式与执行流程




初始化语句;


while ( 循环条件 ) {

循环体语句 ( 被重复执行的代码 );

迭代语句 ;

}

示例

int i = 0;
while (i < 3) {
System.out.println("Hello World");
i++;
}

do-while循环

先执行再判断循环条件。


初始化语句 ;

do {

循环体语句 ;

迭代语句 ;

} while ( 循环条件 );

示例


int i = 0;
do {
System.out.println(“Hello World!");
i++;
} while( i < 3);

do-while循环的特点:一定会先执行一次循环体。


三种循环的区别


for循环 和 while循环(先判断后执行)


do...while (第一次先执行后判断)


for 和 while 的区别:


for循环和while循环的执行流程是一模一样的。


如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。


for循环中,控制循环的变量只在循环中可以使用。While循环中,控制循环的变量在循环后还可以继续使用。


死循环


一直循环的执行下去,如果没有干预不会停止下来。


写法

for(;;) {
System.out.println("Hello World");
}
// 经典做法
while(true) {
System.out.println("Hello World");
}
do {
System.out.println("Hello World");
} while (true);

循环嵌套

循环中又包含循环




嵌套循环的特点


外部循环每循环一次,内部循环全部执行完一次。

跳转关键字:break、continue


跳转控制语句介绍


break : 跳出并结束当前所在循环的执行。


continue: 用于跳出当前循环的当次执行,进入下一次循环。


注意事项


break : 只能用于结束所在循环 , 或者结束所在 switch 分支的执行。


continue : 只能在循环中进行使用。


案例技术:随机数Random类


Random 随机数技术


作用:用于在程序中获取随机数的技术。


Random生成随机数的特点


nextInt(n)功能只能生成:0 – (n-1)之间的随机数。


Random生成区间随机数的技巧:减加法。


例如:要生成 1 – 10之间的随机数,程序怎么实现?


案例 :猜数字游戏


需求:


随机生成一个 1-100 之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏。


分析:


随机生成一个 1-100 之间的数据


使用死循环让用户不断提示用户猜测,猜大提示过大,猜小提示过小,猜中结束游戏。

import java.util.Random;
import java.util.Scanner;
public class base {
    public static void main(String[] args) {
//        需求:
//        随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏。
//        分析:
//        随机生成一个1-100之间的数据
//        使用死循环让用户不断提示用户猜测,猜大提示过大,猜小提示过小,猜中结束游戏。
        Random random = new Random();
        int number=random.nextInt(100)+1;
        System.out.println("随机生成一个1-100之间的数据,请输入你猜测的数字:");
        Scanner num = new Scanner(System.in);
        boolean flag=true;
        while (flag){
            int i = num.nextInt();
            if (i>number){
                System.out.println("猜大了");
            }
            else if (i<number){
                System.out.println("猜小了");
            }
            else {
                System.out.println("恭喜猜对了");
                flag=false;
            }
        }
    }
}



相关文章
|
8天前
|
Java
Java运算符
Java运算符
37 12
|
2月前
|
Java 测试技术 数据处理
Java零基础教学(17):Java运算符详解
【8月更文挑战第17天】Java零基础教学篇,手把手实践教学!
45 4
|
19天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
20天前
|
Java 编译器 程序员
Java自动类型转换的妙用
Java中的自动类型转换(隐式类型转换)是指编译器在无需显式指定的情况下自动将一种数据类型转换为另一种类型。这一特性简化了代码,提高了可读性,并在多态中发挥了重要作用。例如,在数学运算时,较小类型会自动转换为较大类型以避免精度损失;在面向对象编程中,子类对象可以自动转换为父类引用,增强了代码的灵活性和兼容性。此外,它还使得数组和集合的使用更加方便,整体上让编程更加优雅和高效。
|
1月前
|
Java 测试技术 程序员
Java零基础(23) - Java赋值运算符,了解一下!
【9月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
43 11
|
2月前
|
运维 Cloud Native Java
Java项目部署的发展流程
本文对比分析了四种不同的应用部署方式:传统部署、虚拟化部署、容器化部署及云原生部署。传统部署直接在物理机上运行程序,存在资源复用难等问题。虚拟化部署通过虚拟机技术实现了资源的有效隔离与利用,但可能会造成性能损失。容器化部署则进一步提升了应用的可移植性和资源利用率,减轻了运维负担。云原生部署结合容器化、微服务等技术,实现了应用的快速迭代、高效运维和灵活扩展,适用于现代互联网应用的开发与部署。每种方式均针对其特点进行了详细的流程描述与优缺点分析。
|
2月前
|
Java 测试技术 计算机视觉
Java零基础(18) - Java运算符,了解一下!
【8月更文挑战第18天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
30 5
|
2月前
|
Java
【Java 第三篇章】注释、数据类型、运算符
【8月更文挑战第2天】 Java支持三种注释:单行(`//`)、多行(`/*...*/`)及文档注释(`/**...*/`)。它定义了八种基本数据类型,包括四种整数类型(`byte`、`short`、`int`、`long`),两种浮点类型(`float`、`double`),一种字符类型(`char`)和一种布尔类型(`boolean`)。数据类型之间可以自动转换或通过强制转换改变,但后者可能导致精度损失。Java中的运算符涵盖算术(如`+`、`-`)、赋值(如`=`)、比较(如`==`)、逻辑(如`&&`)和三目运算符等。例如,算术运算可用于执行基本数学计算,而逻辑运算符用于组合条件判断。
15 1
|
1月前
|
Java 测试技术 开发者
Java零基础(24) - Java条件运算符,了解一下!
【9月更文挑战第3天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
21 0
|
2月前
|
存储 安全 Java
【Java 第四篇章】流程控制、容器
本文档详细介绍了Java中的流程控制、集合类型、数组声明及容器的声明与遍历等内容。在流程控制部分,包括了if、if...else、if...else if...else、switch等语句的使用方法,并提供了具体示例。接着,文档对比分析了Java中单列集合(如HashSet、LinkedHashSet、TreeSet等)与双列集合(如HashMap、LinkedHashMap、Hashtable等)的特点及底层实现原理。此外,还介绍了如何声明与初始化数组,并提供了多种循环结构的使用示例。最后,通过具体的代码示例展示了不同集合类型的声明、基本操作(如添加、删除、更新、查找)以及遍历方法。
14 0
下一篇
无影云桌面