🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# :-: Java基本语法 [TOC] # 1.函数 ## 1.1.函数的引入 * 循环练习: 需求:获取1-100之间6的倍数的个数。 分析: 1、个数是未知的,所以定义变量。 2、6的倍数咋表示?只要是对6能整除,也就是没有余数。 3、需要对1-100之间所以的数都要进行判断是不是6的倍数。如果是,需要对个数变量进行自增。 4、怎么完成1-100之间呢?使用循环。 ![](https://box.kancloud.cn/4b7dc8b99d3c4e49b639df2e5d9b67a3_895x381.png) * 在实际开发中,类似的功能很可能经常出现; 很可能又要新的需求:计算1到100之间7的倍数的个数; 计算1到50之间6的倍数的个数; …… 为了解决这个问题,可以使用函数(方法;) ## 1.2.函数的概念 ### 1.2.1.函数的概念 java中的函数,又叫做方法,是定义在类中的一段独立的代码,具有特定功能; ### 1.2.2.函数的作用 函数的作用,就是用来提高程序的复用性(降低程序的冗余性),提高开发效率,降低维护成本的; ##1.3.函数的使用 ###1.3.1.函数的书写格式 书写格式: ``` 修饰符 返回值类型 函数名(数据类型 变量名,数据类型 变量名……){ 具体实现功能的代码(方法体); return 语句; } ``` 格式详解: ![](https://box.kancloud.cn/827886666215797970f2b23cc763d259_1131x538.png) ###1.3.2.函数的声明方式 ![](https://box.kancloud.cn/630f7d045978ba0fd4bf6337c80ced79_584x299.png) 声明函数的方式:两个明确 ![](https://box.kancloud.cn/6c6246022ec5bae17ec438f51b6f43ef_892x678.png) * 结论: 声明函数的过程: 1、搞清楚这个函数的功能; 2、根据函数的格式写出函数的架子(缺少返回值类型和参数列表) 3、根据函数的功能搞定两个明确: (1)明确函数的返回值类型:问:这个功能执行完毕后有没有结果返回? (2)明确函数的参数列表:问:这个功能是否需要调用者传递数据? 4、书写函数的功能代码; ### 1.3.3.函数的调用方式 根据函数名和参数列表来调用; ![](https://box.kancloud.cn/bcaf9f50c2706714712df95a5059bd77_689x362.png) ### 1.3.4.函数执行的过程 ![](https://box.kancloud.cn/8213c68c79bd3eb503db4de61270708e_1196x516.png) ### 1.3.5.函数的声明误区 画蛇添足; ![](https://box.kancloud.cn/6fdc46f87abffd437d432559c8101ef2_682x231.png) 注意: 一个函数一个功能,不要太复杂,都写在一个函数里面;一般一个函数大概二三十行代码;在复杂,就要考虑逻辑上有没有问题; 如果逻辑没有问题,最好将大的功能拆分为多个小的功能,写成多个小的函数,然后通过函数调用实现大的功能; ## 1.4.函数的重载(overload) ### 1.4.1.问题的引入 需求1:计两个整数的和; 需求2:计算三个整数的和 需求3:计算四个整数的和 ![](https://box.kancloud.cn/bc6515c7dc848ff2dbf33d8d92f07461_554x527.png) ### 1.4.2.重载的概念 概念:在Java中,函数的重载,指的是:在同一个类中,允许存在多个函数名相同、参数列表不同的函数;这种情况叫做函数的重载; 函数的重载,和函数的返回值类型无关; 函数的重载,和函数的返回值类型无关; 函数的重载,和函数的返回值类型无关; 参数列表不同,指的是: 参数个数不同; 相同位置的参数的类型不同; ### 1.4.3.重载的好处 使用函数的重载,可以让多个类似功能的函数使用相同的函数名,需要记忆的函数名数量就大大降低,开发者使用起来非常方便; 注意:在类似功能比较多的时候,可以使用函数的重载; ### 1.4.4.重载练习 已知函数: ``` public static int add(int a,char b){} ``` 下列那些函数与之重载? ``` a:public static void add(int b,char a){}:不重载;因为函数名和参数列表都相同; b:public static int add1(int a,char b){}:不重载;因为函数名不同; c:public static void add(int a){}: 重载; d:public static void add(char a,int b){} 重载; e:public static void add(){}: 重载; ``` ## 1.5.函数总结 * 函数的概念:Java中的函数,又叫做方法,指的是定义在类中的一段独立的代码块,可以实现一个具体功能; * 函数的作用:函数通过将一段功能代码抽取出来,在所有需要的地方直接调用的方式,提高程序的复用性; * 函数的格式: ``` 修饰符 返回值类型 函数名(参数列表){ 方法体代码; return 语句; } ``` * 函数声明方法: 根据函数的功能,确定两个明确: * 1、明确函数的参数列表:这个功能需不需要调用者传递数据?如果需要,有多少数据,数据的类型是什么? * 2、明确函数的返回值类型:这个功能结束后,有没有数据需要返回?如果有,返回数据的类型是什么? 1. 函数使用误区: 在一个函数中,只需要书写和这个函数的功能有关的代码,不要书写其它无用代码; 1. 函数的调用: 调用一个函数,需要通过函数名和参数列表共同确认一个函数; 如果需要接收函数结束后返回的数据,需要使用和函数返回值类型一样的变量来接收; 如果一个函数没有数据返回(返回值类型是void),就不能使用变量来接收; 1. 函数的重载: 概念:在同一个类中,允许存在多个函数名相同、参数列表不同的函数,叫做函数的重载; 好处:降低开发者需要记忆的函数名字,提高开发效率; 注意:函数的重载和函数的返回值类型无关,只和函数名和参数列表有关; # 2.数组 ## 2.1.问题引入 需求:计算一个班级100人的考试总分; ![](https://box.kancloud.cn/bb4ca34730ddb858fb9a4e9902112703_678x273.png) ## 2.2.数组的概念 数组,就是一种容器,它可以保存多个相同类型的数据;而且数组一旦创建,容量不能更改 ## 2.3.数组的定义格式 数组使用[] 表示;定义格式是: 数据类型[] 数组名(变量名) = new 数据类型[数组的容量]; ![](https://box.kancloud.cn/47f43f930b5ff17b4bd21e30ca0b49a6_278x80.png) ## 2.4.数组的使用 ### 2.4.1.数组元素的存取&数组的索引 ![](https://box.kancloud.cn/214520f52863646f87e19962fe2040b8_674x290.png) 结论: Java中,数组都具有索引,索引实际上就是数组中每个存储单元的编号; 向数组中保存数据和取出数据,都是通过索引进行的; 索引的特点是: 从0开始,依次递增;最大索引就是数组容量减一; 2.4.2.数组的遍历&数组的length属性 ![](https://box.kancloud.cn/5559131e7ae9605586500dbdbbe7b4c3_635x315.png) 在每个数组中,都有一个length属性,表示数组的容量; 使用方式是: 数组名.length; 注意:因为数组一旦创建,容量就固定不变,所以数组的length属性也不能改变; ![](https://box.kancloud.cn/e79962a0bc30c9fd8cbc83aa2205665b_805x461.png) 2.5.数组的内存原理(了解) 2.5.1.java的内存组成 ![](https://box.kancloud.cn/dcb6881a51c975b868560952cd9d2af2_482x414.png) 2.5.2.数组的内存图解 需求1:画出下面代码执行的内存图解: ``` public static void main(String[] args) { int[] array = new int[3]; array[0] = 10; int a = array[0]; System.out.println(a); System.out.println(array); array = null; System.out.println(array); } ``` 内存图解: ![](https://box.kancloud.cn/f4b729c68c7c9e21f104557eda9af874_1142x466.png) 需求2:下面的代码执行结果是什么?为什么? ``` public static void main(String[] args) { int[] array = new int[3]; int[] arr = array; array[1] = 100; System.out.println(arr[1]); arr[1] = 50; System.out.println(array[1]); } ``` ![](https://box.kancloud.cn/b8d4c63815d1637ab02785ef00ee7703_1031x415.png) ### 2.5.3.引用传递和值传递 ![](https://box.kancloud.cn/e57a0a251e04a67893af057fffe978e5_1140x527.png) 如果是引用类型的变量,那么在变量中保存的是堆内存中的空间地址; 如果是引用类型的变量进行赋值,实际传递的是保存在变量中的地址,像这种传递数据的方式就叫做引用传递; 如果是基本类型的变量进行赋值,实际传递的是保存在变量中的常量值,叫做按值传递; 因为值传递传递的是实际数据,所以不同的基本类型的变量的修改,相互之间没有影响; 应为引用传递传递的是堆内存中的引用地址,所以如果不同的变量保存的是相同的引用地址,那么他们都指向同一块空间;任何一个变量对空间的修改,都已影响其他变量; ## 2.6.数组使用中的常见问题 ### 2.6.1.NullPointerException ### 2.6.2.ArrayIndexOutOfBoundsException ## 2.7.数组的第二种定义格式 数组定义格式: 数据类型[] 数组名 = new 数据类型[数组容量]; 数组名[索引] = 数据; ### 2.7.1.第二种定义格式 如果在定义数组时已经知道数组中会保存什么数据,就可以使用另一种定义方式,在创建数组的同时将数据保存在数组中; 格式: 数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3,数据4……数据n}; 注意:使用这种方式,不能在中括号中写数组的容量; 这种定义格式的简写形式: 数据类型[] 数组名 = {数据1,数据2,数据3,数据4……数据n}; 注意:简写只是为了书写方便,实际上编译器还是会加上new 这一部分; 注意:使用简写形式时,不能将数组变量的声明和赋值写成两行; # 3.方法和数组的练习 ## 3.1.数组平均值: 例子:求下列数字的平均值:1.0,2.4,3.5,4.3,5.1,6.8,7.2,8,9,10 ## 3.2.数组求最大值 例子:求下列数字的最大值:1.0,2.4,3.5,4.3,5.1,6.8,7.2,8,9,10 ## 3.3.将数组中的元素转为指定格式的字符串 例子:给定数组,返回指定格式的字符串;例如:将数组{1,2,3,4}转为字符串:”[1,2,3,4]”; ## 3.4.将数组中元素倒序 例子:数组{1,2,3,4,5}倒序后为{5,4,3,2,1}; ![](https://box.kancloud.cn/c89fd40a9e779380cbb05e469c6905f3_1287x489.png) ## 3.5.数组的查找 ## 3.6.数组的排序 ## 3.7.Arrays数组工具介绍 上面介绍了数组的一些练习,而针对数组的常见操作,Java已经提供好了,并书写在Arrays中。在程序中是可以直接使用的。 ``` public class Demo { public static void main(String[] args) { // 定义数组 int[] arr = { 23, 15, 67, 25, 90, 33 }; // 打印数组 System.out.println( Arrays.toString(arr) ); // 数组排序 Arrays.sort(arr); System.out.println( Arrays.toString(arr) ); } } ``` 程序运行结果: ![](https://box.kancloud.cn/1d69bd991f2cec71e84ec5feac63413b_449x101.png) # 4.二维数组介绍 ## 4.1.什么是二维数组 数组是一种容器,可以保存多个相同类型的数据; 在内存的角度看,数组就是内存中连续在一起的多个存储空间; ![](https://box.kancloud.cn/046a23377d5f5cc0dad09d976bc0902f_591x497.png) 如果一个数组中保存的数据的类型就是数组类型,那么数组中每个存储单元中都保存的是一个其他数组的内存地址; 这种数组的数组就叫做二维数组; ## 4.2.二维数组使用演示 ## 4.2.1.二维数组的格式 int[][] arr = new int[2][3];//表示创建一个二维数组;这个二维数组的每一个元素都是一个一维数组; //上面声明中的数字2表示声明的二维数组的长度是2;3表示二维数组中每个一维数组的长度是3; ![](https://box.kancloud.cn/2ea34f2a460244950e1a8a85982d2ea4_346x251.png) ### 4.2.2.二维数组的使用 ![](https://box.kancloud.cn/348fdf07a08540dd0787904d310c430b_566x423.png) 二维数组的遍历: ![](https://box.kancloud.cn/2928cfcca7838b4906688310a529f7d8_874x490.png) 作业:求下面二维数组的最大值、最小值、和、以及平均值; int[][] a = new int[][]{new int[2],new int[]{2,3,4},{-1,-2,-3,4,5,6,7,8},null}; # 5.数组使用总结 ## 5.1.数组的特点 1、数组是容器,可以保存相同类型的数据; 2、数组是容器,都具有容量,通过length属性获取;一个数组创建完成之后,容量大小不可改变; 3、数组中的元素都具有索引,索引是整数,从0开始,连续递增,最大索引是数组容量减一; ## 5.2.数组使用场景 1、有多个数据要保存,数据类型一样; 2、数据的数量要确定;(如果不确定,就不知道创建多大的数组合适) 如果数据很多,但是数据类型不一样,或者数据总数也不确定;这个时候就要使用新的容器:集合