一 方法
二 数组
一 方法:
将一个独立的代码块{}抽取出来并为当前这个起名字!
作用:提高代码的复用性
1.方法的概念:
使用{}将代码包裹起来,并给这个代码起一个名字:方法名---->以后直接使用方法名调用. {}代码块
如何定义方法?
两种:
有返回值类型的方法的定义
没有返回值类型的方法定义
a.第一种:有返回值类型的方法的定义
固定格式:
public static 返回值类型 方法名(形式参数类型1 参数名称1,形式参数类型2 参数名称2...){
业务需求...
return 结果;
}
格式的详细介绍:
权限修饰符:public(公共的,访问权限足够大) static(静态)
返回值类型:数据类型(目前基本数据类型:四类八种: )
举例:求两个数据之后 结果:int类型
a… 方法名:遵循标识符的规则(见名知意)
单个单词:全部小写
多个单独:第一个单词小写,从第二个单词开始,每个单词首字母大写,其余小写
小驼峰命名法!
形式参数类型:数据类型(目前基本数据类型:四类八种: )
参数名称:变量名称
return: 这个方法调用完毕了,带回具体的结果!
有返回值类型的方法调用:
1)单独调用(没有意义)
2)输出调用:不推荐
3)赋值调用:推荐
a…定义有具体返回值类型的方法的定义的注意事项!
1)方法和方法平级关系,不能嵌套使用!
特殊:方法递归(IO流后面讲):方法调用方法本身的一种现象!
2)定义方法注意两个明确
明确返回值类型
明确参数类型以及参数个数
3)定义方法的时候:
参数类型必须携带的!
public static int add(x,y){} 错误的:
因为Java是一种强类型语言:语法非常严谨的,以及格式是有要求的!
4)定义方法的时候,()后面不要出现; (目前来说没意义的方法!)
5)调用方法的时候,实际参数不需要携带数据类型
b.第二种:没有具体返回值类型的方法 定义以及调用?
方法定义:
public static 返回值类型 方法名(形式参数列表(包含数据类型+变量名)...){
要么 return 结果;
要么没有具体结果;
}
Java的语法:
方法本身的定义:需要返回值类型,但是如果需求本身就没有具体返回结果,如何定义方法呢?
语法要求:如果没有具体返回值结果,使用void 来代替 返回值类型(位置)
注意:Java中不存在void类型(替代词)
没有具体返回值类型的方法的定义格式:
public static void 方法名(形式参数类型1 变量名1,形式参数类型2 变量名2...){
直接输出语句或者其他业务操作;
}
没有具体返回值类型的方法调用
单独调用
赋值调用
输出调用
b…法的定义要遵循标识符的规则:见名知意!
目前这个方法的功能都是求和,如果一些方法的功能相同的,那么定义方法的时候:见名知意!
方法名可以不可以相同呢?
可以!
技术:方法重载 (overLoad)
方法名相同,参数列表不同,与返回值无关!
参数列表不同:
1)数据类型一样的,参数个数不同
2)参数个数一样,类型不同!
参数个数不一样,参数类型不同
二 数组: 引用数据类型
数组:是可以存储元素的一种容器!
前提:元素的数据类型必须一致的!
如何定义呢?
格式:
数据类型[] 数组名称 ;
数据类型 数组名称[] ;
举例:
int[] arr; (习惯于第一种) 定义了一个int类型数组arr变量
int arr[] ;定义了一个int类型的arr数组
a.数组的初始化:
1)动态初始化:指定了数组长度,系统默认给定数组的元素值!
2)静态初始化:指定了具体的元素的内容,系统默认指定数组的长度!
1..动态初始化:
数据类型[] 数组名称 = new 数据类型[数组长度] ;
数据类型 数组名称[] = new 数据类型[数组长度] ;
举例:
int[] arr = new int[3] ; //创建了一个数组对象,分配3个长度
= 左边 int :表示当前数组是int类型;限定了元素的类型int;
System.out.println(arr); DOS命令输出[I@6d06d69c
[ : 表示一维数组 I :表示int 类型 @ : 表示地址值标记 6d06d69c 十六进制数据
[] :是一个一维数组
arr:变量名称(数组对象名称)
=右边 new :表示在内存中创建一个对象
int :数据类型int类型;
[] : 一维数组
3 :在内存中指定3个长度(意味着:有3个元素)
int arr[] = new int[2] ;//.创建了一个数组对象,分配2个长度
数组中元素的的访问方式:
数组名称[角标]来访问
角标(下标/索引):都是从0开始记录元素的!
2..静态初始化 :指定数组的元素内容,系统给它默认长度
格式:
标准格式:
数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3....} ;
数据类型 数组名称[] = new 数据类型[]{元素1,元素2,元素3....} ;
举例:
int[] arr = new int[]{11,22,33} ;
简化格式:
数据类型[] 数组名称 ={元素1,元素2,元素3....} ;
数据类型 数组名称[] ={元素1,元素2,元素3....} ;
举例:
定义数组的时候:不能动,静集合(只能其中一种初始化方式!)
int[] arr = new int[3]{1,2,3} ; //错误的!
简化格式举例:
int[] arr = {1,2,3} ;
b.异常: 后期Throwable:异常的总称
程序出问题了!
严重问题:
error : 内存异常了 (通过一些第三方工具避免了!)
举例: 一些软件通过一些特殊的操作:造成软件崩溃了!
异常:
Exception: 能够通过本身代码来解决问题
编译时期异常:只要不是运行时期的异常都属于编译时期(不解决,编译通过不了)
RuntimeExcetion:运行时期异常
在执行过程中,由于代码结构不严谨,导致的问题!
第一个异常:数组角标越界!
java.lang.ArrayIndexOutOfBoundsException:
出现的原因:访问不存在的角标!就出异常了
解决方案:改动角标值即可!
第二个异常:空指针异常:
java.lang.NullPointerException:
出现的原因:
某个对象都为null,还需要使用对象访问内容或者调用其他功能!
解决方案:
只需要对某个对象做一个非空判断!(逻辑判断)
c.数组的第二个应用:
最值问题;
最大值/最小值
int[] arr = {13,87,65,24,57} ;
最值问题
分析:假设思想
1)将数组中第一个元素arr[0]看为最大值
2)从角标1开始遍历其他元素
2.1)分别将当前遍历的元素依次和最大值进行比较
如果当前元素大于最大值
将当前元素内容赋值max变量
d.数组的应用:
数组的元素逆序
int[] arr = {13,87,65,24,57} ;
中心思想:
将13 arr[0]--57 arr[arr.length-1]互换
将87 arr[1]---24 arr[arr.length-1-1]互换...
保证 数组的长度/2
e.数组元素查表法
数组名称[index:角标]访问元素
假设:
字符串数组: 数据类型[] 数组名称 = new 数据类型[]{元素1,....} ;
String[] strs = {"星期一","星期二",
"星期三","星期四","星期五","星期六","星期天"} ;
f.冒泡排序思想
两两比较,将较大的值往后放;第一次比较完毕,最大值就出现在最大索引处!
依次这样比较:
规律:
第一次:有0个不比
第二次:有1个不比
...
...
比较的次数:数组长度-1次
三. 二维数组(了解):
二位数组就是一个包含多个一维数组的数组!
举例:
Java基础班(将一个班级看一个数组)
JavaEE2008 JavaEE2007 JavaEE2006
二维数数组的定义格式:
数据类型[] 数组名称[] ;
数据类型[][] 数组名称 ; (推荐)
二维数组的初始化:
动态初始化: 指定数组长度,系统给数组中元素分配默认值
a.动态初始化格式1
数据类型[][] 数组名称 = new 数据类型[m][n] ;
m:表示当前二维数组中的一维数组的个数
n:表示每一个一维数组的长度
int[][] arr = new int[3][2] ;
int[] arr[] = new int[3][2] ;
b.维数组格式2:
数据类型[][] 数组名称 = new 数据类型[m][] ;
数据类型[] 数组名称[] = new 数据类型[m][] ;
举例
int[] arr[] = new int[2][] ;
//上面:当前二维arr中有2个一维数组,但是不知道2个一维数组的长度
//所以,需要动态给定一维数组的长度
注意:
int x,y[] ; //x是普通遍历,y是一维数组
int x[][],y[] ;//x是二维数组,y是一个维数组!
c.二维数组格式3
标准格式:
数据类型[][] 数组名称 = new 数据类型[][]{{元素1,元素2,...},{元素1,元素2...},{元素1,元素2...}};
简化格式:
数据类型[][] 数组名称 = {{元素1,元素2,...},{元素1,元素2...},{元素1,元素2...}}
//错误的书写格式:
//要么动态初始化/要么静态初始化
int[][] arr = new int[3][2]{{1,2,3},{4,5,6}}
二维数组的应用:
如何遍历呢?
二维数组是由多个一维数组组成
需要将每一个一维数组的元素获取到,一一输出
输出格式优雅:
{{1,2,3},{4,5,6},{7,8,9}}
二维数组的应用:杨辉三角形
输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
分析:
1)行数和列数:都是6 ----->数据可以采用键盘录入!
二维数组的定义格式:
格式1:int[][] arr = new int[num][num] ;
2)任何一行的第一列和最后一列都是1
3)从第三行开始,中间的数据的值等于上一行的前一列+上一行的本列之和
键盘录入一个数据:使用二维数组初始化
外层循环:行数
内层循环:列数
int[][] arr = new int[n][n] ;
给二维数组中的数据赋值(给任何的一列和最后一列赋值) .将定义二维数组遍历
for(int x =0 ; x < arr.length ; x ++){
任何一行的第一列和最后一列都是1
}
再次遍历二维数组
从第三行开始,中间的数据的值等于上一行的前一列+上一行的本列之和要符合99乘法表的格式