云栖社区专家系列课——Java必修课第四讲

简介: Java必须课是零基础Java学习者的入门课程,涵盖了Java初学者应该掌握的所有核心知识。在第四讲中,最课程创始人、微软MVP陆敏枝详细讲解了基础类型转换、char类型运算、关系运算符、逻辑运算符、位运算符等基础类型之间的运算关系,并结合利息计算器应用案例将前几讲学习的知识点进行串联。

Java必须课是零基础Java学习者的入门课程,涵盖了Java初学者应该掌握的所有核心知识。在第四讲中,最课程创始人、微软MVP陆敏枝详细讲解了基础类型转换、char类型运算、关系运算符、逻辑运算符、位运算符等基础类型之间的运算关系,并结合利息计算器应用案例将前几讲学习的知识点进行串联。


课程基本信息

开课时间:每周四下午:1400-1530

主讲人:云栖社区专家,陆敏枝

Java必修课在线直播视频链接:

https://yq.aliyun.com/video/play/1492

点击此处下载本节教学课程

 

本课程重点内容

本节课程主要讲解基础类型转换、char类型运算、关系运算符、逻辑运算符、位运算符等数据类型之间的运算关系,具体内容如下:

一、基础类型转换:自动转换和强制转换

数据类型转换通常发生在不同数据类型的数据之间运算时:

·自动转换:从低精度->高精度byteshortintlongfloatdouble

·强制转换:从高精度->低精度,则要类型强制转换。

自动转换和强制转换的示例代码如下:

Public class OperatorTester{
public static void main(String[] args){
int a = 3;
float c = 5.17f;
c=a;//自动转换
System.out.println(c);//
a=(int)c;//强制转换
System.out.println(a);
}
} 

二、关于char的运算

Javachar类型的运算要注意以下三点:

·char与整型进行算术运算后,结果会自动提升成int类型;

·两个char型运算时,自动转换为int型;

·当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换。

Public class OperatorTester01{
public static void main(String[] args){
char c1 = 'a'; // 对应97
int f = c1 + 10;
System.out.println("char与整型进行运算: 'a' + 10 = " + f);
//char类型之间运算
char c2 = 'b';  // 对应98
System.out.println("两个char相加: 'a' + 'b' = " + (c1 + c2)); 
//char与其他类型之间的运算
double db = c1 + 1.1d;//双精度double
System.out.println("char与别的类型相加 : 'a' + 1.1d = " + db);}
}

程序输出:

char与 整型进行运算: 'a' + 10 = 107

两个char相加: 'a' + 'b' = 195

char与别的类型相加 : 'b' + 1.1d = 98.1

ASC码表中规定了char类型与整数值的对应关系,具体关系如图:

853e8ee48a5ffb059239d37edd416382758c2630 

注:在运算中,括号是最高优先级,如上述代码中字符串相加时,System.out.println("两个char相加: 'a' + 'b' = " + (c1 + c2));去掉括号后变成字符串相加,输出结果为ab

 

三、关系运算符

关系运算符用于比较两个数据之间的关系,比较结果为Boolean类型的值。关系运算符包括:等于==、不等于!=、大于>、大于等于>=、小于<、小于等于<=。以下为关系运算符示例代码:

public static void m3() {
int a = 1;
int b = 3;
int c = 3;
float d = 3.0f;
char c1 = 'a';
char c2 = 'b';
System.out.println("1 == 3 吗," + ( a == b));
System.out.println("3 == 3 吗," + ( b == c));
System.out.println("3 == 3.0 吗," + ( c == d));
System.out.println("1 != 3 吗," + ( a != b));
System.out.println("3 > 1 吗," + ( b > a));
System.out.println("3 >= 3 吗," + ( b >= a));
System.out.println("3 < 1 吗," + ( b < a));
System.out.println("3 <= 1 吗," + ( b <= a));
System.out.println("'a' <= 'b' 吗," + ( c1 < c2));
}

输出结果为:

1 == 3 吗,false

3 == 3 吗,true

3 == 3.0 吗,true

1 != 3 吗,true

3 > 1 吗,true

3 >= 3 吗,true

3 < 1 吗,false

3 <= 1 吗,false

'a' <='b' 吗,true

注意:

1== 号和 = 的区别;

2char类型同样可以比较大小。

 

四、逻辑运算符

在上文中我们比较了整数、小数、字符,唯独没有比较布尔型数据。为了比较布尔类型数据,我们来讲解下逻辑运算符。逻辑运算符要求操作数的数据类型为boolean类型,其运算结果也是boolean类型,包括:逻辑与'&&'、逻辑或'||'、逻辑非'!'、逻辑异或'^'、逻辑与'&'、逻辑或'|'

逻辑运算符示例代码:

Public class OperatorTester03{
public static void main(String[] args){
boolran a= true;
boolran a=false;
System.out.println("a && b"+(a&&b));
System.out.println("a || b"+(a||b));
System.out.println("!a" +(!a));
System.out.println("a ^ b"+(a^b));
System.out.println("a & b"+(a&b));
System.out.println("a | b"+(a|b));
}
}

运算结果:

a&&b=false

a||b=true

!a=false

a^b=true

a&b=true

a|b=true

下图为逻辑运算符的真值表,初学者可以根据真值表判断逻辑计算的结果:

9d3f37a44c6da93c379b61bc9e7d33d744bf4bc1 

AB是逻辑运算的两个逻辑变量,从真值表中可以看出:

1A&&B A&B 结果完全相同,而 A||BA|B结果也完全相同;

2对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程;因此,&&的效率就比&高,因为&进行了一些无用的并且还不影响结果的计算。

3对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。因此,||的效率就比|高,因为&进行了一些无用的并且还不影响结果的计算。

A||BA&&B这种提前结束的行为叫做:短路。

 

五、位运算符

在讲解位计算符之前,首先需要了解进制的概念:

1、十进制计算方法

1e0a6b1972f01896eb8064fb98bb544b3d96f5f1 

2、二进制计算方法

d2741e315956136214c4b32bae5ae65dbe7382f9 

 

15 & 6

位运算代码示例

Public class OperatorTester04{
public static void main(String[] args){
int x = 15;
int y = 6;
int z = 0;
//x等于二进制数的00001111
//y等于二进制数的00000110
//&等于二进制数的00000110= 2^2 + 2^1=6
  z = x & y;
System.out.println("x & y = " + z);
}
}

输出结果为:6

原理图:

046e54591d115d2fdfe8309faef43dce672a2fc5 

3、位运算

位运算是对整数值进行二进制运算。位运算标识符包括:位与'&',位或'|',位非'~',位异或'^',右移'>>',左移'<<'0填充的右移'>>>'

·&运算:对二进制的位求与,参考真值表

·| 运算:对二进制的位求或,参考真值表

·~运算:求非

·^运算:求位异或。

·>>运算:将一个数化成二进制右移

·<<运算:将一个数化成二进制左移

·>>>运算:右移(补零)运算符,即无符号右移,">>>"永远不会产生负号,因为其符号位总是被补零。

注:位运算符更详细讲解,请参考直播视频。

 

六、其他运算符

除上述讲解的运算符外,Java中还提供了其他各类运算符,如赋值运算符、方括号、三元运算符等,下面来一一讲解。

1赋值运算符=

赋值运算符=通常与其他运算符联合使用,具体使用方法如下图所示:

23dbefa036969d8f731ab291170480a45d262c26 

 

2方括号[]

方括号[]是数组运算符,括号中的数值是数组的下标。后续讲解数组方面知识时会详细讲解。

3、三元运算符

三元运算符的模式:<表达式1> <表达式2> : <表达式3>
三元运算符先计算<表达式1>的值,当<表达式1>的值为true时,则将<表达式2>的值作为结果;当<表达式1>的值为false时,则将<表达式3>的值作为结果。

三元运算符示例代码:

Public class OperatorTester05{
public static void main(String[] args){
int c;
c= 1 > 2 ? 1 : 2; //?前表达式为true,取值为:前面值,否则为后面的值
System.out.println(c);
}
}

输出为:2

4、强制类型转换符()

强制类型转换符能将一个表达式的类型强制转换为某一指定数据类型

示例代码:

Public class OperatorTester06{
public static void main(String[] args){
int a;
double b = 5.66600;
a = (int) b;
System.out.println(a);

输出为:5

5、对象运算符instanceof

对象运算符instanceof用来测试一个指定对象是否是指定类(或它的子类)的实例,若是则返回true,否则返回false

示例代码:

Public class OperatorTester07{
public static void main(String[] args){
String s = new String("str");
if(s instanceof Object){
System.out.println("s is object ");
}
}
}

输出为:String is object class

7点运算符

点运算符"."的功能有两个:一是引用类中成员二是指示包的层次等级。例如:System.out()import java.util.Date

 

七、案例:利息计算器

下面是商用车系统的案例中的利息计算器。

080c9c249feffa0bf1d98a62fa71cdda2497b33c 

网页接:http://foton.kelasoft.com/home/computer

在本节课中,我们利用之前所学的知识,实现一次性还本付息计算器的代码,具体如下:

import java.util.Scanner;
import java.util.Scanner;
public class InterestComputor{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的贷款金额");
Double amount = scanner.nextDouble();
System.out.println("请输入你的贷款年利率");
Double rate = scanner.nextDouble();
System.out.println("请输入你的贷款月数");
int months = scanner.nextInt();
//amount*(rate/100.0)*(months/12.0)利息计算公式
Double rateIncome =amount*(rate/100.0)*(months/12.0);
Double totalIncome = amount + rateIncome;
System.out.println("贷款 金额"+amount);
System.out.println("贷款 月数"+months);
System.out.println("贷款年利率"+rate );
System.out.println("需偿还利息"+rateIncome );
System.out.println("本息 合计"+totalIncome );
}
}

程序运行结果

6191e813c52f754499c6d78cf100e4fa7ef34961 

代码重构,将计算过程重构成一个函数:

// 一次性还本付息

import java.util.Scanner;
public class InterestComputor{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的贷款金额");
Double amount = scanner.nextDouble();
System.out.println("请输入你的贷款年利率");
Double rate = scanner.nextDouble();
System.out.println("请输入你的贷款月数");
int months = scanner.nextInt();
compute(amount,rate,months);
}
public static void compute(double amount, double rate, int months){
//amount*(rate/100.0)*(months/12.0)利息计算公式
Double rateIncome =amount*(rate/100.0)*(months/12.0);
Double totalIncome = amount + rateIncome;
System.out.println("贷款 金额"+amount);
System.out.println("贷款 月数"+months );
System.out.println("贷款年利率"+rate );
System.out.println("需偿还利息"+rateIncome );
System.out.println("本息 合计"+totalIncome );
}
}


上一讲回顾:上一讲主要讲解了Java中变量、API文档、输入输出和运算符四方面基础知识。

云栖社区专家系列课——Java必修课系列其他课程:

·Java必修课第一讲:https://yq.aliyun.com/articles/604581

·Java必修课第二讲:https://yq.aliyun.com/articles/604584

·Java必修课第三讲:https://yq.aliyun.com/articles/603660


相关文章
|
6月前
|
监控 网络协议 Java
《Java工程师成神之路》阿里技术专家之作,囊括Java所有知识点!
很多Java程序员一直希望找到一份完整的学习路径,但是市面上很多书都是专注某一个领域的,没有一份完整的大图,以至于很多程序员很迷茫,不知道自己到底应该从哪里开始学,或者不知道自己学习些什么。
|
11月前
|
设计模式 运维 并行计算
GitHub上的677页Java性能优化笔记火了!竟是阿里调优专家肝出的
Java是目前应用最为广泛的软件开发平台之一。随着Java及Java社区的不断壮大,Java早已不再是一门简单的计算机语言了,它更是一个平台、一种文化、一个社区。
|
1月前
|
Java 开发者 UED
Java中的异常处理:从新手到专家
【10月更文挑战第9天】在Java的编程世界中,异常处理是每个开发者必须面对的挑战。本文将引导你从基础的异常理解到高级的处理技巧,通过具体代码示例,展示如何优雅地管理程序中可能出现的错误和异常情况。无论你是刚开始学习Java,还是希望提高你的异常处理能力,这篇文章都将为你提供宝贵的知识和技巧。
|
1月前
|
Java 程序员
Java中的异常处理:从新手到专家
【10月更文挑战第9天】在Java的世界中,异常处理就像是驾驶时的方向盘,掌握它,你就能驾驭代码的运行方向。本文将通过深入浅出的方式,带你了解Java异常处理的奥秘,从基本的try-catch语句到自定义异常类的创建,让你的代码更加健壮和易于维护。
12 2
|
2月前
|
Java UED
Java中的异常处理:从新手到专家
【9月更文挑战第17天】在Java编程世界中,异常处理是一块基石,它确保了程序的健壮性和可靠性。本文将通过浅显易懂的语言和实例,带你了解如何在Java中优雅地处理异常。我们将一起探索try-catch块的奥秘,学习如何自定义异常,以及何时应该使用throw和throws关键字。准备好了吗?让我们开始这段旅程,把那些不请自来的编程小怪兽——异常,一一捕获!
|
3月前
|
Java 程序员 开发者
掌握Java异常处理:从新手到专家
在Java的世界中,异常是程序运行中不可忽视的挑战。本文以浅显易懂的语言,引导你认识Java中的异常处理机制,从基础的try-catch语句到深入的自定义异常和最佳实践,让你在遇到运行时错误时能够从容不迫,优雅地处理每一个可能的异常情况。让我们一起走进Java异常的世界,学习如何驯服这些“野性”的错误,让程序更加健壮和可靠。
|
3月前
|
安全 Java 数据库连接
Java中的异常处理:从新手到专家
在Java编程的海洋里,异常处理是一块不可或缺的救生板。本文将带你领略异常处理的重要性,并深入探讨如何在Java中优雅地处理这些不期而遇的波涛。从基础的try-catch语句到高级的自定义异常和最佳实践,我们的目标是让每位读者都能在面对异常时游刃有余,确保代码的稳健与优雅。
39 2
|
3月前
|
Java 数据库连接 开发者
Java中的异常处理:从新手到专家
在Java编程的世界中,异常处理是每位开发者必须精通的技能。本文将引导您了解Java异常处理的基础知识,深入探讨高级技巧,并分享最佳实践,帮助您从初学者成长为熟练处理各种异常情况的专家。
|
5月前
|
Java 开发者
那些年,我们追过的 Java 封装:从新手到专家的必经之路
【6月更文挑战第16天】Java初学者到专家的旅程中,封装是关键一环。封装隐藏实现细节,提供简洁接口,保护数据并确保代码整洁、可维护。以`Person`类为例,私有变量与公共方法展示了封装原则,助力团队协作和问题解决,成为编程路上的宝贵经验。封装,从新手到高手的不解之缘,持续塑造更高效、可靠的软件。
39 6
|
5月前
|
安全 Java 程序员
💥JAVA世界里的“拆弹专家”:try-catch-finally如何拯救你的代码?
【6月更文挑战第18天】Java异常处理的关键是`try-catch-finally`,它确保程序在遇到错误时不崩溃。例如,在文件操作中,`try`块尝试读/写文件,`catch`捕获如FileNotFoundException或IOException,打印错误信息,而`finally`确保资源释放。通过这种方式,代码能优雅处理异常,增强健壮性。
39 0
下一篇
无影云桌面