语言:人与人交流沟通的表达方式
计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言
Java语言是美国Sun公司(Stanford University Network)在1995年推出的计算机语言
Java之父:詹姆斯·高斯林(James Gosling)
2009年,Sun公司被甲骨文公司收购,所以我们现在访问oracle官网即可:
当前,我们课程使用的JDK版本:11.0
1.4.1 下载
1.4.2 安装
1.4.3 JDK的安装目录介绍
2.2.1 为什么配置环境变量
开发Java程序,需要使用JDK提供的开发工具(比如、等命令),而这些工具在JDK的安装目录的 bin目录下,如果不配置环境变量,那么这些命令只可以在该目录下执行。我们不可能把所有的java文件都放到JDK的bin目录下,所以配置环境变量的作用就是可以使bin目录下的java相关命令可以在任意目录下使用。
2.2.2 配置环境变量步骤



如果命令提示符窗口是配合环境变量前打开的,需要关闭该窗口,重新打开一个窗口测试
HelloWorld案例是指在计算机屏幕上输出“HelloWorld”这行文字。各种计算机语言都习惯使用该案例作为第一个演示案例。
2.3.1 Java程序开发运行流程
开发Java程序,需要三个步骤:编写程序,编译程序,运行程序。
2.3.2 HelloWorld案例的编写
讯享网
2.3.3 HelloWorld案例的编译和运行
存文件,打开命令行窗口,将目录切换至java文件所在目录,编译java文件生成class文件,运行class文件。
2.4.1 BUG
在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题统称为bug(漏洞)。
2.4.2 BUG的解决
2.4.3 HelloWorld案例常见问题
2.5.1 什么要使用Notepad++软件
Notepad++功能比windows中的自带记事本功能强大,除了可以用来制作一般的纯文字说明文件,也十分适合编写计算机程序代码。Notepad++有行号,能够快速定位问题位置,还有语法高亮度显示、代码折叠等功能。而且它是免费的。
2.5.2 Notepad++软件安装
安装:傻瓜式安装,一直下一步即可。建议也安装到统一的开发软件目录下,比如E:develop。
2.5.3Notepad++软件配置
讯享网
多行注释。多行注释的格式是使用/* 和 */将一段较长的注释括起来。
注意:多行注释不能嵌套使用。
文档注释。文档注释以 / 开始,以 */ 结束。(以后讲)
讯享网
3.4.1 计算机存储单元
3.4.2 Java中的数据类型
3.5.1 变量的定义
或者
还可以在同一行定义多个同一种数据类型的变量,中间使用逗号隔开。但不建议使用这种方式,降低程序的可读性。
变量的使用:通过变量名访问即可。
3.5.2 使用变量时的注意事项
- 在同一对花括号中,变量名不能重复。
- 变量在使用之前,必须初始化(赋值)。
- 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。
- 定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容。
3.6 标识符
3.7 类型转换
讯享网

说明:
- char类型的数据转换为int类型是按照码表中对应的int值进行计算的。比如在ASCII码表中,'a’对应97。
讯享网
- 整数默认是int类型,byte、short和char类型数据参与运算均会自动转换为int类型。
- boolean类型不能与其他基本数据类型相互转换。
4.1.1 运算符和表达式
讯享网
4.1.2 算术运算符
4.1.3 字符的“+”操作
讯享网
tips:正是由于上述原因,所以在程序开发中我们很少使用byte或者short类型定义整数。也很少会使用char类型定义字符,而使用字符串类型,更不会使用char类型做算术运算。
4.1.4 字符串的“+”操作
当“+”操作中出现字符串时,这个”+”是字符串连接符,而不是算术运算。
讯享网
在”+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算。当连续进行“+”操作时,从左到右逐个执行。
赋值运算符的作用是将一个表达式的值赋给左边,左边必须是可修改的,不能是常量。
讯享网
练习:
讯享网
注意:通过此练习深刻理解自增和自减的规律,但实际开发中强烈建议不要写这样的代码!小心挨打!
关系运算符有6种关系,分别为小于、小于等于、大于、等于、大于等于、不等于。
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。
讯享网
短路逻辑运算符
- 逻辑与&,无论左边真假,右边都要执行。
- 短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。
- 逻辑或|,无论左边真假,右边都要执行。
- 短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。
三元运算符语法格式:
关系表达式 ? 表达式1 : 表达式2;
讯享网
2、需求:一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,请用程序实现获取这三个和尚的最高身高。
讯享网
import ;
2、创建Scanner对象。
Scanner sc = new Scanner();// 创建Scanner对象,sc表示变量名,其他均不可变
3、接收数据
int i = (); // 表示将键盘录入的值作为int数返回。
示例:
改写三个和尚案例,数据使用键盘录入。
讯享网
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。
6.3.1 if语句格式1

示例:
6.3.2 if语句格式2
执行流程:
- 首先计算关系表达式的值
- 如果关系表达式的值为true就执行语句体1
- 如果关系表达式的值为false就执行语句体2
- 继续执行后面的语句内容

示例:
讯享网
- 为了体现任意给出一个整数,采用键盘录入一个数据
- 判断整数是偶数还是奇数要分两种情况进行判断,使用if…else结构
- 判断是否偶数需要使用取余运算符实现该功能 number % 2 == 0
- 根据判定情况,在控制台输出对应的内容
6.3.3 if语句格式3
执行流程:
- 首先计算关系表达式1的值
- 如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
- 如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
- …
- 如果没有任何关系表达式为true,就执行语句体n+1。
讯享网
- 小明的考试成绩未知,可以使用键盘录入的方式获取值
- 由于奖励种类较多,属于多种判断,采用if…else…if格式实现
- 为每种判断设置对应的条件
- 为每种判断设置对应的奖励
格式
讯享网
格式说明:
- 表达式:取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String。
- case:后面跟的是要和表达式进行比较的值。
- break:表示中断,结束的意思,用来结束switch语句。
- default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
执行流程:
- 首先计算出表达式的值
- 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。
- 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
- 需求:一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。
- 运行结果:
- 示例代码:
讯享网
- 注意:如果switch中得case,没有对应break的话,则会出现case穿透的现象。
- 循环:
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形 成死循环。
- for循环格式:
- 格式解释:
- 初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样
- 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去
- 循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情
- 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去
- 执行流程:
①执行初始化语句
②执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续
讯享网
- 需求:在控制台输出1-5和5-1的数据
- 示例代码:
- 需求:求1-5之间的数据和,并把求和结果在控制台输出
- 示例代码:
讯享网
- 本题要点:
- 今后遇到的需求中,如果带有求和二字,请立即联想到求和变量
- 求和变量的定义位置,必须在循环外部,如果在循环内部则计算出的数据将是错误的
- 需求:求1-100之间的偶数和,并把求和结果在控制台输出 }
- 示例代码:
- 需求:在控制台输出所有的“水仙花数”
- 解释:什么是水仙花数?
- 水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数
- 例如
- 水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数
- 思路:
- 获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,使用for循环获取
- 获取每一个三位数的个位,十位,百位,做if语句判断是否是水仙花数
- 示例代码
讯享网
- 需求:统计“水仙花数”一共有多少个,并在控制台输出个数
- 示例代码:
- 本题要点:
- 今后如果需求带有统计xxx,请先想到计数器变量
- 计数器变量定义的位置,必须在循环外部
- while循环完整格式:
讯享网
- while循环执行流程:
①执行初始化语句
②执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续
- 示例代码:
- 需求:世界最高山峰是珠穆朗玛峰(8844.43米=毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
- 示例代码:
讯享网
- 完整格式:
- 执行流程:
① 执行初始化语句
② 执行循环体语句
③ 执行条件控制语句
④ 执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
⑤ 回到②继续
- 示例代码:
讯享网
- 三种循环的区别
- for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
- do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
- for循环和while的区别
- 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
- 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
- 死循环(无限循环)的三种格式
- for(;; ){}
- while(true){}
- do {} while(true);
- 跳转控制语句(break)
- 跳出循环,结束循环
- 跳转控制语句(continue)
- 跳过本次循环,继续下次循环
- 注意: continue只能在循环中进行使用!
- 循环嵌套概述:在循环中,继续定义循环
- 示例代码:
- 理解:
- 请反复理解这句话(整个内循环,就是外循环的一个循环体,内部循环体没有执行完毕,外循环是不会继续向下执行的)
- 结论:
- 外循环执行一次,内循环执行一圈
- 概述:
- Random类似Scanner,也是Java提供好的API,内部提供了产生随机数的功能
- API后续课程详细讲解,现在可以简单理解为Java已经写好的代码
- Random类似Scanner,也是Java提供好的API,内部提供了产生随机数的功能
- 使用步骤:
- 导入包
import ;
- 创建对象
Random r = new Random();
- 产生随机数
int num = (10);
解释: 10代表的是一个范围,如果括号写10,产生的随机数就是0-9,括号写20,参数的随机数则是0-19
- 导入包
- 示例代码:
讯享网
- 需求:
程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?
当猜错的时候根据不同情况给出相应的提示
A. 如果猜的数字比真实数字大,提示你猜的数据大了
B. 如果猜的数字比真实数字小,提示你猜的数据小了
C. 如果猜的数字与真实数字相等,提示恭喜你猜中了
- 示例代码:
数组(array)是一种用于存储多个相同类型数据的存储模型
13.2.1 第一种
数据类型[] 数组名
示例:
讯享网
定义了一个int类型的数组,数组名是arr
13.2.2 第二种(不推荐)
数据类型 数组名[]
示例:
定义了一个int类型的变量,变量名是arr数组

13.3.1 什么是动态初始化
数组动态初始化就是只给定数组的长度,由系统给出默认初始化值
13.3.2 动态初始化格式
讯享网
13.3.3动态初始化格式详解
- 等号左边:
- int:数组的数据类型
- []:代表这是一个数组
- arr:代表数组的名称
- 等号右边:
- new:为数组开辟内存空间
- int:数组的数据类型
- []:代表这是一个数组
- 3:代表数组的长度
13.4.1 什么是索引
每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。
这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
13.4.2 访问数组元素格式
讯享网
13.4.3 示例代码
13.5.1 内存概述
内存是计算机中的重要原件,临时存储区域,作用是运行程序。
我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。
必须放进内存中才能运行,运行完毕后会清空内存。
Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
13.5.2 java中的内存分配
- 目前我们只需要记住两个内存,分别是:栈内存和堆内存



13.9.1 什么是静态初始化
在创建数组时,直接将元素确定
13.9.2 静态初始化格式
- 完整版格式
讯享网
- 简化版格式
13.9.3 示例代码
讯享网
13.10.1 索引越界异常
- 出现原因
数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。
程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
- 解决方案
将错误的索引修改为正确的索引范围即可!
13.10.2 空指针异常
- 出现原因
讯享网
arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
- 解决方案
给数组一个真正的堆内存空间引用即可!
- 数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。
以上代码是可以将数组中每个元素全部遍历出来,但是如果数组元素非常多,这种写法肯定不行,因此我们需要改造成循环的写法。数组的索引是 0 到 lenght-1 ,可以作为循环的条件出现。
讯享网
- 最大值获取:从数组的所有元素中找出最大值。
- 实现思路:
- 定义变量,保存数组0索引上的元素
- 遍历数组,获取出数组中的每个元素
- 将遍历到的元素和保存数组0索引上值的变量进行比较
- 如果数组元素的值大于了变量的值,变量记录住新的值
- 数组循环遍历结束,变量保存的就是数组中的最大值
- 代码实现:
- 注意:
- 方法必须先创建才可以使用,该过程成为方法定义
- 方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用
14.2.1 无参数方法定义和调用
- 定义格式:
讯享网
- 范例:
- 调用格式:
讯享网
- 范例:
- 注意:
方法必须先定义,后调用,否则程序将报错
14.2.2 方法调用过程图解

- 总结:每个方法在被调用执行的时候,都会进入栈内存,并且拥有自己独立的内存空间,方法内部代码调用完毕之后,会从栈内存中弹栈消失。
14.2.3 无参数方法的练习
- 需求:设计一个方法用于打印两个数中的较大数
- 思路:
- ①定义一个方法,用于打印两个数字中的较大数,例如getMax()
- ②方法中定义两个变量,用于保存两个数字
- ③使用分支语句分两种情况对两个数字的大小关系进行处理
- ④在main()方法中调用定义好的方法
- 代码:
讯享网
14.3.1 带参数方法定义和调用
- 定义格式:
参数:由数据类型和变量名组成 - 数据类型 变量名
参数范例:int a
- 范例:
讯享网
- 注意:
- 调用格式:
讯享网
- 范例:
- 方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将报错
14.3.2 形参和实参
- 形参:方法定义中的参数
等同于变量定义格式,例如:int number
- 实参:方法调用中的参数
等同于使用变量或常量,例如: 10 number
14.3.3 带参数方法练习
- 需求:设计一个方法用于打印两个数中的较大数,数据来自于方法参数 }
- 思路:
- ①定义一个方法,用于打印两个数字中的较大数,例如getMax()
- ②为方法定义两个参数,用于接收两个数字
- ③使用分支语句分两种情况对两个数字的大小关系进行处理
- ④在main()方法中调用定义好的方法(使用常量)
- ⑤在main()方法中调用定义好的方法(使用变量)
- 代码:
讯享网
14.4.1 带返回值方法定义和调用
- 定义格式
- 范例
讯享网
- 注意:
<ul><li>方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错</li></ul>
讯享网
- 注意:
讯享网<ul><li>方法的返回值通常会使用变量接收,否则该返回值将无意义</li></ul>
14.4.2 带返回值方法练习
- 需求:设计一个方法可以获取两个数的较大值,数据来自于参数
- 思路:
- ①定义一个方法,用于获取两个数字中的较大数
- ②使用分支语句分两种情况对两个数字的大小关系进行处理
- ③根据题设分别设置两种情况下对应的返回结果
- ④在main()方法中调用定义好的方法并使用变量保存
- ⑤在main()方法中调用定义好的方法并直接打印结果
- 代码:
14.5.1 方法的注意事项
- 方法不能嵌套定义
- 示例代码:
讯享网
- 示例代码:
- void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据
- 示例代码:
14.5.2 方法的通用格式
- 格式:
讯享网
- 解释:
- public static 修饰符,目前先记住这个格式
返回值类型 方法操作完毕之后返回的数据的数据类型
如果方法操作完毕,没有数据返回,这里写void,而且方法体中一般不写return
方法名 调用方法时候使用的标识
参数 由数据类型和变量名组成,多个参数之间用逗号隔开
方法体 完成功能的代码块
return 如果方法操作完毕,有数据返回,用于把数据返回给调用者
- public static 修饰符,目前先记住这个格式
- 定义方法时,要做到两个明确
- 明确返回值类型:主要是明确方法操作完毕之后是否有数据返回,如果没有,写void;如果有,写对应的数据类型
- 明确参数:主要是明确参数的类型和数量
- 调用方法时的注意:
- void类型的方法,直接调用即可
- 非void类型的方法,推荐用变量接收调用
14.6.1 方法重载
- 方法重载概念
方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
- 多个方法在同一个类中
- 多个方法具有相同的方法名
- 多个方法的参数不相同,类型不同或者数量不同
- 注意:
- 重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式
- 重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载
- 正确范例:
- 错误范例:
讯享网
14.6.2 方法重载练习
- 需求:使用方法重载的思想,设计比较两个整数是否相同的方法,兼容全整数类型(byte,short,int,long)
- 思路:
- ①定义比较两个数字的是否相同的方法compare()方法,参数选择两个int型参数
- ②定义对应的重载方法,变更对应的参数类型,参数变更为两个long型参数
- ③定义所有的重载方法,两个byte类型与两个short类型参数
- ④完成方法的调用,测试运行结果
- 代码:
14.7.1 方法参数传递基本类型
- 测试代码:
讯享网
- 结论:
- 基本数据类型的参数,形式参数的改变,不影响实际参数
- 结论依据:
- 每个方法在栈内存中,都会有独立的栈空间,方法运行结束后就会弹栈消失

14.7.2 方法参数传递引用类型
- 测试代码:
- 结论:
- 对于引用类型的参数,形式参数的改变,影响实际参数的值
- 结论依据:
- 引用数据类型的传参,传入的是地址值,内存中会造成两个引用指向同一个内存的效果,所以即使方法弹栈,堆内存中的数据也已经是改变后的结果

14.7.3 数组遍历
- 需求:设计一个方法用于数组遍历,要求遍历的结果是在一行上的。例如:[11, 22, 33, 44, 55]
- 思路:
- ①因为要求结果在一行上输出,所以这里需要在学习一个新的输出语句(“内容”);
(“内容”); 输出内容并换行
(“内容”); 输出内容不换行
(); 起到换行的作用
- ②定义一个数组,用静态初始化完成数组元素初始化
- ③定义一个方法,用数组遍历通用格式对数组进行遍历
- ④用新的输出语句修改遍历操作
- ⑤调用遍历方法
- ①因为要求结果在一行上输出,所以这里需要在学习一个新的输出语句(“内容”);
- 代码:
讯享网
14.7.4 数组最大值
- 需求:设计一个方法用于获取数组中元素的最大值
- 思路:
- ①定义一个数组,用静态初始化完成数组元素初始化
- ②定义一个方法,用来获取数组中的最大值,最值的认知和讲解我们在数组中已经讲解过了
- ③调用获取最大值方法,用变量接收返回结果
- ④把结果输出在控制台
- 代码:
是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
- 如何加断点
- 选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可

- 如何运行加了断点的程序
- 在代码区域右键Debug执行

- 看哪里
- 看Debugger窗口

- 看Console窗口

- 点哪里
- 点Step Into (F7)这个箭头,也可以直接按F7

- 如何删除断点
- 选择要删除的断点,单击鼠标左键即可

- 如果是多个断点,可以每一个再点击一次。也可以一次性全部删除

16.1.1 案例需求
16.1.2 代码实现
讯享网
16.2.1 案例需求
16.2.2 代码实现
16.3.1 案例需求
16.3.2 代码实现
讯享网
16.4.1 案例需求
16.4.2 代码实现
16.5.1 案例需求
16.5.2 代码实现
讯享网
16.6.1 案例需求
16.6.2 代码实现
16.7.1 案例需求
定义一个方法,用于比较两个数组的内容是否相同
16.7.2 代码实现
讯享网
16.8.1 案例需求
已知一个数组 arr = {19, 28, 37, 46, 50}; 键盘录入一个数据,查找该数据在数组中的索引。
并在控制台输出找到的索引值。如果没有查找到,则输出-1
16.8.2 代码实现
16.9.1 案例需求
16.9.2 代码实现
讯享网









版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/208121.html