Java语法基础

Java语法基础

一、初始计算机和java语言

1.计算机的体系结构

1.1 计算机的基本概念
  • 计算机(computer)俗称电脑,是一种用于高级计算,使用非常广泛的设备。主要由计算机硬件和计算机软件两个部分组成。
  • 计算机硬件是客观存在的各种计算机相关设备,而计算机的软件是用于控制各种硬件设备完成各种功能。
1.2 常见的主要硬件
  • 计算机硬件(Computer Hardware)主要包括:中央处理器(CPU)、内存、硬盘、输入输出设备、主板、机箱和电源等辅助设备。

  • CPU的概述

    • 中央处理器(英文Central Processing Unit)
    • 是计算机中最核心的部件,类似于人的大脑
    • 是一台计算机运算核心和控制核心,所有运算都由CPU完成
    • 其功能主要是解释计算机指令以及处理计算机软件中的数据
  • 内存的概述

    • 是计算机中的存储部件,内存(Memory)也被称为内存储器
    • 用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据
    • CPU可以直接访问内存的数据,而且效率比较高
    • 容量小不能实现永久存储,一旦断电会造成数据的丢失
    • 时刻记住ctrl+s快捷键进行保存
  • 硬盘的概述

    • 硬盘是计算机中的存储部件
    • 主要用于永久存放数据内容,容量大且断电不丢失
    • CPU不能直接访问硬盘中数据,若希望访问则需要先加载到内存中
1.3 常见的主要软件
  • 计算机软件(Computer Software)可分为系统软件和应用软件,系统软件就是操作系统,是其他软件的基础。
  • 主流的操作系统有:Windows、Unix、Linux、IOS、Android
1.4 计算机的体系结构

在这里插入图片描述

2. Java语言的概述(常识)

2.1 计算机语言的概述
  • 语言是人与人之间进行沟通的主要表达方式。如:中国人与中国人使用普通话交流,而中国人与美国人交流就要使用英语。
  • 计算机语言是人与计算机之间交流的表达方式,该语言有很多种。
2.2 计算机语言的发展
  • 第一代语言:机器语言,指令以二进制代码形式存在,最开始使用穿孔卡片。
  • 第二代语言:汇编语言,使用借记符表示一条机器指令,如:ADD、SUB等。
  • 第三代语言:高级语言,Java、C、C++、PHP、Python等。
2.3 Java的版本分类
  • JavaSE(Java Platform,Standard Edition)称之为“Java平台标准版”,是Java平台的基础。JavaSE包含了运行Java应用所需要的基础环境和核心类库。JavaSE还定义了基于桌面应用的基础类库,通过使用这些类库,我们可以编写出类似于像Office那样的丰富多彩的桌面应用。
  • JavaEE(Java Platform, Enterprise Edition)称之为“Java平台企业版”,JavaEE构建在JavaSE基础之上,用于构建企业级应用。所谓企业级应用是指那些为商业组织、大型企业而创建的应用系统。
  • JavaME(Java Platform,MicroEdition)称之为平台微型版。为机顶盒、移动电话等嵌入式消费电子设备提供的Java解决方法。基本已经淘汰

3. 开发环境的搭建

3.1 开发工具的下载和安装
  • 下载方式

    • 方式一:通过官网下载:www.oracle.com
    • 方式二:通过搜索下载:www.baidu.com
  • 安装方式

    • 若下载的是安装版,则一路点击下一步安装即可
    • 若下载的是绿色版,则直接解压即可
    • 无论是安装版还是绿色版,安装的路径中不可有中文
3.2 JDK的目录结构
  • bin目录:该目录下主要存放JDK的各种工具命令
  • conf目录:该目录下主要存放JDK的相关配置文件
  • include目录:该目录下主要存放了一些平台的头文件
  • jmods目录:该目录下主要存放了JDK的各种模块
  • legal目录:该目录下主要存放了JDK各模块的授权文档
  • lib目录:该目录下主要存放了JDK工具的一些补充jar包和源代码
3.3 相关的概念
  • JDK:称为Java开发工具包(Java Development Kit)。Java开发人士需要下载和安装JDK,目前的主流版本为JDK8—>JDK11。
  • JRE:称为Java SE运行时环境(Java Runtime Environment),提供了运行Java应用程序所必须的软件环境等。无论是开发还是运行Java应用都必须安装。
  • JVM:称为Java虚拟机(Java Virtual Machines)用于执行Java字节码文件
  • javac.exe:编译器,主要用于将高级Java源代码翻译成字节码文件。
  • Java.exe:解释器,主要用于启动JVM对字节码文件进行解释并执行。
3.4 JDK、JRE、JVM之间的关系

在这里插入图片描述

3.5 Java开发的常用工具
  • 文本编辑器、记事本等
  • 集成开发环境(IDE):Eclipse、MyEclipse、IDEA
3.6 编写Java程序的流程
  • 新建文本文档,将文件扩展名由xxx.txt修改为xxx.java
  • 使用记事本的方式打开文件,编写Java代码后进行保存
  • 启动dos窗口,并切换到.java文件所在的路径中
  • 使用javac xxx.java进行编译,生成xxx.class的字节码文件
  • 使用java xxx进行解释执行,打印最终结果
3.7 编译和运行

在这里插入图片描述

3.8 Java11新特性之简化编译运行
  • 新建文本文档,将文件扩展名由xxx.txt修改为xxx.java

  • 使用记事本的方式打开文件,编写Java代码后进行保存

  • 启动dos窗口,并切换到.java文件所在的路径中

  • 使用java xxx.java进行编译运行,打印最终结果

3.9 环境变量的配置
  • 配置CLASSPATH变量(不是必须要配)
    在这里插入图片描述
  • 配置JAVA_HOME环境变量(不是必须)
    在这里插入图片描述
  • 编辑Path环境变量进行添加(必须要配)
    在这里插入图片描述
3.10 跨平台原理在这里插入图片描述
  • Java字节码可以通过JVM翻译为具体平台能够执行的机器指令。由于Sun定义了JVM规范,而且不同的操作系统大多提供了JVM实现,才使得相同的一个字节码文件可以在不同的系统上运行,从而使Java“一次编译,到处使用”。

4. 注释

  • 注释用于进行代码说明,是给程序员看的文字描述,编译器会忽略注释。
  • 基本分类
    • // :单行注释,从//开始,到本行结束,都是注释。
    • /*内容 */:多行注释,中间所有的内容都是注释。
    • /** 内容 */: 文档注释,中间内容都是注释,是一种支持提取的注释。

二、Java语言的编程基础

1. 变量

1.1 变量的基本概念
  • 当需要在程序中记录单个数据内容时,则声明一个变量即可,而声明变量的本质就是在内存中申请一个存储单元,由于该存储单元中的数据内容可以发生改变,因此得名为“变量”。
  • 由于存放的数据内容大小不一样,当值所需存储单元的大小不一样,在Java语言中使用数据类型加以描述,为了便于下次访问还需要给该变量指定一个名字,用于记录该变量对应的存储单元。
1.2 变量的声明方式
  • 数据类型 变量名 = 初始值;
  • 其中 = 初始值可以省略,但;不可以省略。
1.3 变量的注意事项
  • Java是强类型语言,变量在使用前必须声明来指明其数据类型
  • 变量在使用前必须初始化
  • 变量不能重复声明
1.4 标识符的命名法则(笔试)
  • 由数字、字母、下划线以及$符等组成,其中数字不能开头
  • 不能使用Java语言的关键字,所谓关键字就是Java语言用于表示特殊含义的单词
  • 区分大小写,长度没有限制但不宜过长
  • 尽量做到见名知意,支持中文但不推荐使用
  • 标识符可以给类、变量、属性、方法、包等起名字
1.5 变量使用案例
  • 变量的使用语法
/*
    变量的声明和使用
 */
public class VarTest {
	public static void main(String[] args) {
		// 1.声明一个变量并初始化   数据类型 变量名 = 初始值;
        int age = 18;
		// 2.打印变量的数值   + 字符串连接符  用于将两边的内容拼接/连接起来结果还是字符串
		System.out.println("age = " + age); // age = 18
		System.out.println("-----------------------------------------------------");
		// 3.使用变量的注意事项
		// 3.1 使用变量之前需要声明
		// System.out.println("name = " + name); // 错误: 找不到符号 
		// 3.2 使用变量之前需要初始化
		//String name;
		//System.out.println("name = " + name); // 错误: 可能尚未初始化变量name
		String name = "陈龙";
		System.out.println("name = " + name); // name = 陈龙
		// 3.3 变量不能重复声明
		//int age = 17; // 错误: 已在方法 main(String[])中定义/声明了变量 age
		int aGe = 17;
		int fjakjf3fjdlakjfa7987jfkdajlkf2427897fdjafjalkl89809fdjafjlj = 10;
		int 年龄 = 16;
	}
} 
  • 提示用户从键盘输入自己的姓名和年龄信息并打印出来
/*
   编程实现变量的输入输出
 */
// 导入java目录中util目录的Scanner类
import java.util.Scanner; 
 
public class VarIOTest {
	public static void main(String[] args) {
		// 1.声明两个变量用于记录姓名和年龄信息
		//String name;
		//int age;
		// 2.提示用户从键盘输入姓名和年龄信息并放入到变量中   变量随使用随声明
		System.out.println("请输入您的姓名和年龄信息:");
		// 创建一个扫描器来扫描键盘输入的内容  System.in代表键盘输入
		Scanner sc = new Scanner(System.in);
		// 通过扫描器读取一个字符串数据放入变量name中
		String name = sc.next();
		// 通过扫描器读取一个整数数据放入变量age中
		int age = sc.nextInt();
		
		// 3.打印变量的数值     尽可能减少重复的代码
		//System.out.println("name = " + name);
		//System.out.println("age = " + age);
		System.out.println("name = " + name + ", age = " + age);
	}
} 
1.6 官方库的使用
  • JDK 中带有大量的API类,是有java系统带来的工具库,这些工具数以万计!是Java官方程序员的技术积累
  • 使用这些类可以大大简化编程,提高开发效率
  • 具体API类功能,可以参阅Java的参考手册

2. 数据类型

2.1 数据类型的分类
  • 在Java语言中数据类型主要分为两大类:
  • 基本数据类型:byte、short、int、long、float、double、boolean、char
  • 引用数据类型:数据、类、接口、枚举、标注(注解)
2.2 常用的进制
  • 在日常生活中采用十进制进行数据的描述,逢十进一,十进制的权重是:100、101、10^2、……
  • 在计算机底层采用0和1组成的二进制序列进行数据的描述,逢二进一,二进制的权重是20、21、2^2、……
  • 二进制中的最高位(最左边)用于代表符号位,若该位是0则表示非负数, 若该位是1则表示负数
  • 八进制和十六进制其实都是二进制的简写
2.3 进制之间的转换
  • 正十进制转换为二进制的方式

    • 除2取余法,使用十进制整数不断地除以2取出余数,直到商为0时将 余数逆序排序
    • 拆分法,将十进制整数拆分为若干个二进制权重的和,有该权重下面 写1,否则写0
  • 正二进制转换为十进制的方式

    • 加权法,使用二进制中的每个数字乘以当前位的权重再累加起来
  • 负十进制转换为二进制的方式

    • 先将十进制的绝对值转换为二进制,然后进行按位取反再加1
    • 负数的需要补码:按位取反,再加1
  • 负二进制转换为十进制的方式

    • 先减1再按位取反,合并为十进制整数后添加负号
2.4 单个字节表示的整数范围
  • 在计算机中单个字节表示八位二进制位,其中最高位(最左边)代表符号位, 使用0代表非负数,使用1代表负数,具体表示的整数范围如下:

  • 非负数表示范围:0000 0000 ~ 0111 1111 => 0 ~ 127 => 0 ~ 2^7-1

  • 负数表示范围:1000 0000 ~ 1111 1111 => -128 ~ -1 => -2^7 ~ -2^0

  • 单个字节表示的整数范围是:-2^7 ~ 2^7-1,也就是-128 ~ 127

2.5 整数类型
  • Java语言中描述整数数据的类型有:byte、short、int、long,荐int类型
  • 其中byte类型在内存空间中占1个字节,表示范围是:-2^7 ~ 2^7-1
  • 其中short类型在内存空间中占2个字节,表示范围是:-2^15 ~ 2^15-1
  • 其中int类型在内存空间中占4个字节,表示范围是:-2^31 ~ 2^31-1
  • 其中long类型在内存空间中占8个字节,表示范围是:-2^63 ~ 2^63-1
  • 在Java程序中直接写出的整数数据叫做直接量/字面值/常量,默认为int类 型。若希望表达更大的直接量,则在直接量的后面加上l或者L,推荐L
  • 整数类型使用案例:
/*
   整数类型的使用
 */
public class IntTest {
	public static void main(String[] args) {
		// 1.声明一个byte类型的变量并初始化
		byte b1 = 25;
		//byte b1 = 250;     // 错误: 不兼容的类型: 从int转换到byte可能会有损失  250这样直接写出的整数数据叫做直接量/常量/字面值 默认为int类型 
		// 2.打印变量的数值
		System.out.println("b1 = " + b1); // b1 = 25
		
		System.out.println("---------------------------------------------");
		// 3.声明一个short类型的变量并初始化
		short s1 = 250;
		//short s1 = 250250;  // 错误:不兼容的类型:从int转换到short可能会有损失
		System.out.println("s1 = " + s1); // s1 = 250
		
		System.out.println("---------------------------------------------");
		// 4.声明一个int类型的变量并初始化
		int i1 = 250250;
		//int i1 = 2502505006; // 错误: 整数太大   默认为int类型,这个数据自身已经出错,无法表示
		//int i1 = 2502505006L;  // 错误:不兼容的类型:从long转换到int可能会有损失
		System.out.println("i1 = " + i1); // i1 = 250250
		
		System.out.println("---------------------------------------------");
		// 5.声明一个long类型的变量并初始化,若描述比long类型还大的数据则使用java.math.BigInteger类型
		long g1 = 2502505006L;
		System.out.println("g1 = " + g1); // g1 = 2502505006
		
		System.out.println("---------------------------------------------");
		// 6.请问下面的代码是否有错误?若有请指出并说明原因
		//int i2 = 25;
		//byte b2 = i2;  // 错误: 不兼容的类型: 从int转换到byte可能会有损失
		//System.out.println("b2 = " + b2);
		
	}
}
2.6 浮点类型
  • Java语言中用于描述小数数据的类型:float 和 double,推荐double类型
  • 其中float类型在内存空间占4个字节,叫做单精度浮点数,可以表示7位 有效数字,范围:-3.403E38~3.403E38
  • 其中double类型在内存空间占8个字节,叫做双精度浮点数,可以表示15 位有效数字,范围:-1.798E308~1.798E308
  • Java程序中直接写出的小数数据叫做直接量,默认为double类型,若希望 表达float类型的直接量,则需要在直接量的后面加上f或者F
  • 浮点类型使用案例:
/*
    编程实现浮点类型的使用
 */
public class DoubleTest {
	
	public static void main(String[] args) {
		
		// 1.声明一个float类型的变量并初始化
		//float f1 = 3.1415926;   // 错误: 不兼容的类型: 从double转换到float可能会有损失   小数数据叫做直接量,默认为double类型
		float f1 = 3.1415926f;
		// 2.打印变量的数值
		System.out.println("f1 = " + f1); // f1 = 3.1415925     一般是7位有效数字
		
		System.out.println("---------------------------------------------------------");
		// 3.声明一个double类型的变量并初始化
		double d1 = 3.1415926;
		System.out.println("d1 = " + d1); // d1 = 3.1415926     一般是15位有效数字
		
		System.out.println("---------------------------------------------------------");
		// 4.笔试考点
		System.out.println(0.1 + 0.2);  // 0.30000000000000004  运算时可能会有误差,若希望实现精确运算则借助java.math.BigDecimal类型 
	}
}
2.7 布尔类型
  • Java语言中用于描述真假信息类型有:boolean,数值只有:true 和 false
  • 布尔类型在内存空间中所占大小没有明确的规定,可以认为是1个字节
  • 布尔类型使用案例:
/*
    编程实现布尔类型的使用
 */
public class BooleanTest {
	public static void main(String[] args) {
		// 1.声明一个boolean类型的变量并初始化
		boolean b1 = true;
		// 2.打印变量的数值
		System.out.println("b1 = " + b1); // b1 = true
		
		System.out.println("-------------------------------------------");
		// 3.修改变量b1的数值   = 赋值运算符,用于将=右边的数据赋值给=左边的变量,覆盖变量中原来的数值
		b1 = false;
		System.out.println("b1 = " + b1); // b1 = false
		
		System.out.println("-------------------------------------------");
		//b1 = 1; // 错误: 不兼容的类型: int无法转换为boolean
	}
}
2.8 字符类型
  • Java语言中用于描述单个字符的数据类型:char类型。如:‘a’、 '中’等

  • 其中char类型在内存空间中占2个字节并且没有符号位,表示的范围是: 0 ~ 65535,由于现实生活中很少有数据能够被单个字符描述,因此以后 的开发中更多的使用由多个字符串起来组成的字符串,使用String类型加 以描述,如:“hello”、 “王五”等

  • 计算机的底层只识别0和1组成的二进制序列,对于字符’a’这样的图案来 说不满足该规则,因此该数据无法直接在计算机中存储,但现实生活中 存在这样的图案数据需要计算机存储,为了使得该数据能够存储起来就 可以给该数据指定一个编号,然后将编号存储起来即可,该编号就叫做 ASCII

  • 要求掌握的ASCII有:‘0’ - 48 ‘A’ - 65 ‘a’ - 97 空格 - 32 换行符 - 10

  • Java字符类型采用Unicode字符集编码。Unicode是世界通用的定长字符 集,所有的字符都是16位

  • 要求掌握的转义字符有:" - " ’ - ’ \ - \ \t - 制表符 \n - 换行符

  • 字符类型的案例使用:

/*
   编程实现字符类型的使用         
 */
public class CharTest {
	
	public static void main(String[] args) {
		
		// 1.声明一个char类型的变量并初始化
		char c1 = 'a';
		// 2.打印变量的数值
		System.out.println("c1 = " + c1); // c1 = a   
		System.out.println("对应的编号是:" + (int)c1); // 表示将char类型的c1强制转换为int类型并打印   97 
		
		System.out.println("-------------------------------------------------------------------------");
		// 2.声明一个char类型的变量并初始化
		char c2 = 98;
		System.out.println("c2 = " + c2); // c2 = b   
		System.out.println("对应的编号是:" + (int)c2); // 98
		
		System.out.println("-------------------------------------------------------------------------");
		// 3.使用Unicode字符集
		char c3 = '\u5947';
		char c4 = '\u70b9';
		System.out.println("最终的结果是:" + c3 + c4); 
		
		System.out.println("-------------------------------------------------------------------------");
		// 4.特殊字符的使用   双引号本身有2个含义:a.字符串的开头和结尾标志    b.双引号自身    \ 转义就是转换原有的含义
		System.out.println("我想过过\"过过过过的生活!");   //  \"  - "
		System.out.println("我想过过\'过过过过的生活!");
		System.out.println("我想过过\\过过过过的生活!");
		System.out.println("我想过过\t过过过过的生活!");
		System.out.println("我想过过\n过过过过的生活!");
	}
}
2.9 类型转换
  • Java语言中基本数据类型之间的转换方式:自动类型转换和强制类型转换

  • 其中自动类型转换主要指从小类型到大类型之间的转换

  • 其中强制类型转换主要指从大类型到小类型之间的转换,语法格式如下: 目标类型 变量名 = (目标类型)源类型变量名;

  • 强转有风险,操作需谨慎!

  • 类型转换的使用案例:

/*
    编程实现基本数据类型之间转换的使用
 */
public class TransformTest {
	
	public static void main(String[] args) {
		
		// 1.声明两个变量并初始化
		byte b1 = 10;
		short s1 = 20;
		// 2.打印变量的数值
		System.out.println("b1 = " + b1); // b1 = 10
		System.out.println("s1 = " + s1); // s1 = 20
		
		System.out.println("----------------------------------------------");
		// 3.实现自动类型转换的使用
		// 表示将变量b1的数值赋值给变量s1,并覆盖变量s1中原来的数值,相当于从byte类型到short类型的转换,小到大  自动转换
		s1 = b1;
		System.out.println("b1 = " + b1); // b1 = 10
		System.out.println("s1 = " + s1); // s1 = 10
		
		System.out.println("----------------------------------------------");
		// 4.实现强制类型转换的使用
		// 表示将变量s1的数值赋值给变量b1,并覆盖变量b1中原来的数值,相当于从short类型到byte类型的转换,大到小  强制转换
		//b1 = s1;   // 错误: 不兼容的类型: 从short转换到byte可能会有损失
		s1 = 128;    // 故意加该行代码      128:0000 0000 1000 0000  => 1000 0000 => 0111 1111 => 1000 0000 => 128 => -128
		b1 = (byte)s1;
		System.out.println("b1 = " + b1); // b1 = 10   -128 
		System.out.println("s1 = " + s1); // s1 = 10   128
	}
}

3.运算符

3.1 算术运算符
  • +表示加法运算符
  • -表示减法运算符
  • *表示乘法运算符
  • /表示除法运算符
  • %表示取模/取余运算符
3.2字符串连接运算符
  • +号可以实现字符串的连接。同时可以实现字符串与其他数据类型“相连”。
3.3 关系/比较运算符
  • “>” 表示是否大于运算符 , “>=” 表示是否大于等于运算符。

  • “<” 表示是否小于运算符,“<=” 表示是否小于等于运算符

  • == 表示是否等于运算符 != 表示是否不等于运算符

  • 所有以关系运算符作为最终运算的表达式结果一定是boolean类型。

3.4 自增减运算符
  • ++ 表示自增运算符,用于使得当前变量自身的数值加1的效果
  • – 表示自减运算符,用于使得当前变量自身的数值减1的效果
  • 只能用于变量,常数不可以。
3.5 逻辑运算符
  1. 逻辑运算符的概念
  • &&表示逻辑与运算符,相当于“并且”,同真为真,一假为假。
  • ||表示逻辑或运算符,相当于“或者”,一真为真,同假为假。
  • !表示逻辑非运算符,相当于“取反”,真为假,假为真。
  • 逻辑运算符的操作数均为boolean表达式。
  1. 逻辑运算符的图解
    在这里插入图片描述
  2. 逻辑运算符的短路特性
  • 对于逻辑与运算符来说,若第一个表达式为假,此时跳过第二个表达式。
  • 对于逻辑或运算符来说,若第一个表达式为真则结果为真,此时跳过第二个表达式
3.6 条件/三目运算符
  • 条件表达式?表达式1:表达式2
  • 判断条件表达式是否成立,若成立则执行表达式1,否则执行表达式2。
3.7 赋值运算符
  • =表示赋值运算符,用于将=号右边的数据赋值给=左边的变量。覆盖变量原来的数值。
  • 赋值表达式本身也有值,其本身之值即为所赋之值
  • +=、-=、*=、/=、…
3.8 移位运算符(了解)
  • << 左移运算符,用于将数据的二进制位向左移动,右边使用0补充
  • 两个大于号,右移运算符,用于将数据的二进制位向右移动,左边使用符号位补充
  • 三个大于号表示逻辑右移运算符,用于将数据的二进制位向右移动,左边使用0补充
3.9 位运算符(了解)
  • &表示按位与运算符,按照二进制位进行与运算,同1为1,一0为0
  • |表示按位或运算符,按照二进制位进行或运算,一1为1,同0为0
  • ~ 表示按位取反运算符,按照二进制位进行取反,1为0,0为1
  • ^表示按位异或运算符,按照二进制位进行异或运算,同为0,不同为1
3.10 运算符的优先级
  • ()的优先级极高
  • = 的优先级极低
  • 若无法确认优先级,则使用()来确保即可

三、流程控制语句

1.分支结构

1.1 分支结构的概念
  • 分支就是指根据分支条件选择一路指令序列执行。使用分支流程控制语句可以实现根据条件控制程序的执行结果。

  • 分支条件语句分为3种:
    在这里插入图片描述

1.2 if单路分支流程控制
  • if语句用于处理单路分支流程控制。其语法结构如下:
    在这里插入图片描述
  • 如上语句的执行流程为:
    • 先执行指令1;
    • 然后执行判断分支条件表达式,得到boolean值:
      1. 若值为true,则执行if语句块中的指令2;
      2. 若值为false,则不执行if语句块中的指令2;
    • 最后执行指令3
1.3 if else 双路分支语句
  • if与else搭配可以实现双路分支语句,其语法如下:
    在这里插入图片描述
  • 执行流程:
    • 先执行指令1;
    • 判断if分支条件表达式的值;
      1. 若值为true,则执行指令2;
      2. 若值为false,则执行指令3;
    • 执行指令4;
1.4 if else if多路分支语句
  • if else可以组合成多路分支语句,用来实现根据多个条件多选一执行。比如分段打折问题:

    • 如果商品总价大于等于800,则打7折;
    • 如果商品总价小于800大于等于500,则打8折;
    • 如果商品总价小于500大于等于200,则打9折;
    • 如果商品总价小于200,则打95折
      其流程可以描述为:
      在这里插入图片描述
      案例代码实现:
    public class IfDemo{
        public static void main(String[] args){
            Scanner scan = new Scanner(System.in);
            System.out.println("输入总金额");
            double total = console.nextDouble();
            if(total >= 800){
                total *= 0.7;
            }else if(total >= 500){
                total *= 0.8;
            }else if(total >= 200){
                total *= 0.9;
            }else {
                total *= 0.95;
            }
            System.out.println("应付款:" + total);
        }
    }
    
1.5 switch case 分支结构
  • switch … case 是Java的一种多路分支语句,可以根据整数、字符串、枚举类型进行分支。

  • if else if 语句已经可以实现多路分支了,而switch case语句在整数等情况下进行分支判断的时候性能更好。

  • if else if是万能多路分支语句,而switch case只能对整数(字符串、枚举)进行分支,是限定整数情况下才能使用,使用switch case核心目的就是因为其性能优势。

  • 具体语法:

    • Java5开始switch case语句支持枚举类型
    • Java7开始switch case开始支持String类型
    • break用于结束switch语句
    • byte、short、char可以自动转换为int,可以作为分支条件
    • case后只能是常量,不能是表达式

    在这里插入图片描述

2. 循环结构

1.1 循环结构的概念
  • 在Java程序中,若希望重复执行一段代码时,就需要使用循环结构。

  • 任何复杂的程序逻辑都可以通过顺序、分支、循环三种程序结构实现。

  • Java中包含3中循环结构
    在这里插入图片描述

1.2 for循环流程控制
  • for循环是最常用的循环流程控制,for是万能循环,但是经典用法是计次循环,作为计次循环使用的时候,关键要找到4个要素:

    • 初始化
    • 循环条件(结束)
    • 递增
    • 循环体
      在这里插入图片描述
  • for循环工作流程:
    在这里插入图片描述

    • 执行初始化表达式 => 判断条件表达式是否成立 => 成立则执行循环体 => 修改初始值表达式 => 判断条件是否成立 => 若不成立,循环结束
1.3 continue关键字
  • continue语句用于在循环体中,用于结束本次循环而开始下一次循环。
1.4 break关键字
  • break用于退出当前语句块,break用在循环体中用于退出循环;
  • for(;😉—> 这种没有循环条件的循环叫做无限循环,俗称死循环;
1.5 双重for循环
  • 格式:

    • for(初始化表达式1; 条件表达式2; 修改初始值表达式3) {

      ​ for(初始化表达式4; 条件表达式5; 修改初始值表达式6) {

      ​ 循环体;

      ​ }

      }

  • 执行流程:

    • 执行表达式1 => 判断表达式2是否成立 => 若成立,则执行表达式4 => 判断表达式5是否成立 => 若成立,则执行循环体 => 执行表达式6 => 表达式5是否成立 => 若不成立,则内层循环结束 => 表达式3 => 表达式2是否成立 => 若不成立,则外层循环结束
  • 特点:

    • 外层循环用于控制打印的行数,内层循环用于控制打印的列数,外层循 环改一下,内层循环从头到尾跑一圈。
    • 在以后的开发中若需要打印多行多列时,需要使用双重循环。
    • 多重循环不宜嵌套太多层,否则效率很低。一般到三重循环即可,最常 见的就是双重循环。
1.6 while循环
  • while循环一般使用在不计次的场合中,它是先判断循环条件,然后执行循环体
    在这里插入图片描述
  • 执行流程为:
    • 计算循环条件表达式的值。
    • 如果值为true则执行循环体;循环体执行完后再次判断循环条件表达式的值,如果为true则继续执行循环体;如此循环往复,直到循环往复,直到循环条件为false时结束while循环
    • 使用while循环关键是找到两个要素:
      1. 循环体
      2. 循环条件
1.7 do…while循环
  • 先执行循环体再计算循环条件表达式的值,如果为true,再次执行循环体,如果循环往复,直到循环体表达式的值为false为止。
    在这里插入图片描述

四、数组

1. 一维数组

1.1 一维数组的基本概念
  • 当需要在Java程序中记录单个数据内容时,则声明一个变量即可。
  • 当需要在Java程序中记录多个类型相同的数据内容时,则声明一个一维数组即可,一维数组本质上就是在内存空间中申请一段连续的存储单元。
  • 数组是相同数据类型的多个元素的容器,元素按线性顺序排列,在Java语言中体现为一种引用数据类型。
1.2 一维数组的声明方式
  • 数据类型[] 数组名称 = new 数组类型[数组的长度];

  • 调用数组的length属性可以获取数组的长度;

  • 可以通过下标的方式访问数组中的每一个元素。需要注意的是:数组的下标从0开始,对于长度为n的数组,下标的范围是0~n-1。

  • 基本类型的数组(数据元素为基本类型)创建后,其元素的初始值:byte、short、char、int、long为0;float和double为0.0;boolean为false

  • 可以在数组声明的同时进行初始化,具体如下:

    数据类型[] 数组名称 = {初始值1,初始值2,…};

1.3 数组的优缺点
  • 可以直接通过下标(索引)的方式访问指定位置的元素,速度很快。
  • 数组要求元素的类型相同。
  • 数组要求内存空间连续,并且长度一旦确定就不能修改。
  • 增加和删除元素时可能移动大量元素,效率低。

2. 二维数组

2.1二维数组的概念
  • 二维数组本质上就是由多个一维数组摞在一起组成的数组,二维数组中的每个元素都是一维数组,而一维数组中的每个元素才是数据内容。
2.2 二维数组的声明和初始化方式
  • 数据类型【】【】 数组名称 = new 数据类型【行数】【行数】
  • 数据类型【】【】 数组名称 = {{元素1,元素2,…} , …}

3. 数组工具类的概念

  • java.util.Arrays类可以实现对数组中元素的遍历、查找、排序等操作。

  • 数组工具类的常用方法

    方法作用
    static String toString(int[] a)输出数组中的内容
    static void fill(int[] a, int val)将参数指定元素赋值给数组中所有元素
    static blloean equals(boolean[] a, boolean[] a2)判断两个数组元素内容和次序是否相同
    static void sort(int[] a)对数组中的元素进行从小到大的排序
    static int binarySearch(int[] a, int key)从数组中查找参数指定元素所在的位置
2.2 二维数组的声明和初始化方式
  • 数据类型【】【】 数组名称 = new 数据类型【行数】【行数】
  • 数据类型【】【】 数组名称 = {{元素1,元素2,…} , …}

3. 数组工具类的概念

  • java.util.Arrays类可以实现对数组中元素的遍历、查找、排序等操作。

  • 数组工具类的常用方法

    方法作用
    static String toString(int[] a)输出数组中的内容
    static void fill(int[] a, int val)将参数指定元素赋值给数组中所有元素
    static blloean equals(boolean[] a, boolean[] a2)判断两个数组元素内容和次序是否相同
    static void sort(int[] a)对数组中的元素进行从小到大的排序
    static int binarySearch(int[] a, int key)从数组中查找参数指定元素所在的位置
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值