动力节点——方法(四)



一:方法的概述:

1,定义:方法就是完成某个功能的代码


2,使用方法的目的

提高代码的复用性(由编写多次,变成编写一次,被多次调用)

提高了编码的效率

提高代码的安全性


二:方法定义语句:

1,语法定义:

修饰符    返回值类型    方法名称(形式参数……)方法抛出的异常类型{

        方法体

        return    返回值;

}


2,语法讲解:

修饰符:暂时记住  public  static


返回值类型:


如果方法有返回值,返回值类型根据使用方法的需求定义;


如果方法没有返回值    void


方法名称:见名知意。见到方法名称,就明白这个方法完成什么功能了。


形式参数:是可能在方法体中使用到的具有具体意义的变量。

如果形式参数在方法体内被实际使用了,则形式参数就叫做实际参数。


在这里,形式参数是使用变量表示的,但是在编写时只需要数据类型和名称。

形式参数可以有多个,两两之间使用英文的逗号分开。

方法爆出异常类型:目前写方法不考虑(在后面的异常课程讲解)


方法体:就是完成功能的代码


return  返回值:

return代表方法执行结束,直接跳出方法;

如果在方法定义时,返回值类型是void;

那么在方法中可以不写return,或者可以有写return但是不要写返回值


返回值:返回值的数据类型必须符合方法定义中的返回值类型。

返回值在java语言中每个方法只能有一个返回值,

处理返回值的方法:

A;直接输出;

B,使用一个变量接收(注意:变量类型必须和返回值类型一致)


3,编写方法的步骤:

A,方法的代码一定要写在某个class内部;

B,一个class中,所有的方法都是同级别的


4,方法二要素:

形式参数

返回值


三:方法调用

A,方法光定义,不调用;则方法体的代码是不会执行的。

B,方法定义后,一定是在另一个方法内被调用(递归除外)。

C,调用语法:

        方法名称(参数值……)。

        参数值的个数必须和方法定义时形式参数的个数一样。

        参数值每个对应位置的形式参数和参数值必须数据类型一致。

D,方法结果的显示

如果是在调用方法后,显示结果,则这个方法必须有返回值。

eg:

class  MethodDemo{

        public  static  void  main(String[]  args){

                //add方法只能在main方法内部调用;

                //add(2,3);

                System.out.println(add(2,3));

        }

        public  static  int  add(int  x1,int  x2){

                return  x1+x2;

        }

}




方法的执行过程文字描述:

JVM执行到add(2,3)会自动认知是一个方法调用,

就开始从代码上下文中找到add方法的定义。

使用参数值为方法定义的形式参数赋值,

执行方法体的语句,

使用return5把数值5返回(从什么地方调用就返回到哪里)

那么输出语句就变成System.out.println(5);


五,方法使用练习题01

class  MethodDemo2{

        public  static  void  main(String[]  args){

                //请使用方法(返回值),输出任意两个正数最大值

                System.out.println(compare(3,5));

        }

        //方法二要素:

        //形式参数:    2    int

        //返回值:    int

        public  static  int  compare(int  a,int  b){

                if(a>=b){

                        //a比b大,所以返回a

                        return  a;

                }else{

                        //a比b小,所以返回b

                        return  b;

                }

        }

}

方法使用练习题02

class  MethodDemo3{

        public  static  void  main(String[]  args){

                /*

                编写一个方法,返回任意两个数的乘积

                要求在main方法中接收这个乘积,在输出

                因为chengJi方法只有一个返回值,是double类型的,

                所以接收这个值也是必须使用double类型变量去接收

                */

                double  cj=chengJi(1.2*1.5);

                //如果方法有返回值,就可以调用它的方法中使用变量去接收

                //注意:接收变量的数据类型必须和方法的返回值类型一致。

                System.out.println("cj="+cj);             

        }

        //方法二要素:

        //形式参数:    2    double

        //返回值:    double

        public  static  double chengJi(double  x1;double  x2){

                return  x1*x2;

        }

}

方法使用练习题03

方法没有返回值

class  MethodDemo4{

        public  static  void  main(String[]  args){

                /*

                需求:输入一个m*n的由*号组成的矩形

                因为*号矩形是在方法体执行过程中使用输出语句完成

                所以没法返回,即这个方法不用返回。

            

                调用矩形的方法

                */

                juXing(5,4);

        }

        public  static  void  juXing(int   n,int   m){

                for(int  i=1;i<=n;i++){

                        for(int  x=1;x<=m;x++){

                                System.out.print("*");

                        }

                        System.out.println();

                }

        }

}

方法使用练习题04

在返回值类型为coid 的方法中使用return关键字

class  MethodDemo5{

        public  static  void  main(String[]  args){

                juXing(-1,6);

        }

        public  static  void  juXing(int  m , int  n){

                /*

                在方法体的代码执行之前会方法的形式参数值根据业

                务需求进行安全性校验,只有通过才会执行以下方法。

                对于方法入口的校验,往往使用以下代码。

                以下的if结构只是起到参数的正确性校验

                */

                if((m<=0) || (n<=0)){

                        System.out.println("m或者n不符合矩形要求");

                        return;

                }

                //以下代码是方法的主功能

                for(int  i=1;x<=n;i++){

                        for(int  x=1;x<=m;x++){

                                System.out.print("*");

                        }

                        System.out.println();

                }

        }

}


六,JVM常见内存分类

栈内存:

        栈内存主要放置

                局部变量

                每个方法的每次执行都会在栈内存中开辟空间

存放数据特点:

栈内存是按照栈数据结构来存储数据的。

数据是有序的,先进后出,后进先出。

处理数据特点:

栈内存的数据只要使用完,就立即释放空间。


栈内存是属于栈结构

栈结构是属于数据结构

数据结构:就是说明数据和数据之间的排列关系。

常见的数据结构:

栈结构:

        先进后出,先进后出

队形结构:

树形结构:


把数据放入栈内通常叫做进栈、入栈、压栈

把数据从栈内取出通常叫做出栈、弹栈

堆内存:

        堆内存

                放置new出来的所有事物(对象)

        方法区

                类的描述信息

                静态信息

                方法描述信息

                常量池


七,方法执行过程的内存解析

class  MethodDemo6{

        public  static  void  main(String[] a rags){

                double  cj=chengJi(1.2,1.5);

                System.out.println("乘积是:"+cj);

        }

        public  static  double  chengJi(double  x1, double  x2){

                return  1.2*1.5;

        }

}


注:X是表示内存释放。  

栈内存执行完,方法开始被释放,main方法不调用也被释放。

执行结果:乘积是:1.7999999999999998


八,基本数据类型做方法参数内存解析

class  MethodDemo7{

        public  static  void  main(String[]  args){

                int  i=10;

                System.out.println("1  i="+i);

                chengeValue(i);

                System.out.println("2  i="+i);

        }

        public  static  void  chengeValue(int  i){

                i=20;

                System.out.println("3  i="+i);

        }

}


执行结果:    1  i=10

                     3  i=20

                     2  i=10


基本数据类型做方法参数内存解析02

class  MethodDemo8{

        public  static  void  main(String[]  args){

                int  i=10;

                System.out.println("1  i="+i);

                i=chengeValue(i);

                System.out.println("2  i="+i);

        }

        public  static  int  chengeValue(int  i){

                i=20;

                System.out.println("3  i="+i);

                return  i;

        }

}                                      


执行结果:

                1  i=10

                3  i=20

                2  i=20


九,方法重载

1,在一个class内部


2,方法名称全部相同的方法


3,判断方法重载的条件

A,方法两两之间参数个数不同

B,方法两两之间对应位置,位置的参数的数据类型不同


4,从方法定义角度说明重载

A:方法重载和修饰符没有关系

B:方法重载和返回值类型没有关系

C:方法重载和方法体没有关系

D:方法重载和抛出异常类型没有关系

E:方法重载和方法名称有关系,方法名称必须相同

F:方法重载和形式参数没有关系,一个是方法之间的形式参数个数不同;

或者,一个是方法之间对应位置的形式参数的数据类型不同。


5,如果判断一个类中的两个方法之间发生了方法重载?(重点)

必须是名称相同

必须是参数不同

                参数个数不同

                对应位置的参数的数据类型不同


6,使用方法重载的时机?

通常在工具类中使用

工具类:为做某件事提高服务

class  MethodDemo9{

        public  static  void  main(String[]  args){

                add(2,3);

                add(1.23,1.24);

        }

        //求两个整数的和

        public  static  int  add(int  a,int  b){

                return  a+b;

        }

        /*

        已在类MethodDemo9中定义了方法add(int,int)            方法没有重载

        static  int  add(int  a,int  b){

                return  a+b;

        }

        已在类MethodDemo9中定义了方法add(int,int)            方法没有重载

        public  static  double  add(int  a,int  b){

                return  1.23;

        }

        已在类MethodDemo9中定义了方法add(int,int)            方法没有重载

        public  static  int  add(int  a,int  b){

                return  10;

        }

        */

        //求三个整数的和

        public  static  int  add(int  a,int  b,int  c){

                return  a+b+c;

        }

        //求两个小数的和

        public  static  double  add(double  a,double  b){

                return  a+b;

        }

}


十,递归

1,定义:递归就是方法在方法体内部调用自己(方法调用自己)。


2,递归二要素:

A,递归必须有一个出口,如果没有出口就是死递归。

B,找出计算规律

eg:5!=5*4*3*2*1


3,使用递归的注意事项

通常在正常编程中不常用递归解题

使用递归会不停地在栈内存开辟空间,如果递归次数过多,会造成栈内存的内存溢出。

其次,如果内存不溢出,但是递归数值过大,可能会超出。

最终结果所使用的数据类型范围,造成了最终结果并不符合要求。

所以递归具有以上的注意事项,通常在编程中多数使用循环解题。

class  DiGuiDemo{

        public  static  void  main(String[]  args){

                int  x=DiGui(5);

                System.out.println("x="+x);

        }

        public  static  int  DiGui(int  n){

                if(n==1){

                        return  n;

                }else{

                        return  n*DiGui(n-1);

                }

        }

}


 


十一,文档注释

1,作用:

文本注释除了有解释说明代码含义之外;

还可以借助java代码中的文本注释创建针对此代码的API文档。

Application(应用)    Program(程序)    Interface(接口)    程序如何使用说明书


2,语法:

/**

*

*/

其中的每行注释之前都有一个星号。


还会使用@特殊含义单词,来指明方法参数,返回值,或者异常类型……

@param        对方付的形式参数进行说明

@return        对返回值类型说明

@exception        对异常类型进行说明


再使用以下命令创建代码的API文档

javadoc    -d    目录名称    -version    -author    NoteDemo01.java

javadoc:说明要根据文档注释创建帮助文档。

-d:为了指明要把创建的所有说明文档都放在一个文件夹下,便于管理。

目录名称:指明存放帮助文档的文件夹名称

-version:指明要在帮助文档中输出版本

-author:指明要在帮助文档输出作者

NothDemo01.java:待创建帮助文档的代码(即文档注释写在其内部)

/**

*以下的类是为了计算两数的和

*@version    1.0

*@author    小明

*/

public  class  NoteDemo01{

        public  static  void  main(String[]  args){

        }

        /**

        *这个方法是求两个整数的和

        *@param    a加法因子

        *@param     b加法因子

        *return         和值

        */

        public  static  void  add(int  a,int  b){

                return  a+b;

        }

        /**

        *这个方法是求两个小数的和

        *@param        a加法因子

        *@param        b加法因子

        *return            和值

        */

        public  static  double  add(double  a,double  b){

                return  a+b;

        }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值