JAVA-方法(重载)、数组、可变参数的传参与异常处理-学习笔记06

本文详细介绍了Java中的方法,包括方法的声明与调用、分类,如无参无返回值、无参有返回值、有参无返回值和有参有返回值方法。接着讲解了方法的重载概念,并通过实例展示了数组作为方法参数、基本数据类型和数组传参的区别。还探讨了可变参数列表的使用规则和注意事项。最后,讨论了Java中的异常处理,提供了一个输入数组时避免异常的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 什么是方法

  • 举例来说,Scanner是类,sc是对象,nextInt()是方法
Scanner sc = new Scanner(System.in);
sc.nextInt();
sc.next();
  • 主方法也是特殊的方法:
class abc{
	public static void main(String[], args){
		System.out.println("Hello world!");
	}
}

2. 方法的声明与调用

  • 用法:
访问修饰符 返回类型 方法名(参数列表){
	方法体
}
  • 举例,public是访问修饰符,static代表静态方法,void是返回类型,main是方法名,String[] args是参数列表
public static void main(String[], args){
		System.out.println("Hello world!");
	}
  • 返回类型:可以是void或任何数据类型

  • 方法名:命名方法,首字符小写之后单词的首字母得大写,javaMethod

  • main函数调用方法,与同一个类下的两个非main方法相互调用

package aaa.bbb.method;

public class ExchangeDemo {
	public void swap(int a, int b) {
		int temp;
		temp = a; a = b; b = temp;
		System.out.println("Swap successfully");
	}
	
	public void swapTest(){
		int m = 4, n = 5;
		swap(m, n); //不需要重新定义了,可以直接调用
	}
	
	public static void main(String[] args) {
		ExchangeDemo ed = new ExchangeDemo();
		ed.swapTest();
	}
}

3. 方法的分类

  • 方法定义的位置是在类的内部,但是不能嵌套定义

3.1 无参无返回值方法

  • 例子(用void):打印hello word
package aaa.bbb.method;

public class MethodDemo {
	public void printStar() {
		System.out.println("Hello world!");
	}
	
	public static void main(String[] args) {
		//创建一个MethodDemo类的对象myMethodDemo 
		MethodDemo myMethodDemo = new MethodDemo();
		//使用对象名.方法名()去调用方法
		myMethodDemo.printStar();
	}
}

3.2 无参有返回值方法

  • 例子(可以任意指定数据类型,这里是int):矩形面积
package aaa.bbb.method;

public class Rectangle {
	public int area() {
		int leng = 10;
		int width = 5;
		int getArea=leng*width;
		return getArea;
	}
	
	public static void main(String[] args) {
		Rectangle rec = new Rectangle();
		System.out.println(rec.area());
	}
}

3.3 有参无返回值方法

  • 例子:找最大值
package aaa.bbb.method;

public class Max {
	public void max(float a, float b) {
		float max;
		max = a>b?a:b;
		System.out.println("MAX: " + max);
	}
	public static void main(String[] args) {
		float a = 1.0f, b = 2.0f;
		Max max = new Max();
		max.max(a, b=b);
		max.max(1.2f, 2.4f);
	}
}

3.4 有参有返回值方法

  • 例子:求阶乘
package aaa.bbb.method;

public class Factorial {
	public int fac(int n) {
		int s = 1;
		for (int i=1; i<n; i++)
			s *= i;
		return s;
	}
	public static void main(String[] args) {
		Factorial fac = new Factorial();
		System.out.println(fac.fac(5));
	}
}

4. 方法重载

  • 方法名相同,参数列表不同(可以是数量不同也可以是数据类型不同)
  • 举例下面几个都是方法重载
public void hello(){}
public void hello(String s){}
public void hello(int n){}
public void hello(float f1, float f2){}
public int hello(int n){}
  • 举个例子
package aaa.bbb.method;

public class Method {
	public int plus(int m, int n) {
		return m+n;
	}
	public double plus(double m, double n) {
		return m+n;
	}
	public int plus(int[] arr) {
		int sum=0;
		for (int i=0; i<arr.length; i++)
			sum += arr[i];
		return sum;
	}
	public static void main(String[] args) {
		int a = 10, b = 5, arr[]= {1,2,3};
		double d1 = 10.0, d2 = 5.1;
		Method method = new Method();
		System.out.println("int: "+method.plus(a, b));
		System.out.println("arr: "+method.plus(arr));
		System.out.println("double: "+method.plus(d1, d2));
	}
}

5. 特殊参数与传参

5.1 数组作为方法参数

  • 用法Lpublic void printArray(int[] arr){}\
  • 例子:
package aaa.bbb.method;

public class ArrayMethod {
	public void printArray(int[] arr) {
		for(int i=0; i<arr.length; i++)
			System.out.println(arr[i]+" ");
		System.out.println();
	}
	public static void main(String[] args) {
		ArrayMethod arr=new ArrayMethod();
		int[]  a={1, 2, 3};
		arr.printArray(a);
	}
}
  • 练习:查找一个数是不是数组元素
package aaa.bbb.method;

import java.util.Scanner;

public class ArraySearch {
	public boolean search(int n, int[] arr) {
		boolean flag=false; //默认是没找到
		for (int i=0; i<arr.length; i++) {
			if (arr[i]==n) {
				flag = true;
				break;
			}
		}
		return flag;
	}
	public static void main(String[] args) {
		int n, arr[]= {1,2,3,4,5,6,7,8,9,10};
		System.out.print("Input a number: ");
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		ArraySearch arrSrch = new ArraySearch();
		boolean flag;
		flag = arrSrch.search(n, arr);
		System.out.println(flag);
	}
}

5.2 基本数据类型的传参与数组的传参

  • 基本数据类型的值在方法中被改变,是不会影响主方法里的值
  • 数组的值在方法中被改变,会影响主方法里的值
  • 例1:基本数据类型的值在方法中被改变是不会影响主方法里的值得。传递的只是变量的,是局部变量,不会传递变量的地址。
package aaa.bbb.method;

public class ExchangeDemo {
	public void swap(int a, int b) {
		int temp;
		System.out.println("	a: "+a+",b: "+b);
		temp = a; a = b; b = temp;
		System.out.println("	a: "+a+",b: "+b);
	}
	
	public void swapTest(){
		int m = 4, n = 5;
		System.out.println("m: "+m+",n: "+n);
		swap(m, n); 
		System.out.println("m: "+m+",n: "+n);
	}
	
	public static void main(String[] args) {
		ExchangeDemo ed = new ExchangeDemo();
		ed.swapTest();
	}
}

返回

m: 4,n: 5
	a: 4,b: 5
	a: 5,b: 4
m: 4,n: 5

  • 例2:数组的变量存的是第一个数组元素的地址,在传参是也是传递的地址,因此会随着方法中的调用而被改变。
package aaa.bbb.method;

public class ChangeDemo {
	public void printArray(int[] arr){
		for (int i=0; i<arr.length; i++)
			System.out.print(arr[i]+" ");
			System.out.println("");
	}

	public void change(int[] arr) {
		arr[2] = 10;
	}
	
	public void changeArrValue(){
		int[] arr={1, 2, 3, 4, 5};
		System.out.println("Origin arr: ");
		printArray(arr);
		change(arr); 
		System.out.println("Changed arr: ");
		printArray(arr);
	}
	
	public static void main(String[] args) {
		ChangeDemo change = new ChangeDemo();
		change.changeArrValue();
	}
}

返回

Origin arr: 
1 2 3 4 5 
Changed arr: 
1 2 10 4 5 

5.3 可变参数列表

  • 用法:public void sum(int... n){}
  • 注意
    • 当参数列表中有多个参数可变参数一定是放在最后的,如(int n, int... a)

    • 可以传递数组给可变参数

    • 可变参数列表所在的方法是被最后访问的,比如一个方法重载的问题,我们定义了两个方法

      • 第一个:public int plus(int a, int b){}
      • 第二个:public int plus(int... a){}

      当我们用plus(1, 2)来调用的时候,我们主要调用的是第一个方法,而不是第二个

  • 当我们不确定有几个数作为参数的时候,我们可以使用可变参数
  • 举例:用求和来学习可变参数的循环,类似于数组,主要是这句for(int i:n)
package aaa.bbb.method;

public class ArgsDemo {
	public void sum(int... n) {
		int sum=0;
		for(int i:n) {
			sum += i;
		}
		System.out.println("sum: "+sum);
	}
	public static void main(String[] args) {
		ArgsDemo ad = new ArgsDemo();
		ad.sum(1);
		ad.sum(1, 2);
		ad.sum(1, 2, 3);
	}
}

Return

sum: 1
sum: 3
sum: 6

6. 异常处理

  • 用法
try{
	pass;
}catch(带包名的异常){
	pass
}
  • 输入数组,当我们尝试输入一个字符串时,会报错
package aaa.bbb.datamanage;

import java.util.Scanner;

public class DataManage {

	public int[] insertData() {
		int[] a = new int[5];
		Scanner sc = new Scanner(System.in);
		for(int i=0; i<a.length-1; i++) {
			System.out.println("请输入第"+(i+1)+"个数据:");
			a[i] = sc.nextInt();
		}
		return a;
	}
	public static void main(String[] args) {
		DataManage dm = new DataManage();
		int[] a = dm.insertData();
		for (int n:a)
			System.out.print(n + " ");
	}
}
Exception in thread "main" java.util.InputMismatchException
	at java.base/java.util.Scanner.throwFor(Scanner.java:939)
	at java.base/java.util.Scanner.next(Scanner.java:1594)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
	at aaa.bbb.datamanage.DataManage.insertData(DataManage.java:20)
	at aaa.bbb.datamanage.DataManage.main(DataManage.java:35)

因此我们需要处理java.util.InputMismatchException这个异常
也就是用以下代码

package aaa.bbb.datamanage;
import java.util.Scanner;

public class DataManage {

	public int[] insertData() {
		int[] a = new int[5];
		Scanner sc = new Scanner(System.in);
		//少接收一个数据,为在指定位置处插入数据做准备
		for(int i=0; i<a.length-1; i++) {
			System.out.println("请输入第"+(i+1)+"个数据:");
			// 异常处理
			try {
				a[i] = sc.nextInt();
			}catch(java.util.InputMismatchException e) {
				System.out.println("输入的数据格式有误,不能有非数字!");
				sc.next();
				i--;
			}
		}		
		return a;
	}
	public static void main(String[] args) {
		DataManage dm = new DataManage();
		int[] a = dm.insertData();
		for (int n:a)
			System.out.print(n + " ");
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值