Java学习Day3

函数

函数的重载

在JAVA中,可以在同一个类中存在多个函数,函数名称相同但参数列表不同。这就是函数的重载

抽象理解为:假如你是个木工,我要让你制作桌子(返回值)。然后,我给了你紫檀木,你就可以制作一张紫檀桌子;我给了你黄花梨,你可以做黄花梨的桌子。这些不同材质的木料,就是参数。返回的都是桌子,但是具体使用哪个函数,就根据传入的木料不同来决定的。
所以,可以根据所传递进来的不同参数,决定具体调用哪个函数。提高了函数使用的灵活性。

对于函数:java内部识别时,真正识别的是函数名字+参数类型的列表 例如: sum_int_float
* 函数的重载:在同一个类中,方法名相同,参数不相同的方法的关系
* 注意点:
* 1.参数的个数不同是重载
* 2.参数的类型不同是重载
* 3.参数的位置不同是重载
* 4.重载与返回值无关
* 5.重载与参数的名字无关
* 6.重载的方法本质上还是不同的方法.
* 7.重载的方法,方法名必须相同
* 作用:让一个名字可以有多个功能,最大的作用是用于构造方法.

			//第一个
			//求两个数的和
			public int sum(int a,int b) {//JVM内部识别的真正的函数名:sum_int_int
				return a+b;
			}
			//第二个  跟第一个是同一个函数,因为参数的名字不影响函数的类型
			public int sum(int c,int d) {//JVM内部识别的真正的函数名:sum_int_int
				return c+d;
			}
			//第三个:跟一是重载,参数的个数不同
			public int sum(int a,int b,int c) {//sum_int_int_int
				return a+b;
			}
			//第四个:跟一是重载,参数的类型不同
			public float sum(int a,float b) {
				return a+b;
			}
			//第五个:跟一不是重载,他的方法名和参数的类型都相同,但是返回值不同,所以叫错误
			public float sum(int a,int b) {
				return a+b;
			}
			
			//第六个:跟五和一都是重载,跟五的参数的位置不同,跟一参数类型不同
			public float sum(float a,int b) {
				return a+b;
			}

调用实例

public class Demo2 {

	public static void main(String[] args) {
		test1();
		}
		static void test1() {
			test2();
			System.out.print("a");
		}
		static void test2() {
			System.out.print("b");
			test5();
		}
		static void test3() {
			System.out.print("d");
			test4();
		}
		static void test4() {
			System.out.print("e");
		}
		static void test5() {
			test3();
			System.out.print("c");
		}
	}
//输出结果:bdeca

数组

一维数组

  • 数组:是用来存储数据的
  • 定义:可以同时存储多个相同类型的数据,它是引用数据类型.
  • 数组是被放在堆区的.有默认值.
    构成:new + 数据类型 + [元素的个数]
    \\\\\\\ int[] arr = new int[3];
    new :在堆内开辟空间,将数组的地址返回
    int代表元素的数据类型
    [3]:代表数据的个数
  • 我们可以通过一个变量保存数组的地址,这个变量的类型是int型的数组类型.
  • 注意:int+[]是一个整体,代表一种数据类型,不能拆开.[]中也不能写数.
  • 注意:数组的内存空间是连续的,并且空间创建之后是固定的.

比较简单数据类型和引用数据类型?

  • 1.引用数据类型里面存储的是地址,并且这个地址是十六进制的数.简单数据类型存储的是值,是十进制的
    2.对于简单数据类型,直接在栈区的方法中开辟一块空间存储当前的变量,将要存储的数据直接放在这块空间里。

arr[0] = 3;
arr[1] = 4;
arr[2] = 5;

// 取值,赋值
// 存取值:根据下标存值
// 数组名[下标]
// 解释:先拿arr中保存的地址找到数组,然后再根据下标找到具体的元素,完成赋值或取值

异常处理System.out.println(arr[6]);
在这里插入图片描述
// 异常:是JAVA对程序出现的不正常情况的封装处理,得到的各种类
// 异常可以帮助我们更好的对错误进行查找,处理,改正
// 在打印的异常信息中包含异常的名字、原因、位置
// 名字 java.lang.ArrayIndexOutOfBoundsException:数组越界异常
// 原因:6,下标6超越了界限
// 位置:at com.git.Day5.Demo3.main(Demo3.java:42)

二维数组

	 * 一维数组:直接存储了一组数的数组
	 * 二维数组:直接存储的是多个一维数组(的地址)的数组
	 * 
	 * 数组的空间都是连续的,并且是固定的.
	 */
	
	//创建一维数组
	int[] arr = new int[3];
	//创建二维数组
	//组成:new + 数据类型+[一维数组的个数]+[每个一维数组中元素的个数]
	//注意点:第一个[]中的数不能省,第二个[]中的数可以省略.
	//写了,代表每个一维数组中元素的个数.不过这个数是一个估值.
	int[][] arr1 = new int[2][3];//这里元素是一维数组的地址,所以默认是null
	
	//通过下标存值取值
	arr[0] = 4;
	arr1[0] = new int[3];
	arr1[1] = new int[4];
	
	arr1[0][0] = 5;
	arr1[0][1] = 4;
	arr1[1][0] = 6;
	arr1[1][3] = 8;
	
	//遍历
	for (int i = 0; i < arr1.length; i++) {//获取二维数组的元素---一维数组
		for(int j=0;j<arr1[i].length;j++) {//对当前的一维数组进行遍历
			System.out.println(arr1[i][j]);
		}
	}
	
	//其他创建二维数组的方法
	int[][] arr2 = new int[][] {{2,3},{5,6,7}};
	int[][] arr3 = {{2,3},{5,6,7}};

在这里插入图片描述

遍历数组
// arr.lenth:数组元素的个数
1.使用for循环

		for (int i = 0; i < arr.length; i++) {
			System.out.println("value:"+arr[i]);
		}

2.使用增强for循环

		for(int i:arr) {
			System.out.println("i:"+i);
		}
	 * for(元素: 数组){
	 * 遍历
	 * }
	 * 原理:会自动从数组中取出元素,放入前面的元素中,当次遍历使用的就是这个元素
	 * 当这次遍历结束后,会自动从数组中取出第二个值,再次放入前面的元素(变量)中,依次进行
	 * 直到讲数组中的所有值取完,循环结束
	 */

创建数组的其他方式
1.new int[](这里什么都不写) {数组的元素} 这里的数量就是数组的个数
int[] arr1 =new int[] {3,4,5};

2.简化版
int[] arr2 = {3,4,5};

//可以直接将数组作为参数传递
run(new int[] {3,4,5});

//对于简化版的数组,不能直接当参数
run({3,4,5});

函数和数组的联合应用(值传递和地址传递)

Demo1

	public static void main(String[] args) {
		int[] arr1 = new int[] {3,5,7};
		getMax(arr1[0], arr1[1],arr1[2]);
		getMax(arr1);
		int value1 =  getMax(arr1);
		
		System.out.println(value1);
	}

	public static int getMax(int a,int b,int c) {//值传递:直接将简单数据类型作为参数
		int d = a>b?a:b;
		return d>c?d:c;
	}
	public static int getMax(int[] a) {//地址传递:直接将引用数据类型(地址)作为参数
		int temp =a[0];
		for(int i=1;i<a.length;i++) {
			if (temp<a[i]) {
				temp =a[i];
			}
			
		}return temp;
	}

Demo2

public static void main(String[] args) {
		/*
		 * 值传递:将保存简单数据的变量作为参数传递
		 * 址传递:将保存地址的变量作为参数传递
		 */
			//交换两个数的值
			int[] temp = {3,5};
			
			//地址传递
			jiaohuan(temp);
			System.out.println("temp[0]:"+temp[0]+"   temp[1]:"+temp[1]);//  5   3
			
			//值传递
			int[] temp1 = {3,5};
			jiaohuan(temp1[0], temp1[1]);
			System.out.println("temp1[0]:"+temp1[0]+"   temp1[1]:"+temp1[1]);//  3    5
	}
		//地址传递
		//对于地址传递,外部的函数的内部本质上操作是同一个数组,所以在函数内部进行值的交换,会影响外部值的改变
		public static void jiaohuan(int[] arr) {
			arr[0] = arr[0] ^ arr[1];
			arr[1] = arr[0] ^ arr[1];
			arr[0] = arr[0] ^ arr[1];	
		}
		//值传递
		//对于值传递,仅仅是对变量的值的改变,并没有影响原来的数组,所以原来的数组的值没有发生交换
		public static void jiaohuan(int a,int b) {
			a = a ^ b;
			b = a ^ b;
			a = a ^ b;	
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值