java中方法

Java中的方法 == C语言中的函数

如果一个代码需要重复使用(每一次调用的数据不同)
方法:调用/invoke
应该在java语言上有这样一种机制:

  •  -某个功能代码只需要写一遍
    
  •  -需要使用这个功能只需要给这个功能传递数据
    
  •  这样代码就可以重复利用,提高代码复用率
    

方法的本质:

  •  方法就是一段代码片段,并且可以重复使用满足某个特定功能
    
  •  方法在C语言中叫做函数!!
    

方式定义在类体当中,一个类体中可以有多个类体,但是方法体当中不能定义方法。

//以下代码 包含两个方法 mian方法和 sumInt方法

public class MethodTest01 {
	//类体

	public static void main(String[] args) {
		MethodTest01.sumInt(5, 6);
		
		MethodTest01.sumInt(7, 10);
	}
	
	//计算两个整数的和
	public static void sumInt(int a ,int b) {
		int c = a + b;
		System.out.println(a+"+"+b+"="+c);
	}
}

1.方法怎么定义,语法结构:

[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}

  • 修饰符列表:可选项不是必须; 目前统一写成:public static

  • 返回值类型: 返回值类型可以是:String char double byte boolean long… int //规定这个方法结束返回整数类型,void //执行结束没有返回类型,返回值若不是void的时候,这个方法执行结束必须有一个具体的数值

  • 方法名: 只要是合法的标识符就行 最好是一个动词

  • 方法体:必须有大括号括起来,方法体中的代码有顺序

  • 形参:局部变量 :int a ; double b; 形参可以是0-N个 多个形参之间用逗号隔开,方法在调用的时候,实际给这个方法传入的的数据称为“实参".

    3.方法怎么调用?
    方法只定义不调用是不会执行的,只有在调用时才会执行。
    语法规则: (方法中有static时)
    类名.方法名(实参列表);

//public:表示公开的
//class:表示定义类
//MethodTest02:是一个类名
public class MethodTest02 {
	
	//类体
	//类体之中不能直接写java语句,除声明变量之外
	//方法出现在类体当中
	
	//方法
	//public:公开
	//static:静态的
	//void:表示执行结束之后不返回任何类型
	//main:是方法名:主方法
	//(String[] args):形式参数列表,其中String[]是一种引用数据类型,args是一个局部变量的变量名
	//所以只有args这个局部的变量名是随意的
	public static void main(String[] args) {
		
		MethodTest02.sum(2,3);
		
		
	}
	public static void sum(int a,int b) {
		System.out.println(a+b);
	}


}

例1:

package bilili;
/*
 * 方法的调用不一定在main方法中 可以在其他程序里,并且按顺序执行
 */
public class MethodTest03 {
	
	public static void sum(int x,int y) {
		
		System.out.println(x+"+"+y+"="+(x+y));
		//调用doSome方法;
		MethodTest03.doSome();
	}

	public static void main(String[] args) {
		
		MethodTest03.sum(8, 2);
		
		System.out.println("?????????????/");

	}
	public static void doSome() {
		System.out.println("my name is ninininininin!!!");
	} 

}

例2:

package bilili;
/*
 * 方法调用
 */

public class MethodTest04 {

	public static void main(String[] args) {
		
		m();  //对于方法修饰符当中有static关键字,类名可以省略不写
		
		//N(); 调用其他类的不能直接省略,编译报错  在当前类中该方法报错
		A.N();//
	}
	
	public static void m() {
		System.out.println("llll1111111111");
	}

}

class A{
	
	public static void N() {
		System.out.println("88888888888888");
		MethodTest04.m();//顺序调用
		}
	}

例3:

package bilili;
/*
 * 建议在一个源文件中只定义一个class
 * 
 * 分析程序的输出结果
 * 
 * eg:套娃代码!!!
 */

public class MethodTest05 {

	public static void main(String[] args) {
		m1();

	}

	public static void m1() {
		System.out.println("11111111111111");
		m2();
		
	}
	
	public static void m2() {
		System.out.println("222222222222222222");
		m3();
		
	}
	
	public static void m3() {
		System.out.println("333333333333");
		m4();
		
	}
	
	public static void m4() {
		System.out.println("44444444444444");
		
	}

}

例4:

package bilili;
/*
 * 方法的返回值不是void
 * 必须要有return
 * 
 * 需求:定义一个方法 要求计算两个int类型的值
 */

public class MethodTest06 {

	public static void main(String[] args) {
		
		int m = devide(8,2);  //接收这个返回值但是不会直接显示相出
		System.out.println(m);
		
		double j=  devide(100,2); //小转大
		System.out.println(j);
	}
	
	public static int devide(int x,int y) {
		
		int c = x/y;
		return c;
		//System.out.println("8791561123102");  无法输出,只能输出int类型的东西
	} 

}

例5:

package bilili;
/*
 * 关于return
 * 	带有return关键字的语句只要执行,所在的方法执行结束
 * 
 * 在同一个作用域中 return语句下面不能编写任何代码,因为执行不到,所以编译报错
 */

public class MethodTest07 {

	public static void main(String[] args) {
		System.out.println(mn(8));

	}
	public static int mn(int x) {  //必须要有一个结果以整数型输出
		if (x>5){
			System.out.println("俺比5大");  //可以在return语句前边编写其他语句
			return 1;
		}
		else {
			return 3;
		}
	}

}

例6:

package bilili;
/*
 * 在返回值是void的方法中使用return语句
 * 		作用:可以终止方法的执行
 */

public class MethodTest08 {

	public static void main(String[] args) {
		l();

	}
	public static void l() {
		//return 0; 编译报错 对于返回值是空的方法 无法返回值
		for (int i = 0;i<10;i++) {
			if (i == 5) {
				return;   //return不是终止for循环 而是终止l()方法  终止for循环用break;
			}
			System.out.println("i"+"=="+i);
		}
	}

}

方法的内存分布:
方法在执行中,在JVM内存中是如何分配的,内存如何变化

  • 1.方法只定义,不调用,是不会执行的,并且在JVM中也不会给该方法分配所属的内存空间
  • 2.在jvm内存划分上有三块主要的内存空间
  •  方法区内存
    
  •  堆内存
    
  •  栈内存
    
  • 3.关于栈:一种数据结构,先进后出

方法的重载

现不使用“重载”来编译以下程序:

public class OverloadTest01 {

	public static void main(String[] args) {
		int r1 = sumInt(1,2);
		double r2 = sumdouble(1.0,3.1);
		long r3 = sumlong(1L,9L);
		
		System.out.println(r1);
		System.out.println(r2);
		System.out.println(r3);

	}

	public static long sumlong(long l, long m) {
		return l+m;
	}

	public static double sumdouble(double d, double e) {
		// TODO Auto-generated method stub
		return d+e;
	}

	public static int sumInt(int i, int j) {
		// TODO Auto-generated method stub
		return i+j;
	}
}

缺陷:以下方法虽然功能不同 但是功能相似,都是求和
有一个机制:可以处理这种功能不同但是相似的方法 ,这种机制就是重载

修改过后的程序
优势:程序元调用方法的时候,不需要记忆更多的方法名

public class OverloadTest02 {

	public static void main(String[] args) {
		int r1 = sum(1,2);
		double r2 = sum(1.0,3.1);
		long r3 = sum(1L,9L);
		
		System.out.println(r1);
		System.out.println(r2);
		System.out.println(r3);

	}
	
	//以下三个方法构成方法重载机制
	
	public static long sum(long l, long m) {
		return l+m;
	}

	public static double sum(double d, double e) {
		return d+e;
	}

	public static int sum(int i, int j) {
		return i+j;
	}

}

1.方法重载又称为overload
2.功能相似的时候尽可能让方法名相同
3. 什么条件下构成了方法重载?
在同一个类中;方法名相同;参数列表不同;数值不同;类型不同

  • 方法重载只和 方法名和参数列表有关
public class OverloadTest03 {

	public static void main(String[] args) {
		
		O.p("bshdaslds k");
		//以下两个方法构成重载
		//public static void m1()
		//public static void m1(int x)
		
		//以下两个方法构成重载
		//public static void m2(double a,double b)
		//public static void m2(int a,int b)
		
		//以下两个方法构成重载
		//public static void m2(int x)
		//public static void m2(float x)
				
		//以下两个方法构成重载
		//public static void m2(int b,int a)
		//public static void m2(int a,int b)
						

	}

}

递归

递归的本质就是:自己调自己

public class RecursionTest01 {

	public static void main(String[] args) {

		doSelf();
	}

	//以下代码虽然只有一份
	//但是可以重复使用,只有调用doSelf就会在分配一块内存空间
	public static void doSelf() {
		System.out.println("my name is meini");
		doSelf();
		System.out.println("dog name is rururur");

	}
}

不使用递归 计算1-n的和
方法1:

//方法1 :直接编写
		java.util.Scanner s =new java.util.Scanner(System.in);//输入
		
		int N = s.nextInt();
		int total =0;
		for (int i = 1;i<=N;i++) {
			total+=i;
		}
		System.out.println(total);
		System.out.println(sumN(10));

方法二:

//方法2: 单独定义一个方法,这是一个独立的功能
	public static int sumN(int n) {
		int total =0;
		for (int i = 1;i<=n;i++) {
			total+=i;
		}
		return total;	
	}

使用递归的方法:

/*
 * 使用递归 计算1-N的和
 */

public class RecursionTest03 {

	public static void main(String[] args) {
		// TODO Auto-g
		System.out.println(sumN(5));

	}
	public static int sumN(int n) {
		
		if(n>0) {
			return n+sumN(n-1);
		}else {
			return 0;
		}
	}

}

递归的缺点:特别占用内存,不建议使用

/*
 * 计算阶乘
 */

public class RecursionTest04 {

	public static void main(String[] args) {
		int n = jiecheng(5);
		System.out.println(n);

	}

	public static int jiecheng(int x) {
		if( x == 1 ){
			return 1;
		}
		return x*jiecheng(x-1);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值