3-函数和数组

1 函数的引入

程序中,相同的功能重复书写,会造成代码冗余和复用性差;开发和维护也很困难。
所以,要把相同的代码抽取出来,放到一个地方。需要使用的时候再去调用,仅传递不同的参数。

1.2 概念和作用

Java中的函数,也叫方法。是一段独立的代码块,直接写在类的,里面的代码实现独立的功能。
作用是解决代码的复用性差的问题。

函数应该一个函数就一个功能,main函数只写功能的调用。

1.3 格式

	public static void main(String[] args) {
		功能代码;
		return 返回的数据;
	}

修饰符:
public,private,protect,(空)
static

返回值类型:
void,表示函数不需要返回结果时的函数的返回值类型
。。。

方法名:(自定义)
参数列表:
代码范围:{}

所有函数都是通过return结束运行的。如果函数返回值类型是void,return可省略,但是编译器会帮我们加上。

2 函数使用

2.1 函数的声明

声明一个函数,需要先明确两个东西:

函数的返回值类型;
函数的参数列表

2.2 函数执行内存

  1. 启动java虚拟机,加载xx.class到内存中,然后开始执行main方法
  2. 函数进入栈内存,叫做压栈(入栈)
  3. 函数离开栈内存,叫做弹栈(出栈)
  4. 正在执行的函数永远是栈顶的函数
  5. 栈内存中的函数有个特点,先进后出
  6. 所以,如果main函数调用另一函数x,则x进到栈顶,等执行完后出栈,main再回到栈顶
  7. main函数出栈,整个程序结束
    具体可参考:https://blog.youkuaiyun.com/weixin_38233274/article/details/80332407

2.3 函数的重载(over lord)

概念:在同一个类中,可以定义多个名称相同、参数列表不同的函数。
参数列表不同可以是:参数的个数不同或者参数的类型不同。如果仅顺序不同不算。

强调:函数的重载,只和函数名以及参数列表有关系,和函数的返回值类型无关。
调用函数时,通过函数名和参数列表共同确定一个函数

好处:类似的功能写成重载,需要记忆的函数名大大降低,提高开发效率。

3 数组

3.1 概念和格式

数组,是容器,只能存放相同类型的数据。
数组有容量大小,使用length属性可以获取。
数组创建后容量大小固定不变。

格式
1、数据类型 [ ] 数组名 = new 数据类型 [ 容量 ];
2、数据类型 [ ] 数组名 = new 数据类型 [ ] {1,2,3};

3.2 数组的索引

数组中存放的数据,就是数组的元素。
每个元素有一个序号(索引、下标、角标),从0开始连续递增,最大值是数组容量减一。数组元素的存取都是通过索引完成。

3.3 数组的内存-引用传递

public class demo3 {
	public static void main(String[] args) {
		//JVM执行时。遇到new关键字,就会去堆内存开辟空间
		int [] arr1 = new int [3];
		int [] arr2 = arr1;
		
		//变量arr1中保存的是内存地址,又叫做堆空间中实体的引用
		System.out.println(arr1);//[I@1db9742
		//可以看到arr1和arr2保存的地址相同,所以两个数组会指向同一个地址
		System.out.println(arr2);//[I@1db9742
		
		arr1[1] = 2;
		arr2[1] = 0;
		//当arr2的值发生改变,arr1也跟着变化
		System.out.println(arr1[1]);//0
		
	}
}
//当堆内存中的实体不被任何变量引用时,就会变成垃圾空间,等待java的垃圾回收机制回收,然后释放空间

引用类型的变量进行传参,实际上传递的是保存在变量中指向堆中空间的地址,这种传参情况叫做引用传递;
如果一个引用改变了空间中的值,对所有指向这个空间的引用都有影响;
基本类型的变量进行传参,实际传递的是保存在变量中的常量值,是值传递。
详细可参考:https://blog.youkuaiyun.com/u013309870/article/details/75499175

4 数组应用

4.1 求最大值

	public static int max(int []arr){
		int max = arr[0];
		for(int i = 1;i < arr.length;i++){
			if(max < arr[i]){
				max = arr[i];
			}
		}
		return max;
	}

4.2 排序

	public static void sort(int [] x)
	//封装函数,给定参数(自变量):将主函数的arr数组赋值给x。此处x仅在本函数内使用
	//冒泡算法排序
	{
		int a=x.length-1;//确定比较轮数
		for (int i=0;i<a ;i++ )//内循环继续循环,以保证从小到大。这样冒泡效率不高
		{
			for (int j=0;j<a ;j++ )
			//条件如果改成(int j=0;j<a-i ;j++ ),可以减少无用功。
			//和选择排序基本一致,不同在于选择先确定最小,从左向右,而这样恰恰相反
			{
				if (x[j]>x[j+1])//遍历元素和右边的比较大小,如果大则冒泡向右
				{
					int temp=x[j+1];
					x[j+1]=x[j];
					x[j]=temp;
				}
			}
		}
		
	}

4.3 平均值

		int [][] arr = {{2,4},{7,2,3},{5,8,2,1}};
		double sum = 0;
		int divisor = 0;
		for(int [] a : arr)
		{
			for (int b : a)
			{
				sum = sum + b;
				divisor++;
			}
		}
		System.out.println(sum/divisor);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值