在这里插入图片描述

一、方法

Java中的方法就是c语言中的函数,就是对一个功能进行打包,每次使用这个功能时就调用这个方法,避免一个代码处处写使代码冗杂。

1.1 方法的定义

1.1.1 定义格式

定义格式如下:

修饰符  返回值 方法名([参数列表]){
	代码块
	[return 返回值;]
}
//方括号[]括起来代表可以没有,不是必须有的

1.1.2 定义注意事项

定义有如下两点注意事项:

  1. 方法名采用小驼峰命名(就是有多个单词,第一个单词首字母小写其余单词首字母大写)。
  2. 方法不能嵌套定义(就是不能在方法中在定义一个方法)。

例如我们定义一个加法函数:

public static int add(int a, int b){
	return a + b;
}

1.2 方法的传参

方法的传参就是根据定义的方法的参数传入对应类型的数据就行。

例如调用上面的加法方法:

int c = add(1,3);

1.2.1 注意事项

在方法中对参数进行改变时,要注意如果参数是基本数据类型,那一般对行参改变并不会影响实参。
例如下面这个函数当传过来实参后实参并不会改变。

public static void change(int a){
	a = 5;
}

1.3 方法的重载(一词多义)

在我们现实调用函数实现加法时,有可能是3个参数相加,那我们又要重新定义一个3个参数的方法并且还不能与上一个加法方法重名。那未免太过繁琐,调用也过于麻烦。

这时在Java中我们可以实行对方法的重载来解决这种情况。
先说重载规则有以下3点:

  1. 函数名必须相同。

  2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)。

  3. 与返回值无关。

那下面来实现加法方法的重载:

public static int add(int a, int b){
	return a + b;
}
public static int add(int a, int b,int c){
	return a + b + c;
}

在调用加法方法时,程序会自己根据你传的参数来判断调用哪一个。

1.4 方法递归调用

方法递归调用就是在函数自己内部在调用自己。但是一定要写好结束条件不然就会一直调用下去,导致栈溢出。

我们举个简单的递归求阶乘:

public static int fac(int n){
	if( n == 1){
		return 1;
	}
	return n * fac(n - 1);
}

二、数组

2.1 一维数组

2.1.1 一维数组的定义

有以下初始化格式:

类型[] 数组名 = {};//在大括号中输入所有数据初始化
类型[] 数组名 = new 类型[]{};//在大括号中输入所有数据初始化
类型[] 数组名 = new 类型[];//在中括号中输入数组大小,这种定义会直接给赋值为类型对应‘0’值

类型对应‘0’值如下

类型默认0值
byte0
short0
int0
long0
float0.0f
double0.0
char/u0000
booleanfalse

2.1.2 一维数组的使用

在c语言中我们要想获得数组长度需要进行计算,但在Java中只需要用数组名.length来就可以求得。

数组的for循环遍历方式有两种

  1. for-i循环遍历,使用下标一个一个遍历。
int[] array = new int[10];
for(int i = 0; i < array.length; i++){
	System.out.print("%d ", array[i]);
}
  1. for-each循环遍历,使用一个临时变量接收数组中的值。
for (int x : array) {
    System.out.println(x);
}

在前面的文章中介绍过数组是引用数据类型,那其实数组并不会像基本数据类型中直接变量在栈开辟一块空间来直接存储值,而是在栈上开辟空间之后存储地址,如下图
在这里插入图片描述

如此在数组作为参数传入方法时,那么实参和形参都指向堆上的同一片空间,对形参操作也会改变实参

2.2 二维数组

2.2.1 二维数组定义方式

二维数组的定义格式有如下3种格式:

类型[][] 数组名 = {{},{}};//中间的大括号不能省略在中间大括号中对对应行进行初始化
类型[][] 数组名 = new 类型[][]{{},{}};//中间的大括号不能省略在中间大括号中对对应行进行初始化
类型[][] 数组名 = new 类型[N][];//行数(N)不能省略,列可以省略

2.2.2 二维数组遍历方式

有如下两种遍历格式:

  1. for-i循环遍历,使用两层循环一个一个下标遍历。
int[][] array = {{1,2,3},{4,5,6}};
for(int i = 0; i < array.length; i++){//array.length求出二维数组的行数
	for(int j = 0; j < array[i].length; i++){//array[i].length求出二维数组当前行的列数
		System.out.print("%d ", array[i][j]);
	}
}
  1. for-each循环遍历,使用一个临时变量接收数组中的值。

for(int[] ret : array){
	for(int x : each){
		System.out.print("%d ", array[i][j]);
	}
}
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐