锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

java基础语法入门到类型转换问题,运算符,数据输入,数组,方法概述,Debug模式,以及10个小案例的详细...

时间:2023-01-05 17:00:00 s324集成电路集成电路kit

java基础语法

目录

java基础语法

1. Java概述

1.1 Java语言发展史(理解)

1.2 Java语言跨平台原理(理解)

1.3 JRE和JDK(记忆)

1.4 JDK下载安装(应用)

2. 入门程序HelloWorld

2.1 常用DOS命令(应用)

2.2 Path配置(应用)环境变量

2.3 HelloWorld案例(应用)

2.4 HelloWorld案例常见问题(理解)

3、IDEA安装使用

4, java基础语法

4.1 注释(理解)

4.2 字面量(应用)

4.3 数据类型(记忆、应用)

4.4 变量(应用)

4.5 关键字、标志符(记忆、理解)

5.类型转换问题

5.1类型转换(理解)

5.2自动类型转换

5.33表达式自动类型转换

5.4强制类型转换

6,运算符

6.1 算术运算符(理解)

6.2 赋值运算符(应用)

6.3 自增自减运算符(理解)

6.4 关系运算符(应用)

6.5 逻辑操作符(应用)

6.6 三元运算符(理解)

7. 数据输入(应用)

1.流程控制语句(应用)

1.1 语句分类的过程控制

1.2 顺序结构

1.3 分支结构:if语句

1.4 分支结构:switch语句

1.5 循环结构:for循环

1.6 循环结构: while循环

1.7 循环结构:do-while循环

1.8 三种循环的区别(理解)

1.9 跳转控制语句(掌握)

1.10 循环嵌套(理解)

1.11 Random

8.数组

1.1什么是数组【理解】

1.2数组定义格式【记忆】

1.3数组动态初始化【应用】

1.4数组元素访问【应用】

1.5内存分配【理解】

1.6单个数组的内存图【理解】

1.7多个数组的内存图【理解】

1.8多个数组指向相同内存图【理解】

1.9数组静态初始化【应用】

1.10数组操作的两个常见小问题【应用】

1.11数组遍历【应用】

1.12数组最值【应用】

9. 方法概述

1 方法的概念(理解)

2. 方法的定义和调用

3. 带参数方法定义和调用

4. 带返回值方法的定义和调用

5. 方法的注意事项

6. 方法重载

7. 方法的参数传递

10.Debug模式

1.1什么是Debug模式

1.2Debug模式操作流程

2.基础练习(参考题目)

2.1减肥计划if版本

2.2减肥计划switch版本

2.3逢七跳过

2.4不死神兔

2.5百钱白鸡

2.6数组元素求和

2.7判断两个数组是否相同

2.8查找元素在数组中出现的索引位置

2.9数组元素反转

2.10评委打分


1. Java概述

1.1 Java语言发展史(了解)

语言:人与人交流沟通的表达方式

计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言

Java语言是美国Sun公司(Stanford University Network)在1995年推出的计算机语言

Java之父:詹姆斯·高斯林(James Gosling)

2009年,Sun公司被甲骨文公司收购,所以我们现在访问oracle官网即可:https://www.oracle.com

当前,我们课程使用的JDK版本:11.0

1.2 Java语言跨平台原理(理解)

Java程序并非是直接运行的,Java编译器将Java源程序编译成与平台无关的字节码文件(class文件),然后由Java虚拟机(JVM)对字节码文件解释执行。所以在不同的操作系统下,只需安装不同的Java虚拟机即可实现java程序的跨平台。

 

 

 

1.3 JRE和JDK(记忆)

 JVM(Java Virtual Machine),Java虚拟机

JRE(Java Runtime Environment),Java运行环境,包含了JVM和Java的核心类库(Java API)

JDK(Java Development Kit)称为Java开发工具,包含了JRE和开发工具

总结:我们只需安装JDK即可,它包含了java的运行环境和虚拟机。

1.4 JDK的下载和安装(应用)

1.4.1 下载

通过官方网站获取JDK

http://www.oracle.com

注意:针对不同的操作系统,需要下载对应版本的JDK。

具体下载步骤请参见《JDK下载及安装说明文档》

1.4.2 安装

傻瓜式安装,下一步即可。但默认的安装路径是在C:\Program Files下,为方便统一管理建议修改安装路径,将与开发相关的软件都安装到一个目录下,例如:E:\develop。

注意:安装路径不要包含中文或者空格等特殊字符(使用纯英文目录)。

具体安装步骤请参见《JDK下载及安装说明文档》

1.4.3 JDK的安装目录介绍

目录名称 说明
bin 该路径下存放了JDK的各种工具命令。javac和java就放在这个目录。
conf 该路径下存放了JDK的相关配置文件。
include 该路径下存放了一些平台特定的头文件。
jmods 该路径下存放了JDK的各种模块。
legal 该路径下存放了JDK各模块的授权文档。
lib 该路径下存放了JDK工具的一些补充JAR包。

2. 入门程序HelloWorld

2.1 常用DOS命令(应用)

在接触集成开发环境之前,我们需要使用命令行窗口对java程序进行编译和运行,所以需要知道一些常用DOS命令。

1、打开命令行窗口的方式:win + r打开运行窗口,输入cmd,回车。

2、常用命令及其作用

操作 说明
盘符名称: 盘符切换。E:回车,表示切换到E盘。
dir 查看当前路径下的内容。
cd 目录 进入单级目录。cd itheima
cd .. 回退到上一级目录。
cd 目录1\目录2... 进入多级目录。cd itheima\JavaSE
cd \ 回退到盘符目录。
cls 清屏。
exit 退出命令提示符窗口。

2.2 Path环境变量的配置(应用)

2.2.1 为什么配置环境变量

开发Java程序,需要使用JDK提供的开发工具(比如javac.exe、java.exe等命令),而这些工具在JDK的安装目录的bin目录下,如果不配置环境变量,那么这些命令只可以在该目录下执行。我们不可能把所有的java文件都放到JDK的bin目录下,所以配置环境变量的作用就是可以使bin目录下的java相关命令可以在任意目录下使用。

注意:目前较新的JDK安装时会自动配置javac、java命令的路径到Path环境变量中去 ,所以javac、java可以直接使用。

 

但是以前下载的老版本的JDK是没有自动配置的,此时必需要自己配置Path环境变量。

JAVA_HOME:告诉操作系统JDK安装在了哪个位置(未来其他技术要通过这个找JDK)

 

Path:告诉操作系统JDK提供的javac(编译)、java(执行)命令安装到了哪个位置

 

注意:新版本的JDK只是自动配置了Path,没有自动配置JAVA_HOME。

2.3 HelloWorld案例(应用)

HelloWorld案例是指在计算机屏幕上输出“HelloWorld”这行文字。各种计算机语言都习惯使用该案例作为第一个演示案例。

2.3.1 Java程序开发运行流程

开发Java程序,需要三个步骤:编写程序,编译程序,运行程序。

2.3.2 HelloWorld案例的编写

1、新建文本文档文件,修改名称为HelloWorld.java。

2、用记事本打开HelloWorld.java文件,输写程序内容。

public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("HelloWorld");
	}
}

2.3.3 HelloWorld案例的编译和运行

存文件,打开命令行窗口,将目录切换至java文件所在目录,编译java文件生成class文件,运行class文件。

编译:javac 文件名.java

范例:javac HelloWorld.java

执行:java 类名

范例:java HelloWorld

2.4 HelloWorld案例常见问题(理解)

2.4.1 BUG

在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题统称为bug(漏洞)。

2.4.2 BUG的解决

1、具备识别BUG的能力:多看

2、具备分析BUG的能力:多思考,多查资料

3、具备解决BUG的能力:多尝试,多总结

2.4.3 HelloWorld案例常见问题

1、非法字符问题。Java中的符号都是英文格式的。

2、大小写问题。Java语言对大小写敏感(区分大小写)。

3、在系统中显示文件的扩展名,避免出现HelloWorld.java.txt文件。

4、编译命令后的java文件名需要带文件后缀.java

5、运行命令后的class文件名(类名)不带文件后缀.class

...

3、IDEA安装使用

3.1开发工具概述

IDEA是一个专门针对Java的集成开发工具(IDE),由Java语言编写。所以,需要有JRE运行环境并配置好环境变量。它可以极大地提升我们的开发效率。可以自动编译,检查错误。在公司中,使用的就是IDEA进行开发。

3.2 IDEA软件安装

此软件集成了32位和64位,双击ideaIU-2017.3.2.exe 进入安装(傻瓜式安装)。

4, java基础语法

4.1 注释(理解)

注释是对代码的解释和说明文字,可以提高程序的可读性,因此在程序中添加必要的注释文字十分重要。Java中的注释分为三种:

单行注释。单行注释的格式是使用//,从//开始至本行结尾的文字将作为注释文字。

// 这是单行注释文字

多行注释。多行注释的格式是使用/* 和 */将一段较长的注释括起来。

/*
这是多行注释文字
这是多行注释文字
这是多行注释文字
*/
注意:多行注释不能嵌套使用。

文档注释。文档注释以/**开始,以*/结束。(以后讲)

4.2 字面量(应用)

作用:告诉程序员,数据在程序中的书写格式。

字面量类型 说明 程序中的写法
整数 不带小数的数字 666,-88
小数 带小数的数字 13.14,-5.21
字符 必须使用单引号,有且仅能一个字符 ‘A’,‘0’, ‘我’
字符串 必须使用双引号,内容可有可无 “HelloWorld”,“黑马程序员”
布尔值 布尔值,表示真假,只有两个值:true,false true 、false
空值 一个特殊的值,空值 值是:null
public class Demo {
    public static void main(String[] args) {
        System.out.println(10); // 输出一个整数
        System.out.println(5.5); // 输出一个小数
        System.out.println('a'); // 输出一个字符
        System.out.println(true); // 输出boolean值true
        System.out.println("欢迎来到黑马程序员"); // 输出字符串
    }
}

4.3 数据类型(记忆、应用)

4.4.1 计算机存储单元

l计算机底层都是一些数字电路(理解成开关),用开表示0、关表示1,这些01的形式就是二进制。

数据在计算机底层都是采用二进制存储的,l在计算机中认为一个开关表示的0|1称为1位(b),每8位称为一个字节(B), 所以1B=8b

字节是计算机中数据的最小单位。

我们知道计算机是可以用来存储数据的,但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位(bit)”,我们又称之为“比特位”,通常用小写的字母”b”表示。而计算机中最基本的存储单元叫“字节(byte)”,

通常用大写字母”B”表示,字节是由连续的8个位组成。

除了字节外还有一些常用的存储单位,其换算单位如下:

1B(字节) = 8bit

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

4.4.2 Java中的数据类型

Java是一个强类型语言,Java中的数据必须明确数据类型。在Java中的数据类型包括基本数据类型和引用数据类型两种。

Java中的基本数据类型:

数据类型 关键字 内存占用 取值范围
整数 byte 1 负的2的7次方 ~ 2的7次方-1(-128~127)
short 2 负的2的15次方 ~ 2的15次方-1(-32768~32767)
int 4 负的2的31次方 ~ 2的31次方-1
long 8 负的2的63次方 ~ 2的63次方-1
浮点数 float 4 1.401298e-45 ~ 3.402823e+38
double 8 4.9000000e-324 ~ 1.797693e+308
字符 char 2 0-65535
布尔 boolean 1 true,false

说明:

e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方。

在java中整数默认是int类型,浮点数默认是double类型。

4.4 变量(应用)

4.4.1 变量的定义

变量:在程序运行过程中,其值可以发生改变的量。

从本质上讲,变量是内存中的一小块区域,其值可以在一定范围内变化。

变量的定义格式:

数据类型 变量名 = 初始化值; // 声明变量并赋值
int age = 18;
System.out.println(age);

或者

// 先声明,后赋值(使用前赋值即可)
数据类型 变量名;
变量名 = 初始化值;
double money;
money = 55.5;
System.out.println(money);

还可以在同一行定义多个同一种数据类型的变量,中间使用逗号隔开。但不建议使用这种方式,降低程序的可读性。

int a = 10, b = 20; // 定义int类型的变量a和b,中间使用逗号隔开
System.out.println(a);
System.out.println(b);

int c,d; // 声明int类型的变量c和d,中间使用逗号隔开
c = 30;
d = 40;
System.out.println(c);
System.out.println(d);

变量的使用:通过变量名访问即可。

4.4.2 使用变量时的注意事项

  1. 在同一对花括号中,变量名不能重复。

  2. 变量在使用之前,必须初始化(赋值)。

  3. 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。

  4. 定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容。

4.5 关键字、标志符(记忆、理解)

关键字

Java自己保留的一些单词,作为特殊功能的,例如:public、class、byte、short、int、long、double…

我们不能用来作为类名或者是变量名称,否则报错。

注意:关键字很多,不用刻意去记。

abstract assert boolean break byte
case catch char class const
continue default do double else
enum extends final finally float
for goto if implements import
instanceof int interface long native
new package private protected public
return strictfp short static super
switch synchronized this throw throws
transient try void volatile while

标志符

标志符就是由一些字符、符号组合起来的名称,用于给类,方法,变量等起名字的规矩。

基本要求:由数字、字母、下划线(_)和美元符($)等组成

强制要求:不能以数字开头、不能是关键字、区分大小写

基本命令规范

 

变量名称:满足标识符规则,建议全英文、有意义、首字母小写,满足“驼峰模式”,例如:int studyNumber = 59。

类名称: 满足标识符规则,建议全英文、有意义、首字母大写,满足“驼峰模式”,例如:HelloWorld.java。

5,类型转换问题

5.1类型转换(理解)

在Java中,会存在不同类型的数据需要一起参与运算,所以这些数据类型之间是需要相互转换的,分为两种情况:自动类型转换和强制类型转换。

5.2自动类型转换

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

 

把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的,直接书写即可。例如:

double num = 10; // 将int类型的10直接赋值给double类型
System.out.println(num); // 输出10.0

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

5.3表达式的自动类型转换

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

注意事项:

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

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

5.4强制类型转换

类型范围大的数据或者变量,不能直接赋值类型范围小的变量,会报错,把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量必须进行强制类型转换。

强制类型转换格式:目标数据类型 变量名 = (目标数据类型)值或者变量;

例如:

double num1 = 5.5;
int num2 = (int) num1; // 将double类型的num1强制转换为int类型
System.out.println(num2); // 输出5(小数位直接舍弃)

说明:

  1. char类型的数据转换为int类型是按照码表中对应的int值进行计算的。比如在ASCII码表中,'a'对应97。

int a = 'a';
System.out.println(a); // 将输出97
  1. 整数默认是int类型,byte、short和char类型数据参与运算均会自动转换为int类型。

byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2; 
// 第三行代码会报错,b1和b2会自动转换为int类型,计算结果为int,int赋值给byte需要强制类型转换。
// 修改为:
int num = b1 + b2;
// 或者:
byte b3 = (byte) (b1 + b2);
  1. boolean类型不能与其他基本数据类型相互转换。

6,运算符

6.1 算术运算符(理解)

6.1.1 运算符和表达式

运算符:对常量或者变量进行操作的符号

表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。

不同运算符连接的表达式体现的是不同类型的表达式。

举例说明:

int a = 10;
int b = 20;
int c = a + b;

+:是运算符,并且是算术运算符。

a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式。

6.1.2 算术运算符

符号 作用 说明
+ 参看小学一年级
- 参看小学一年级
* 参看小学二年级,与“×”相同
/ 参看小学二年级,与“÷”相同
% 取余 获取的是两个数据做除法的余数

注意:

/和%的区别:两个数据做除法,/取结果的商,%取结果的余数。

整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。

int a = 10;
int b = 3;
System.out.println(a / b); // 输出结果3
System.out.println(a % b); // 输出结果1

6.1.3 字符的“+”操作

char类型参与算术运算,使用的是计算机底层对应的十进制数值。需要我们记住三个字符对应的数值:

'a' -- 97 a-z是连续的,所以'b'对应的数值是98,'c'是99,依次递加

'A' -- 65 A-Z是连续的,所以'B'对应的数值是66,'C'是67,依次递加

'0' -- 48 0-9是连续的,所以'1'对应的数值是49,'2'是50,依次递加

// 可以通过使用字符与整数做算术运算,得出字符对应的数值是多少
char ch1 = 'a';
System.out.println(ch1 + 1); // 输出98,97 + 1 = 98

char ch2 = 'A';
System.out.println(ch2 + 1); // 输出66,65 + 1 = 66

char ch3 = '0';
System.out.println(ch3 + 1); // 输出49,48 + 1 = 49

算术表达式中包含不同的基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。

提升规则:

byte类型,short类型和char类型将被提升到int类型,不管是否有其他类型参与运算。

整个表达式的类型自动提升到与表达式中最高等级的操作数相同的类型

等级顺序:byte,short,char --> int --> long --> float --> double

例如:

byte b1 = 10;
byte b2 = 20;
// byte b3 = b1 + b2; // 该行报错,因为byte类型参与算术运算会自动提示为int,int赋值给byte可能损失精度
int i3 = b1 + b2; // 应该使用int接收
byte b3 = (byte) (b1 + b2); // 或者将结果强制转换为byte类型
-------------------------------
int num1 = 10;
double num2 = 20.0;
double num3 = num1 + num2; // 使用double接收,因为num1会自动提升为double类型

tips:正是由于上述原因,所以在程序开发中我们很少使用byte或者short类型定义整数。也很少会使用char类型定义字符,而使用字符串类型,更不会使用char类型做算术运算。

6.1.4 字符串的“+”操作

当“+”操作中出现字符串时,这个”+”是字符串连接符,而不是算术运算。

System.out.println("itheima"+ 666); // 输出:itheima666

在”+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算。当连续进行“+”操作时,从左到右逐个执行。

System.out.println(1 + 99 + "年黑马"); // 输出:199年黑马
System.out.println(1 + 2 + "itheima" + 3 + 4); // 输出:3itheima34
// 可以使用小括号改变运算的优先级 
System.out.println(1 + 2 + "itheima" + (3 + 4)); // 输出:3itheima7

6.2 赋值运算符(应用)

赋值运算符的作用是将一个表达式的值赋给左边,左边必须是可修改的,不能是常量。

符号 作用 说明
= 赋值 a=10,将10赋值给变量a
+= 加后赋值 a+=b,将a+b的值给a
-= 减后赋值 a-=b,将a-b的值给a
*= 乘后赋值 a*=b,将a×b的值给a
/= 除后赋值 a/=b,将a÷b的商给a
%= 取余后赋值 a%=b,将a÷b的余数给a

注意:

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

short s = 10;
s = s + 10; // 此行代码报出,因为运算中s提升为int类型,运算结果int赋值给short可能损失精度

s += 10; // 此行代码没有问题,隐含了强制类型转换,相当于 s = (short) (s + 10);

6.3 自增自减运算符(理解)

符号 作用 说明
++ 自增 变量的值加1
-- 自减 变量的值减1

注意事项:

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

单独使用的时候, ++和-- 无论是放在变量的前边还是后边,结果是一样的。

参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者--。

参与操作的时候,如果放在变量的前边,先拿变量做++或者--,后拿变量参与操作。

最常见的用法:单独使用。

int i = 10;
i++; // 单独使用
System.out.println("i:" + i); // i:11

int j = 10;
++j; // 单独使用
System.out.println("j:" + j); // j:11

int x = 10;
int y = x++; // 赋值运算,++在后边,所以是使用x原来的值赋值给y,x本身自增1
System.out.println("x:" + x + ", y:" + y); // x:11,y:10

int m = 10;
int n = ++m; // 赋值运算,++在前边,所以是使用m自增后的值赋值给n,m本身自增1
System.out.println("m:" + m + ", m:" + m); // m:11,m:11

练习:

int x = 10;
int y = x++ + x++ + x++;
System.out.println(y); // y的值是多少?
/*
解析,三个表达式都是++在后,所以每次使用的都是自增前的值,但程序自左至右执行,所以第一次自增时,使用的是10进行计算,但第二次自增时,x的值已经自增到11了,所以第二次使用的是11,然后再次自增。。。
所以整个式子应该是:int y = 10 + 11 + 12;
输出结果为33。
*/
注意:通过此练习深刻理解自增和自减的规律,但实际开发中强烈建议不要写这样的代码!小心挨打!

6.4 关系运算符(应用)

关系运算符有6种关系,分别为小于、小于等于、大于、等于、大于等于、不等于。

符号 说明
== 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

注意事项:

关系运算符的结果都是boolean类型,要么是true,要么是false。

千万不要把“==”误写成“=”,"=="是判断是否相等的关系,"="是赋值。

int a = 10;
int b = 20;
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a > b); // false
System.out.println(a >= b); // false
System.out.println(a < b); // true
System.out.println(a <= b); // true

// 关系运算的结果肯定是boolean类型,所以也可以将运算结果赋值给boolean类型的变量
boolean flag = a > b;
System.out.println(flag); // 输出false

6.5 逻辑运算符(应用)

逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。

符号 作用 说明
& 逻辑与 a&b,a和b都是true,结果为true,否则为false
| 逻辑或 a|b,a和b都是false,结果为false,否则为true
^ 逻辑异或 a^b,a和b结果不同为true,相同为false
! 逻辑非 !a,结果和a的结果正好相反
//定义变量
int i = 10;
int j = 20;
int k = 30;

//& “与”,并且的关系,只要表达式中有一个值为false,结果即为false
System.out.println((i > j) & (i > k)); //false & false,输出false
System.out.println((i < j) & (i > k)); //true & false,输出false
System.out.println((i > j) & (i < k)); //false & true,输出false
System.out.println((i < j) & (i < k)); //true & true,输出true
System.out.println("--------");

//| “或”,或者的关系,只要表达式中有一个值为true,结果即为true
System.out.println((i > j) | (i > k)); //false | false,输出false
System.out.println((i < j) | (i > k)); //true | false,输出true
System.out.println((i > j) | (i < k)); //false | true,输出true
System.out.println((i < j) | (i < k)); //true | true,输出true
System.out.println("--------");

//^ “异或”,相同为false,不同为true
System.out.println((i > j) ^ (i > k)); //false ^ false,输出false
System.out.println((i < j) ^ (i > k)); //true ^ false,输出true
System.out.println((i > j) ^ (i < k)); //false ^ true,输出true
System.out.println((i < j) ^ (i < k)); //true ^ true,输出false
System.out.println("--------");

//! “非”,取反
System.out.println((i > j)); //false
System.out.println(!(i > j)); //!false,,输出true

6.5.1短路逻辑运算符

符号 作用 说明
&& 短路与 作用和&相同,但是有短路效果
|| 短路或 作用和|相同,但是有短路效果

在逻辑与运算中,只要有一个表达式的值为false,那么结果就可以判定为false了,没有必要将所有表达式的值都计算出来,短路与操作就有这样的效果,可以提高效率。同理在逻辑或运算中,一旦发现值为true,右边的表达式将不再参与运算。

  • 逻辑与&,无论左边真假,右边都要执行。

  • 短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。

  • 逻辑或|,无论左边真假,右边都要执行。

  • 短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。

int x = 3;
int y = 4;
System.out.println((x++ > 4) & (y++ > 5)); // 两个表达都会运算
System.out.println(x); // 4
System.out.println(y); // 5

System.out.println((x++ > 4) && (y++ > 5)); // 左边已经可以确定结果为false,右边不参与运算
System.out.println(x); // 4
System.out.println(y); // 4

6.6 三元运算符(理解)

三元运算符语法格式:

关系表达式 ? 表达式1 : 表达式2;

解释:问号前面的位置是判断的条件,判断结果为boolean型,为true时调用表达式1,为false时调用表达式2。其逻辑为:如果条件表达式成立或者满足则执行表达式1,否则执行第二个。

举例:

int a = 10;
int b = 20;
int c = a > b ? a : b; // 判断 a>b 是否为真,如果为真取a的值,如果为假,取b的值

三元运算符案例:

1、需求:动物园里有两只老虎,已知两只老虎的体重分别为180kg、200kg,请用程序实现判断两只老虎的体重是否相同。

public class OperatorTest01 {
	public static void main(String[] args) {
		//1:定义两个变量用于保存老虎的体重,单位为kg,这里仅仅体现数值即可。
		int weight1 = 180;
		int weight2 = 200;	
		//2:用三元运算符实现老虎体重的判断,体重相同,返回true,否则,返回false。
		boolean b = weight1 == weight2 ? true : false;	
		//3:输出结果
		System.out.println("b:" + b);
	}
}

2、需求:一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,请用程序实现获取这三个和尚的最高身高。

public class OperatorTest02 {
	public static void main(String[] args) {
		//1:定义三个变量用于保存和尚的身高,单位为cm,这里仅仅体现数值即可。
		int height1 = 150;
		int height2 = 210;
		int height3 = 165;	
		//2:用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来。
		int tempHeight = height1 > height2 ? height1 : height2;		
		//3:用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存。
		int maxHeight = tempHeight > height3 ? tempHeight : height3;	
		//4:输出结果
		System.out.println("maxHeight:" + maxHeight);
	}
}

7. 数据输入(应用)

我们可以通过 Scanner 类来获取用户的输入。使用步骤如下:

1、导包。Scanner 类在java.util包下,所以需要将该类导入。导包的语句需要定义在类的上面。

import java.util.Scanner; 

2、创建Scanner对象。

Scanner sc = new Scanner(System.in);// 创建Scanner对象,sc表示变量名,其他均不可变

3、接收数据

int i = sc.nextInt(); // 表示将键盘录入的值作为int数返回。

示例:

import java.util.Scanner;
public class ScannerDemo {
	public static void main(String[] args) {
		//创建对象
		Scanner sc = new Scanner(System.in);
		//接收数据
		int x = sc.nextInt();
		//输出数据
		System.out.println("x:" + x);
	}
}

改写三个和尚案例,数据使用键盘录入。

import java.util.Scanner;
public class ScannerTest {
	public static void main(String[] args) {
		//身高未知,采用键盘录入实现。首先导包,然后创建对象。
		Scanner sc = new Scanner(System.in);
		//键盘录入三个身高分别赋值给三个变量。
		System.out.println("请输入第一个和尚的身高:");
		int height1 = sc.nextInt();
		System.out.println("请输入第二个和尚的身高:");
		int height2 = sc.nextInt();
		System.out.println("请输入第三个和尚的身高:");
		int height3 = sc.nextInt();
		//用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来。
		int tempHeight = height1 > height2 ? height1 : height2;
		//用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存。
		int maxHeight = tempHeight > height3 ? tempHeight : height3;
		//输出结果。
		System.out.println("这三个和尚中身高最高的是:" + maxHeight +"cm");
	}
}

import java.util.Scanner;
public class IfTest02 {
	public static void main(String[] args) {
		//小明的考试成绩未知,可以使用键盘录入的方式获取值
		Scanner sc = new Scanner(System.in);	
		System.out.println("请输入一个分数:");
		int score = sc.nextInt();
		//由于奖励种类较多,属于多种判断,采用if...else...if格式实现
		//为每种判断设置对应的条件
		//为每种判断设置对应的奖励	
		//数据测试:正确数据,边界数据,错误数据
		if(score>100 || score<0) {
			System.out.println("你输入的分数有误");
		} else if(score>=95 && score<=100) {
			System.out.println("山地自行车一辆");
		} else if(score>=90 && score<=94) {
			System.out.println("游乐场玩一次");
		} else if(score>=80 && score<=89) {
			System.out.println("变形金刚玩具一个");
		} else {
			System.out.println("胖揍一顿");
		}
	}
}

1.流程控制语句(应用)

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。

1.1 流程控制语句分类

顺序结构

分支结构(if, switch)

循环结构(for, while, do…while)

1.2 顺序结构

顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

顺序结构执行流程图:

 

1.3 分支结构:if语句

if语句格式1

格式:
if (关系表达式) {
    语句体;	
}

执行流程:

①首先计算关系表达式的值

②如果关系表达式的值为true就执行语句体

③如果关系表达式的值为false就不执行语句体

④继续执行后面的语句内容

 示例:

public class IfDemo {
	public static void main(String[] args) {
		System.out.println("开始");	
		//定义两个变量
		int a = 10;
		int b = 20;	
		//需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
		if(a == b) {
			System.out.println("a等于b");
		}		
		//需求:判断a和c的值是否相等,如果相等,就在控制台输出:a等于c
		int c = 10;
		if(a == c) {
			System.out.println("a等于c");
		}		
		System.out.println("结束");
	}
}

if语句格式2

格式:
if (关系表达式) {
    语句体1;	
} else {
    语句体2;	
}

执行流程:

①首先计算关系表达式的值

②如果关系表达式的值为true就执行语句体1

③如果关系表达式的值为false就执行语句体2

④继续执行后面的语句内容

 示例:

public class IfDemo02 {
	public static void main(String[] args) {
		System.out.println("开始");		
		//定义两个变量
		int a = 10;
		int b = 20;
		b = 5;	
		//需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,否则,在控制台输出:a的值不大于b
		if(a > b) {
			System.out.println("a的值大于b");
		} else {
			System.out.println("a的值不大于b");
		}		
		System.out.println("结束");
	}
}

if语句案例:奇偶数

需求:任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数。

分析:

①为了体现任意给出一个整数,采用键盘录入一个数据

②判断整数是偶数还是奇数要分两种情况进行判断,使用if..else结构

③判断是否偶数需要使用取余运算符实现该功能 number % 2 == 0

④根据判定情况,在控制台输出对应的内容

import java.util.Scanner;
public class IfTest01 {
	public static void main(String[] args) {
		//为了体现任意给出一个整数,采用键盘录入一个数据。(导包,创建对象,接收数据)
		Scanner sc = new Scanner(System.in);		
		System.out.println("请输入一个整数:");
		int number = sc.nextInt();	
		//判断整数是偶数还是奇数要分两种情况进行判断,使用if..else结构		
		//判断是否偶数需要使用取余运算符实现该功能 number % 2 == 0
		//根据判定情况,在控制台输出对应的内容
		if(number%2 == 0) {
			System.out.println(number + "是偶数");
		} else {
			System.out.println(number + "是奇数");
		}	
	}
}

if语句格式3

格式:
if (关系表达式1) {
    语句体1;	
} else if (关系表达式2) {
    语句体2;	
} 
…
else {
    语句体n+1;
}

 执行流程:

①首先计算关系表达式1的值

②如果值为true就执行语句体1;如果值为false就计算关系表达式2的值

③如果值为true就执行语句体2;如果值为false就计算关系表达式3的值

④…

⑤如果没有任何关系表达式为true,就执行语句体n+1。

示例:键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日

import java.util.Scanner;
public class IfDemo03 {
	public static void main(String[] args) {
		System.out.println("开始");
		// 需求:键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个星期数(1-7):");
		int week = sc.nextInt();
		if(week == 1) {
			System.out.println("星期一");
		} else if(week == 2) {
			System.out.println("星期二");
		} else if(week == 3) {
			System.out.println("星期三");
		} else if(week == 4) {
			System.out.println("星期四");
		} else if(week == 5) {
			System.out.println("星期五");
		} else if(week == 6) {
			System.out.println("星期六");
		} else {
			System.out.println("星期日");
		}	
		System.out.println("结束");
	}
}

if语句格式3案例:

需求:小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。

分析:

①小明的考试成绩未知,可以使用键盘录入的方式获取值

②由于奖励种类较多,属于多种判断,采用if...else...if格式实现

③为每种判断设置对应的条件

④为每种判断设置对应的奖励

1.4 分支结构:switch语句

switch语句结构(掌握)

  • 格式

    switch (表达式) {
    	case 1:
    		语句体1;
    		break;
    	case 2:
    		语句体2;
    		break;
    	...
    	default:
    		语句体n+1;
    		break;
    }
  • 执行流程:

    • 首先计算出表达式的值

    • 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。

    • 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

switch语句练习-春夏秋冬(应用)

  • 需求:一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。

  • 运行结果:

春:3、4、5
夏:6、7、8
秋:9、10、11
冬:1、2、12
  • 示例代码:

public class Demo1 {
    public static void main(String[] args) {
        //键盘录入月份数据,使用变量接收
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个月份:");
        int month = sc.nextInt();
        //case穿透
        switch(month) {
            case 1:
            case 2:
            case 12:
                System.out.println("冬季");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("春季");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏季");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋季");
                break;
            default:
                System.out.println("你输入的月份有误");
        }
    }
}
  • 注意:如果switch中得case,没有对应break的话,则会出现case穿透的现象。

1.5 循环结构:for循环

for循环结构(掌握)

  • 循环:

    循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形 成死循环。

  • for循环格式:

for (初始化语句;条件判断语句;条件控制语句) {
	循环体语句;
}
  • 格式解释:

    • 初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样

    • 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去

    • 循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情

    • 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去

  • 执行流程:

    ①执行初始化语句

    ②执行条件判断语句,看其结果是true还是false

    如果是false,循环结束

    如果是true,继续执行

    ③执行循环体语句

    ④执行条件控制语句

    ⑤回到②继续

for循环练习-输出数据(应用)

  • 需求:在控制台输出1-5和5-1的数据

  • 示例代码:

public class ForTest01 {
    public static void main(String[] args) {
		//需求:输出数据1-5
        for(int i=1; i<=5; i++) {
			System.out.println(i);
		}
		System.out.println("--------");
		//需求:输出数据5-1
		for(int i=5; i>=1; i--) {
			System.out.println(i);
		}
    }
}

for循环练习-求和(应用)

  • 需求:求1-5之间的数据和,并把求和结果在控制台输出

  • 示例代码:

public class ForTest02 {
    public static void main(String[] args) {
		//求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0
		int sum = 0;
		//从1开始到5结束的数据,使用循环结构完成
		for(int i=1; i<=5; i++) {
			//将反复进行的事情写入循环结构内部
             // 此处反复进行的事情是将数据 i 加到用于保存最终求和的变量 sum 中
			sum += i;
			/*
				sum += i;	sum = sum + i;
				第一次:sum = sum + i = 0 + 1 = 1;
				第二次:sum = sum + i = 1 + 2 = 3;
				第三次:sum = sum + i = 3 + 3 = 6;
				第四次:sum = sum + i = 6 + 4 = 10;
				第五次:sum = sum + i = 10 + 5 = 15;
			*/
		
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章