java中的方法

/*
    以下程序不使用“方法”,分析程序缺点有哪些?
        *以下代码都是完成两个int类型数据的和,相同的代码写了三遍(只不过每次参与求和的数据不同)。
        代码没有得到重复使用
        
        *应该在java语言中有这样一种机制
            -某个功能只需要写一遍。
            -要使用这个功能,只需要给这个功能传递具体的数据
            -这个功能完成之后返回一个最终的结果。
        这样代码就可以重复利用了,提高代码复用性。【这就是“方法”】

        *使用这个方法我们称为“调用/invoke”
*/
public class MethodTest01
{
    public static void main(String[] args){
        
        //需求1:请编写程序计算10和20的和,并将结果输出【功能:计算两个int类型的数据和】
        int a=10;
        int b=20;
        int c=a+b;
        System.out.println(a+"+"+b+"="+c);

        //需求2:请编写程序计算666和888的和,并将结果输出【功能:计算两个int类型的数据和】
        int x=666;
        int y=888;
        int z=x+y;
        System.out.println(x+"+"+y+"="+z);

        //需求3:请编写程序计算111和222的和,并将结果输出【功能:计算两个int类型的数据和】
        int m=111;
        int n=222;
        int s=m+n;
        System.out.println(m+"+"+n+"="+s);

        //以上的三个需求其实就是一个需求;
        //这个需求是:计算两个int类型数据的和,功能不同。
        //只不过每一次参与计算的具体数据不同。
    }
}

/*
    以下直接使用方法这种机制【这个例子不讲方法的语法】,分析程序的优点?
        *代码得到了重复使用
    
    方法得的本质:
        *方法就是一段代码片段,并且这段代码片段可以完成某个特定的功能,并且可以被重复的使用。
        *方法定义在类体中,在一个类体中可以定义多个方法,方法编写的位置没有先后顺序,可以随意。
        *方法体中不能在定义方法!
*/
public class MethodTest02
{
    public static void main(String[] args){
        
        //计算两个int类型数据的和
        MethodTest02.sumInt(10,20);
        MethodTest02.sumInt(666,888);
        MethodTest02.sumInt(111,222);
    }
    //方法
    //单独的定义一个方法
    //单独定义一个方法
    //该方法完成计算两个int类型数据的和,并且将结果输出
    public static void sumInt(int a,int b){
        int c=a+b;
        System.out.println(a+"+"+b+"="+c);
    }
}

/*
    关于java语言当中的方法:
        1、方法怎么定义,语法结构:
            [修饰符列表] 返回值类型 方法名(形式参数列表){
                方法体;
            }
        2、对以上的语法结构进行解释说明:
            2.1、关于修饰符列表
                *可选项,不是必须的
                *目前统一写成:public static【以后讲】
                *方法的修饰符列表当中有static关键字的话,怎么调用这个方法?
                    - 类名.方法名(实际参数列表);
            2.2、返回值类型
                
                * 什么是返回值?
                    一个方法是可以完成某个特定功能的,这个功能结束之后大多数都是需要返回最终执行结果的,
                    执行结果可能是一个具体存在的数据。而这个具体存在的数据就是返回值。
                
                * 返回值类型?
                    返回值是一个具体存在的数据,数据都是有类型的,此处需要指定的是返回值的具体类型。
                
                * 返回值类型都可以指定哪些类型呢?
                    java任意一种类型都可以,包括基本数据类型和所有引用数据类型
                
                * 也有可能这个方法执行结束后不返回任何数据,
                java中规定,当一个方法执行结束之后不反悔任何数据类型的话,
                返回值位置必须编写:void关键字。

                * 返回值类型可以是:
                    byte,short,int,long,float,double,boolean,char,String,void....
                
                * 返回值类型若不是void,则表示这个方法执行结束之后必须返回一个具体的数值。
                当方法执行结束的时候没有返回任何数据的话,编译会报错。
                返回值的代码编写:"return 值;",并且要求值的类型必须和“方法返回值类型”一致。不然编译会报错
                
                * 返回值是"void"的时候,在方法体中不能编写"return"语句。
                
                * 只要return语句执行结束,则return所在的方法结束
            2.3、方法名:
                * 只要是合法的标识符就可以
                * 方法名最好见名知意
                * 方法名最好是动词
                * 方法名命名遵守驼峰命名方式
                * 方法名首字母小写,后边每个单词首字母大写
            
            2.4、形式参数列表【形参】:
                * 形参是局部变量:int a; double b;float c; String s;....
                * 形参的个数可以是0~    N个
                * 多个形参之间用“逗号”隔开
                * 形参中起决定作用的是形参的数据类型,形参的名字就是局部变量的名字。
                * 方法在调用的时候,实际给这个方法传递的真实数据被称为:实际参数,简称实参
                * 实参列表和形参列表必须满足:
                    -  数量相同
                    -  类型对应相同
                例如:
                    方法定义
                    public static int sum(int 变量名,int 合法的标识符就行){//(int a,int b)是形参列表
                    }
                    方法调用
                    sum("abc","def");编译报错
                    sum(10,20);//(10,20)是实参列表

            2.5、方法体必须由大括号括起来,方法体中的代码有顺序,遵循自上而下的顺序依次执行。
            并且方法体由java语句构成,每一个java语句以“;”结尾
        
        3、方法这么调用?
            方法只定义不去调用时不会执行。只有在调用的时候才会执行。
            语法规则:《方法的修饰符中有static》
                类名.方法名(实参列表);这是一条java语句,表示调用某个方法,传递这样的实参。
*/
//public 表示公开的
//class 表示定义类
//MethodTest03是一个类名
public class MethodTest03 //表示定义一个公开的类,起名MethodTest03,由于是公开的类,所以源文件名必须:MethodTest03.java
{
    //类体
    //类体中不能直接编写java语句,除声明变量外
    //方法出现在类体中

    //方法
    //public表示公开的
    //static表示静态的
    //void表示方法执行结束之后不返回任何数据
    //main是方法名;主方法
    //(String[] args)形式参数列表,其中String[]是一种引用数据类型,args是一个局部变量的变量名
    //所以以下只有args这个局部变量的变量名是随意的
    //主方法就是需要这样固定编写,这是程序入口。【SUN公司规定的,必须这样写】
    public static void main(String[] args){
        //这里的程序是一定会执行的
        //main方法是JVM负责调用的,是一个入口位置
        //从这里作为起点开始执行程序
        //可以在这里编写java语句来电用其他的方法
        //调用MethodTest03的sum方法,传递两个实参
        MethodTest03.sum(10,20);//(10,20)实参列表【实际上执行到这里main方法暂停了,进入sum方法执行,sum方法执行结束,代表这一句语句执行结束,才会进入下一句接着执行】

        //一个方法可以被重复使用,重复调用
        int a=100;
        MethodTest03.sum(a,500);//(a,500)实参列表

        //再次调用方法
        int k=90;
        int f=10;
        MethodTest03.sum(k,f);//(k,f)实参列表
    }
    //自定义方法,不是程序入口
    //方法作用:计算两个int类型数据的和,不要求返回结果,但是要求将结果直接输出到控制台
    //修饰符列表:public static
    //返回值类型:void
    //方法名:sum
    //形式参数列表:(int x,int y)
    //方法体:主要任务是求和之后输出计算结果
    public static void sum(int x,int y){
        //int c=x+y;
        System.out.println(x+"+"+y+"="+(x+y));    
        //System.out.println(c);    
    }
}

/*
    方法的调用不一定在main方法中,可以在其他方法中。
    只要是程序可以执行到的位置,都可以去调用其他方法。
*/
public class MethodTest04
{
    public static void sum(int a,int b){
        System.out.println(a+"+"+b+"="+(a+b));
        MethodTest04.doSome();
    }
    public static void main(String[] args){
        
        MethodTest04.sum(1,2);
        System.out.println("HelloWorld!");
    }
    public static void doSome(){
        System.out.println("do some");
    }
}

//方法调用的时候实参和形参要求个数对应相同,数据类型对应相同。
//类型不同的时候要求能够进行相应的自动类型转换

public class MethodTest05
{
    public static void main(String[] args){
        //编译报错:参数数量不同
        //MethodTest05.sum();

        //编译错误:实参和形参的类型不是对应相同的
        //MethodTest05.sum(true,false);
        
        //可以
        MethodTest05.sum(10L,20L);
        
        //存在类型转换:int-->long
        MethodTest05.sum(10,20);

        //编译错误:参数类型不是对应相同的
        //Method.sum(3.0,10);

        //可以
        MethodTest05.sum((long)3.0,20);
    }
    public static void sum(long a,long b){
        System.out.println(a+"+"+b+"="+(a+b));
    }

}

 /*
    方法调用:
        1、方法中的修饰符列表中有static关键字,完整的调用方式是:类名.方法名(实参列表);
        2、但是有的时候“类名.”可以省略。
        3、同一个类中的方法调用可以省略“类名.”
 */
 public class MethodTest06
 {
     public static void main(String[] args){
        
        //调用方法
        MethodTest06.m();

        //对于方法的修饰符列表当中有static关键字的:“类名.”可以省略不写
        m();

        //调用其他类中的方法
        A.doOther();

        //省略类名
        //doOther();
     }
     public static void m(){
        System.out.println("m method execute!");
     }
 }
 class A
 {
     public static void doSome(){
        System.out.println("A's doOther method invoke!");
     }
 }

/*
    分析程序输出结果
        main begain
        m1 begain
        m2 begain
        m3 begain
        m3 over
        m2 over
        m1 over
        main over
*/
public class MethodTest07
{
    public static void main(String[] args){
        System.out.println("main begain");
        m1;
        System.out.println("main over");
    }
    public static void m1(){
        System.out.println("m1 begain");
        m2;
        System.out.println("m1 over");
    }
    public static void m2(){
        System.out.println("m2 begain");
        m3;
        System.out.println("m2 over");
    }
    public static void m3(){
        System.out.println("m3 begain");
        System.out.println("m3 over");
    }
}

/*
    方法的返回值类型不是"void"的时候
        1、一个方法有返回值的时候,当我们调用这个方法的时候,方法返回了一个返回值,
        但对于调用者来说,这个返回值可以选择接收,也可以选择不接收。
        但是大部分情况下我们都是接收的。
*/
public class MethodTest08
{
    public static void main(String[] args){

        divide(10,3);//这里没有接收这个方法返回的数据

        int s=divide(10,3);
        
    }

    /*
        需求:
            请求定义并实现一个方法,该方法可以计算两个int类型数据的商,
            要求将最终的计算结果返回给调者。
    */
    //编译报错:缺少返回语句
    /*
    public static int divide(int a,int b){
    
    }
    */

    //编译报错:缺少返回值
    /*
    public static int divide(int a,int b){
        return;
    }
    */
    public static int divide(int a,int b){
        System.out.println(a+"/"+b+"="+(a/b));
        return a/b;
    }
}

/*
    return语句:
        *带有return语句的关键字的java语句只要执行,所在方法执行结束。

        *在“同一个作用域”中,return语句下面不能编写任何代码,因为这些代码执行不到
*/
public class Method Test09
{
    public static void main(String[] args){
    
    }
    //编译报错:缺少返回语句,以下程序编译器认为
    //
    /*
    public static int m(){
        int a=10;
        if(a>3){
            return 1;
        }
    }
    */
}

/*
    在返回值类型是void的方法中使用"return;"语句。
    "return;"语句出现在返回值为void的方法中主要是为了终止方法的执行。
*/
public class MethodTest10
{
    public static void main(String[] args){
        m();
    }
    //编译错误:对于结果类型为空的方法,无法返回值
    /*
    public static void m(){
        return 10;
    }
    */

    /*
    public static void m(){
        return;
    }
    */

    public static void m(){
        for(int i=0;i<10;i++){
            if(i==5){
                return; //不是终止for循环,终止的是m()方法
                //break;  //终止的是for循环
            }
            System.out.println(i);
        }
        System.out.println("HelloWorld");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值