java中方法

2022-07-17 13:27:38

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

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

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

方法的本质:

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

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

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

publicclassMethodTest01{//类体publicstaticvoidmain(String[] args){
		MethodTest01.sumInt(5,6);
		
		MethodTest01.sumInt(7,10);}//计算两个整数的和publicstaticvoidsumInt(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:是一个类名publicclassMethodTest02{//类体//类体之中不能直接写java语句,除声明变量之外//方法出现在类体当中//方法//public:公开//static:静态的//void:表示执行结束之后不返回任何类型//main:是方法名:主方法//(String[] args):形式参数列表,其中String[]是一种引用数据类型,args是一个局部变量的变量名//所以只有args这个局部的变量名是随意的publicstaticvoidmain(String[] args){
		
		MethodTest02.sum(2,3);}publicstaticvoidsum(int a,int b){
		System.out.println(a+b);}}

例1:

package bilili;/*
 * 方法的调用不一定在main方法中 可以在其他程序里,并且按顺序执行
 */publicclassMethodTest03{publicstaticvoidsum(int x,int y){
		
		System.out.println(x+"+"+y+"="+(x+y));//调用doSome方法;
		MethodTest03.doSome();}publicstaticvoidmain(String[] args){
		
		MethodTest03.sum(8,2);
		
		System.out.println("?????????????/");}publicstaticvoiddoSome(){
		System.out.println("my name is ninininininin!!!");}}

例2:

package bilili;/*
 * 方法调用
 */publicclassMethodTest04{publicstaticvoidmain(String[] args){m();//对于方法修饰符当中有static关键字,类名可以省略不写//N(); 调用其他类的不能直接省略,编译报错  在当前类中该方法报错
		A.N();//}publicstaticvoidm(){
		System.out.println("llll1111111111");}}classA{publicstaticvoidN(){
		System.out.println("88888888888888");
		MethodTest04.m();//顺序调用}}

例3:

package bilili;/*
 * 建议在一个源文件中只定义一个class
 * 
 * 分析程序的输出结果
 * 
 * eg:套娃代码!!!
 */publicclassMethodTest05{publicstaticvoidmain(String[] args){m1();}publicstaticvoidm1(){
		System.out.println("11111111111111");m2();}publicstaticvoidm2(){
		System.out.println("222222222222222222");m3();}publicstaticvoidm3(){
		System.out.println("333333333333");m4();}publicstaticvoidm4(){
		System.out.println("44444444444444");}}

例4:

package bilili;/*
 * 方法的返回值不是void
 * 必须要有return
 * 
 * 需求:定义一个方法 要求计算两个int类型的值
 */publicclassMethodTest06{publicstaticvoidmain(String[] args){int m=devide(8,2);//接收这个返回值但是不会直接显示相出
		System.out.println(m);double j=devide(100,2);//小转大
		System.out.println(j);}publicstaticintdevide(int x,int y){int c= x/y;return c;//System.out.println("8791561123102");  无法输出,只能输出int类型的东西}}

例5:

package bilili;/*
 * 关于return
 * 	带有return关键字的语句只要执行,所在的方法执行结束
 * 
 * 在同一个作用域中 return语句下面不能编写任何代码,因为执行不到,所以编译报错
 */publicclassMethodTest07{publicstaticvoidmain(String[] args){
		System.out.println(mn(8));}publicstaticintmn(int x){//必须要有一个结果以整数型输出if(x>5){
			System.out.println("俺比5大");//可以在return语句前边编写其他语句return1;}else{return3;}}}

例6:

package bilili;/*
 * 在返回值是void的方法中使用return语句
 * 		作用:可以终止方法的执行
 */publicclassMethodTest08{publicstaticvoidmain(String[] args){l();}publicstaticvoidl(){//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.关于栈:一种数据结构,先进后出

方法的重载

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

publicclassOverloadTest01{publicstaticvoidmain(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);}publicstaticlongsumlong(long l,long m){return l+m;}publicstaticdoublesumdouble(double d,double e){// TODO Auto-generated method stubreturn d+e;}publicstaticintsumInt(int i,int j){// TODO Auto-generated method stubreturn i+j;}}

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

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

publicclassOverloadTest02{publicstaticvoidmain(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);}//以下三个方法构成方法重载机制publicstaticlongsum(long l,long m){return l+m;}publicstaticdoublesum(double d,double e){return d+e;}publicstaticintsum(int i,int j){return i+j;}}

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

  • 方法重载只和 方法名和参数列表有关
publicclassOverloadTest03{publicstaticvoidmain(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)}}

递归

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

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

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

//方法1 :直接编写
		java.util.Scanner s=newjava.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: 单独定义一个方法,这是一个独立的功能publicstaticintsumN(int n){int total=0;for(int i=1;i<=n;i++){
			total+=i;}return total;}

使用递归的方法:

/*
 * 使用递归 计算1-N的和
 */publicclassRecursionTest03{publicstaticvoidmain(String[] args){// TODO Auto-g
		System.out.println(sumN(5));}publicstaticintsumN(int n){if(n>0){return n+sumN(n-1);}else{return0;}}}

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

/*
 * 计算阶乘
 */publicclassRecursionTest04{publicstaticvoidmain(String[] args){int n=jiecheng(5);
		System.out.println(n);}publicstaticintjiecheng(int x){if( x==1){return1;}return x*jiecheng(x-1);}}
  • 作者:恶熊比比
  • 原文链接:https://blog.csdn.net/meini32/article/details/106137224
    更新时间:2022-07-17 13:27:38