java学习基础篇笔记9-----面向对象2(方法)

1 篇文章 0 订阅
1 篇文章 0 订阅

方法

方法的声明:
权限修饰符 返回值类型 方法名(形参列表){
方法体
}

return关键字

1.使用范围:使用在方法体中
2.作用:

  • 结束方法
  • 针对于返回值类型的方法,使用"return 数据"方法返回所要的数据。

3.注意点:return关键字后面不可以声明执行语句。

方法的重载

定义: 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
总结:“两同一不同”:同一个类、相同方法名
参数列表不同:参数个数不同,参数类型不同

例子:

package object_oriented;

import java.util.Scanner;

/*
 * 2.编写程序,定义三个重载方法并调用。方法名为mOL。
三个方法分别接收一个int参数、两个int参数、一个字符串参数。分别
      执行平方运算并输出结果,相乘并输出结果,输出字符串信息。
在主类的 main () 方法中分别用参数区别调用三个方法。
 */
public class Reload {
	int m;
	int n;
	String c;
	public static void main(String args[]) {
	java.util.Scanner scan = new java.util.Scanner(System.in);
	//创建对象
	Reload ob = new Reload();
	//实参赋值
	System.out.println("请输入m的值:");
	ob.m = scan.nextInt();
	System.out.println("请输入n的值:");
	ob.n = scan.nextInt();
	ob.c = "shenyinhong";
	//调用重载方法
	ob.moL(ob.m);
	ob.moL(ob.m,ob.n);
	ob.moL(ob.c);
	}
	//以下几个方法变量名和类都相同,但是参数个数不同,参数类型不同,构成方法重载
	public void moL(int m) {
		System.out.println("m平方为:"+ m*m);
	}
	public void moL(int m,int n) {
		System.out.println("m和n乘积为:"+ m*n);
	}
	public void moL(String m) {
		System.out.println("字符串为:"+m);
	}
}

不构成重载举例:
如下的3个方法不能构成重载

//	public int getSum(int i,int j){
//		return 0;
//	}
	
//	public void getSum(int m,int n){
//		
//	}
	
//	private void getSum(int i,int j){
//		
//	}

可变形参

//JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量 public static void test(int a
,String[] books); //JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量 public static void
test(int a ,String…books);

  1. 可变形参的格式:数据类型…变量名
  2. 与本类中方法名相同,形参不同的方法之间构成方法重载
  3. 与方法名相同,形参类型也相同的数组之间不构成重载
  4. 可变个数形参在方法的形参中,必须声明在末尾
    例子:
package object_oriented;

public class Varparameter {
	public static void main(String args[]) {
		Varparameter test = new Varparameter();
		test.show("hello");
		test.show("hello","world");
		test.show();		
		test.show(new String[]{"AA","BB","CC"});
	}
	public void show(int i){
		
	}
	
	public void show(String s){
		System.out.println("show(String)"+s);
	}
	
	public void show(String ... strs){
		System.out.println("show(String ... strs)");
		
		for(int i = 0;i < strs.length;i++){
			System.out.println(strs[i]);
		}
	}
}

值传递机制

基本数据类型:传递的是变量值
引用数据类型:传递的是变量所保存的地址值
例子:

package object_oriented1;

public class Valuepass {
public static void main(String args[]) {
	//基本数据类型值传递
	Valuepass ob = new Valuepass();
	int m = 10;
	int n = 20;
	ob.swap(m, n);
	System.out.println(m+","+n);//结果未进行交换,局部变量在方法结束后自动销毁
	//引用数据类型值传递
	Data data = new Data();
	data.m=10;
	data.n = 20;
	ob.swap(data);
	System.out.println(data.m+","+data.n);
	//结果进行了交换,传递的参数是引用数据类型,交换的是地址
}
public void swap(int a,int b) {
	int temp = b;
	b = a;
	a = temp;
}
public void swap(Data data) {
	int temp = data.m;
	data.m = data.n;
	data.n = temp;
}
}
class Data{
	int m;int n;
}

递归方法

定义:一个方法体内调用它自身。
直接上例子吧

package object_oriented1;
/*
 * 递归调用
 */
public class Recursion {
public static void main(String[] args) {
	Recursion getsum = new Recursion();
	int sum = getsum.sum(100);
	System.out.println("1-100的和:"+sum);
	System.out.println("f(10)的值为:"+getsum.shulie1(10));
	System.out.println("10!的值为:"+getsum.jiecheng(10));
}
/*计算1-100之间所有自然数的和
 * 
 */
public int sum(int m) {
	if(m == 1){
		return 1;
		}else{
		return m + sum(m - 1);
		}
}
/*
 * 已知有一个数列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n),其中n是大于0
的整数,求f(10)的值。
 */
public int shulie1(int m) {
	if(m == 0) {
		return 1;
	}else if(m == 1) {
		return 4;
	}else {
		return 2*shulie1(m-1)+shulie1(m-2);
	}	
}
/*
 *  :请用Java写出递归求阶乘(n!)的算法
 */
public int jiecheng(int n) {
	if(n == 1) {
		return 1;
	}else {
		return jiecheng(n-1)*n;
	}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值