JavaSE04方法

一.方法

1.概念: 对重复且有效的代码进行提取,提取的形式—方法

2.格式:

修饰符 返回值类型 方法名(参数类型 参数名…){
	方法体;
	return 返回值; 
}

修饰符:public static

返回值类型:返回值是什么类型就用什么类型来接
				   没有返回值---void
				   
方法名:标识符

参数列表:参数类型、个数以及顺序共同作用

方法体:重复的代码

return:用于把返回值进行返回
package cn.tedu.method;

public class MethodDemo1 {
	//Alt+?提示键
	//在编写代码的时候就会进行编译
	public static void main(String[] args) {
		
		/*//打印3行4列的星星
		for(int i=1;i<=3;i++){
			for(int j=1;j<=4;j++){
				System.out.print("*");
			}
			System.out.println();
		}
		
		//分割
		System.out.println();
		
		//打印5行6列星星
		for(int i=1;i<=5;i++){
			for(int j=1;j<=6;j++){
				System.out.print("*");
			}
			System.out.println();
		}
		
		
		
		//打印10行11列
		for(int i=1;i<=10;i++){
			for(int j=1;j<=11;j++){
				System.out.print("*");
			}
			System.out.println();
		}*/	
		/*
		//单独调用
		printXing(3, 2);
		//输出调用
		System.out.println(sum(2, 3));
		//赋值调用
		//没有返回值的方法不能输出以及赋值调用
		int result=sum(3, 5);*/
		
		//
		System.out.println(isOdd(17));
	}
	
	
	//打印星星的方法
	public static void printXing(int n,int m){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(j==2)
					return;//结束方法
				System.out.print("*");
			}
			System.out.println();
		}
		System.out.println(1);
	}
	
	//两个整数求和---方法
	//两个明确---返回值类型  int  参数列表   int x, int y
	public static int sum(int x,int y){
		return x+y;
	}
	
	
	//判断一个整数是否是奇数---方法
	//两个明确---返回值类型  boolean  参数列表   int a
	public static boolean isOdd(int a){
		//不正常的范围
		if(a<=0){
			return false;
		}
		
		//判断是否是奇数
		if((a&1)==1){
			return true;
		}
		
		//
		return false;
	}
	
	
	//判断一个整数是否是质数
	/*public static boolean isPrime(int n){
		//不正常的范围
		if(n<2){
			return false;
		}
		
		//操作循环依次进行整除
		for(int i=2;i<=n/2;i++){
			//判断是否能被整除
			if(n%i==0){
				return false;
			}
		}
		
		//
		return true;
	}*/
	
	public static void isPrime(int n){
		//不正常范围
		if(n<2){
			System.out.println("不是质数");
			return;
		}
		
		//
		for(int i=2;i<=n/2;i++){
			//
			if(n%i==0){
				System.out.println("不是质数");
				return;
			}
		}
		
		//
		System.out.println("是质数");
	}

}

3.调用

(1) 单独调用---方法名(参数值)
(2) 输出调用
(3) 赋值调用
package cn.tedu.method;
//方法的调用由方法名和参数列表共同组成---方法签名
public class MethodDemo2 {
	
	public static void main(String[] args) {
		//如果重载方法提供了精确匹配的方法---精确匹配
		//如果重载方法没有提供精确匹配的方法就要进行相对精确的匹配
		//如果提供了多个相对精确匹配的方法就报错了
		//System.out.println(sum(1,2));
	}
	
	//求和方法
	//sum(int ,int)
	/*public static int sum(int m,int n){
		System.out.println("int int");
		return m+n;
	}*/
	//sum(int,double)
	public static double sum(int m,double n){
		System.out.println("int double");
		return m+n;
	}
	//sum(double,int)
	public static double sum(double m,int n){
		System.out.println("intdouble");
		return m+n;
	}
	//sum(double,double)
	public static double sum(double m,double n){
		System.out.println("double double");
		return m+n;
	}

}

4.注意:

(1)方法被调用才能执行

(2)两个明确(返回值类型 参数列表)

(3)return适用于方法,用于结束方法以及返回返回值

(4)要保证所有的数据方法都有对应的返回值

(5)方法抽取的形式不固定,经验有关

5.方法的重载

(1) 在一个类中,出现了方法名一致,参数列表不一致的方法

(2) 如果提供了精确匹配的方法可以进行精确匹配,如果没有提供精确匹配
的方法就要进行相对精确的匹配,如果提供了多个相对精确匹配就会报错

6.方法的传值

(1) 如果实参是基本数据类型---传入的是值的拷贝

(2) 如果实参是引用数据类型---传入的是地址值的拷贝,如果拿到这个拷贝
的地址值找到了原堆内存改变了元素值就会影响结果,如果拿到的这个地址值
没有对原堆内存做任何改变就不会影响结果

在这里插入图片描述

package cn.tedu.method;

public class MethodDemo3 {
	//方法的执行在栈中
	public static void main(String[] args) {
		//
		int i=2;
		//实参---实际传值的参数
		//如果实参是基本数据类型,传递的就是值的拷贝
		//m(i);
		int[] arr={1,2,3,5};
		//m(arr[0]);
		//2
		//如果实参是引用数据类型,是地址值的拷贝
		//n(arr);
		mn(arr);
		System.out.println(arr[0]);
	}
	
	//形参---用于接收实参传过来的值
	public static void m(int i){
		i++;
	}
	
	
	public static void n(int[] arr){
		arr[0]=10;
	}
	
	public static void mn(int[] arr){
		arr=new int[4];
		arr[0]=10;
	}
	
}

二.递归

在方法执行过程中调用了本方法

sum(5)=1+2+3+4+5;

sum(5)=5+4+3+2+1;
		 5+sum(4); 
		     4+sum(3)
		         3+sum(2)
		             2+sum(1)=1
		
StackOverflowError---栈溢出错误
package cn.tedu.method;

public class MethodDemo {
	
	
	public static void main(String[] args) {
		
		System.out.println(sum(100000));
		System.out.println(jc(5));
		
	}
	
	//递归方法
	public static int sum(int n){
		//结束的标志
		if(n==1){
			return 1;
		}
		
		return n+sum(--n);
	}
	
	//递归方法---求阶乘
	public static int jc(int n){
		//
		if(n==1){
			return 1; 
		}
		
		return n*jc(--n);
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值