从零开始的Java开发1-2-4 Java方法

Posted karshey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始的Java开发1-2-4 Java方法相关的知识,希望对你有一定的参考价值。

文章目录

方法

所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块。
方法声明

方法分类

  • 无参无返回值方法
  • 无参有返回值方法
  • 带参无返回值方法
  • 带参有返回值方法

无参无返回值的方法
想要这个:

***************************
Hello World!
***************************

写的方法:

package com.t1.method;

public class myMethod 
	public void printStar() 
		System.out.println("***************************");
	

	public static void main(String[] args) 
		//创建一个myMethod类的对象myMethod1
		myMethod myMethod1=new myMethod();
		//调用这个myMethod1对象的printStar方法:
		//使用对象名.方法名()去调用这个方法
		myMethod1.printStar();
		System.out.println("Hello World!");
		myMethod1.printStar();

	



无参带返回值的方法

package com.t1.method;

public class Rectangle 

	public int area() 
		int a = 10, b = 20;
		int area = a * b;
		return area;
	

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		Rectangle myRectangle = new Rectangle();
		System.out.println("长方形面积为:" + myRectangle.area());

	


带参无返回值的方法
目的:定义一个求两个float类型数据最大值的方法,在方法中将最大值打印输出。

public void max(float a,float b)

代码:

package com.t1.method;

public class MaxDemo 

	public void Max(float a, float b) 
		float max;//变量名其实可以和方法名同名
		if (a > b)
			max = a;
		else
			max = b;

		System.out.println("ab两个数的最大值为" + max);
	

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		MaxDemo max1 = new MaxDemo();
		max1.Max(6.2f, 7.44f);
	



带参有返回值的方法
目的:定义一个求n!的方法,然后再求1!+2!+3!+4!+5!;

public int fac(int n)

代码:

package com.t1.method;

public class facDemo 

	public int fac(int x) 
		int ans = 1;
		for (int i = 1; i <= x; i++) 
			ans *= i;
		
		return ans;
	

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		facDemo facDemo1 = new facDemo();
		int ans = 0;
		for (int i = 1; i <= 5; i++) 
			ans += facDemo1.fac(i);
		

		System.out.println(ans);
	



数组作为方法参数

要求1:定义方法,打印输出数组元素的值。

public void printArray(int[] arr)

代码:

package com.t1.method;

public class Arr 

	public void printarr(int[] arr) 
		for (int i = 0; i < arr.length; i++) 
			System.out.print(arr[i] + " ");
		
		System.out.println();
	

	public static void main(String[] args) 
		int[] arr =  10, 20, 30, 40, 50 ;
		Arr arr1 = new Arr();
		arr1.printarr(arr);

	


要求2:查找数组元素的值
方法参数:数组、要查找的值
返回值:boolean

代码:

package com.t1.method;

public class findValue 

	public boolean find(int n, int[] a) 
		for (int i = 0; i < a.length; i++) 
			if (a[i] == n)
				return true;
		
		return false;
	

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		findValue find1 = new findValue();
		int[] a =  1, 2, 3, 4, 5, 6 ;
		boolean flag = find1.find(1, a);
		if (flag == true)
			System.out.println("找到了");
		else
			System.out.println("没找到");
	



方法重载

方法名相同,方法参数不同。

跟第一个相比,哪个是重载的方法?

答:
3、4、5都是重载的方法。因为方法名相同,参数列表不同
第2个参数列表相同,第6个方法名不同。所以都不是重载的方法。

代码的练习:
定义三个方法,实现int、double、和数组类型和的问题。

代码:

package com.t1.method;

public class Add 

	public int add(int n, int m) 
		return n + m;
	

	public double add(double m, double n) 
		return n + m;
	

	public int add(int[] a) 
		int ans = 0;
		for (int i = 0; i < a.length; i++) 
			ans += a[i];
		
		return ans;
	

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		Add add1 = new Add();
		System.out.println("int的和" + add1.add(1, 2));
		System.out.println("double的和" + add1.add(2.3, 4.4));
		int a[] =  1, 2, 3, 4, 5, 6 ;
		System.out.println("数组的和" + add1.add(a));
	



基本数据类型的传值

package com.t1.method;

public class swapp 

	public void swap(int a, int b) 
		int temp = a;
		System.out.println("交换前a=" + a + " b=" + b);
		a = b;
		b = temp;
		System.out.println("交换后a=" + a + " b=" + b);
	

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		int n = 1, m = 2;
		System.out.println("交换前n=" + n + " m=" + m);
		swapp swap1 = new swapp();
		swap1.swap(n, m);
		System.out.println("交换后n=" + n + " m=" + m);
	



输出:

交换前n=1 m=2
交换前a=1 b=2
交换后a=2 b=1
交换后n=1 m=2

由此可知,交换的只是a,b,而不是n,m。
且n,m只是传值给了a,b,而不是它们自己的地址。

注意:只有在主方法中调用函数需要写对象名,在其他方法中不用写对象名
如:

package com.t1.method;

public class swapp 

	public void swap(int a, int b) 
		int temp = a;
		System.out.println("交换前a=" + a + " b=" + b);
		a = b;
		b = temp;
		System.out.println("交换后a=" + a + " b=" + b);
	

	public void test() 
		int n = 1, m = 2;
		System.out.println("交换前n=" + n + " m=" + m);
		//这里没有通过对象调用方法,而是直接调用的
		swap(n, m);
		System.out.println("交换后n=" + n + " m=" + m);
	

	public static void main(String[] args) 
		swapp swap1 = new swapp();
		//主方法中需要通过对象调用方法
		swap1.test();
	



输出:跟之前是一样的。

交换前n=1 m=2
交换前a=1 b=2
交换后a=2 b=1
交换后n=1 m=2

如果在方法中对参数进行了更改,那么出了方法后,值不变:

数组的传值(引用数据类型)

package com.t1.method;

public class updateArr 

	public void printArr(int[] a) 
		for (int n : a) 
			System.out.print(n + " ");
		
		System.out.println();
	

	public void update(int[] a) 
		a[0] = 1;
		System.out.println("更改中:");
		printArr(a);
	

	public static void main(String[] args) 
		int[] a =  6, 6, 6, 6, 6 ;
		System.out.println("更改前:");
		updateArr updateArr1 = new updateArr();
		updateArr1.printArr(a);
		updateArr1.update(a);
		System.out.println("更改后:");
		updateArr1.printArr(a);

	


输出:

更改前:
6 6 6 6 6 
更改中:
1 6 6 6 6 
更改后:
1 6 6 6 6 

数组在方法中改变值,在主方法中值也会改变。

原因是:
我们定义了一个数组6,6,6,6,6,就是在内存中开辟了一个连续的一份空间,里面填了6,6,6,6,6。其中a就指向了数组的第一个元素,也就是说,a是一个地址。
我们在调用方法时传的是a(地址),则会直接对内存中的值进行修改了,所以会变化。

可变参数列表

格式如:

public void sum(int... n)//我直接类比C++的vector<int>n

写一个参数为int…的求和代码:

package com.t1.method;

public class ArgsDemo 

	public void sum(int... n) 
		int ans = 0;
		for (int i : n) 
			ans += i;
		
		System.out.println("sum=" + ans);
	

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		ArgsDemo a1 = new ArgsDemo();
		a1.sum(1, 2, 3);
		a1.sum(1, 2, 3, 4);
		a1.sum(1, 2, 3, 4, 5);
	


输出:

sum=6
sum=10
sum=15

一个参数包含int…n的查找代码:

package com.t1.method;

public class ArgsDemo 

	public boolean find(int a, int... n) 
		for (int i : n) 
			if (i == a)
				return true;
		
		return false;
	

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		ArgsDemo a1 = new ArgsDemo();
		boolean flag;
		int[] n =  1, 2, 3, 4, 5 ;
		flag = a1.find(0, n);
		if (flag)
			System.out.println("找到了");
		else
			System.out.println("没找到");

		int[] n1 =  1, 2, 3, 4, 6, 6, 6 ;
		flag = a1.find(2, n1);
		if (flag)
			System.out.println("找到了");
		else
			System.out.println("没找到");
	


输出:

没找到
找到了

注意:
可以把数组传给可变参数列表,但不能把可变参数列表传给数组
如:数组传给可变参数列表

public boolean find(int a, int... n);//这是find函数
find(1,arr1);//这样传值,可以——数组传给可变参数列表

可变参数列表传给数组

public boolean find(以上是关于从零开始的Java开发1-2-4 Java方法的主要内容,如果未能解决你的问题,请参考以下文章

从零开始的Java开发1-3-1 Java面向对象:创建类实例化对象单一职责原则newthis构造方法

从零开始的Java开发1-3-3 综合案例:学生信息管理

从零开始的Java开发1-2-5 Java综合案例:数组移位与统计

从零开始的Java开发1-3-2 Java封装包packagestatic关键字代码块

从零开始的Java开发 笔记目录(持续更新)

从零开始的Java开发1-6-2 泛型:概述泛型作为方法参数自定义泛型自定义泛型方法