Java学习9:方法

方法

对于一个java程序来说,如果没有“方法”,代码无法得到复用。
提高复用性:可以定义一个方法,然后需要使用该功能得时候,直接调用一下方法即可,这样代码就得到复用了。
注意:
1、程序开始执行的时候是先执行main方法。因为main方法是一个入口。
2、在java语言中,所有的方法体中的代码都必须遵循自上而下的顺序依次逐行执行。
3、main方法不需要程序员手动调用,是由JVM调用的。但是除了main方法之外,都需要程序员手动调用,方法只有调用的时候才会执行。方法不调用是不会执行的。
4、方法定义在类体当中。
5、方法定义的先后顺序没有关系,都可以。
方法(method)是可以完成某个特定功能的并且可以重复利用的代码片段。
在c语言中,方法被称为函数。在java中不叫函数,叫做方法。
局部变量的特点,用过之后,内存空间就释放了。也就是之前说的,出了大括号就不认识了。

方法的语法机制

[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}
注意:[ ]符号叫做中括号,以上中括号里面的内容表示不是必须的,是可选的。
方法体由java语句构成。
关于修饰符列表:
修饰符列表不是必选项,是可选的。到目前为止,大家统一写成:public static 后面就理解应该怎么写了。
关于返回值类型:
第一:返回值类型可以是任何类型,只要java中合法的数据类型就行,数据类型包括基本数据类型和引用数据类型,也就是说,返回值类型可以是:byte short int long float double boolean char String.......
第二:返回值一般指的是一个方法执行结束之后的结果。通常是一个数据,所以被称为“值”,而且还叫“返回值”。
方法就是为了完成某特定功能,方法结束之后大部分情况下都是有一个结果的,而体现结果的一般都是数据。数据得有类型,这就是返回值类型。
第三:当一个方法执行结束不反悔任何值的时候,返回值类型也不能空白,必须协商void关键字。所以void表示该方法执行结束后不返回任何结果。方法执行结束后的返回值实际上是给调用者。谁调用就返回给谁。
第四:如果返回值类型不是void,那么你在方法体执行结束的时候必须使用“return 值;”这样的语句来完成“值”的返回,如果没有“return 值;”这样的语句那么编译器会报错。
“return 值;” 这样的语句的作用是“返回值”。返回方法的执行结果。
第五:有“return”关键字的语句执行,当前方法必然结束。
return只要执行,当前所在的方法结束,记住:不是整个程序结束。
第六:如果返回值类型是void,那么在方法体当中不能有“return 值;”这样的语句。但是可以有“return” 这样的语句。这个语句“return;”的作用就是用来终止当前方法的。
第七:除了void之外,剩下的都必须要有“return 值;”这样的语句。
关于方法名:
方法名要见名知意。方法名在标识符命名规范当中,要求首字母小写,后面每个单词首字母大写。只要是合法的标识符就行。
关于形式参数列表:
简称:形参。
形式参数列表中的每一个参数都是“局部变量”,方法结束之后内存释放。
形参的个数是:0~N个。
形参有多个的话使用“逗号”隔开,逗号是英文的。
形参的数据类型起决定性作用,形参对应的变量名是随意的。
关于方法体:
方法体由java语句构成。java语句以“;”结尾。
方法体当中编写的是业务逻辑代码,完成某个特定功能。
在方法体中的代码遵循自上而下的顺序依次逐行执行。
在方法体中处理业务逻辑代码的时候需要数据,数据来源就是这些形参。

方法的调用

语法:类名.方法名(实际参数列表)
方法的定义位置没有顺序要求
注意:实参和形参必须要一一对应,类型要对应,个数要对应

如何接收返回值?

使用变量来接受这个方法的返回值。
注意:变量的定义需要指定变量的数据类型,这个数据类型就应该是调用的那个方法的数据类型。当然,小容量是可以自动转换成大容量的。
当一个方法有返回值的时候,可以选择不接受这个值。只不过这样没有意义,一般程序返回了执行结果,都是需要接收这个结果的。

调用方法时,类名什么时候可以省略?

当一个java程序中,只有一个类的时候,我们可以省略掉“类名.”去调用方法,但是,当一个java程序中有多个类的时候,不能省略。
a方法调用b方法的时候,a方法和b方法都在同一个类中,“类名.”可以省略。如果不在同一个类中,“类名.”不能省略。
不止main方法可以调用其他方法,在其他方法中也可以调用方法。
记住:在任何一个方法体当中的代码都是遵循自上而下的顺序依次逐行执行的。

break与reurn有什么区别

break用来终止switch和离他最近的循环
return用来终止离他最近的一个方法。
在同一个域中,return语句下面不能在编写其他代码

JVM内存结构

JVM主要的三块内存空间.png

栈数据结构

关于数据结构.png

关于栈数据结构.png

方法执行时的内存变化

方法执行时的内存变化.png

代码简化

//在这里sum时一个方法
int i = sum(10,20);
System.out.println(i);
//简化后可以写成
System.out.println(sum(10,20))
//同理
//这里m()是一个方法
boolean flag = m();
if(flag){
  System.out.println("真的");
}
//简化后可以写成
if(m()){
  System.out.println("真的");
}

练习题

练习.png

第一题:

public class lianXi{
    public static void main(String[] args){
        java.util.Scanner s = new java.util.Scanner(System.in);
        System.out.print("请输入一个正整数:");
        int i = s.nextInt();
        lianXi.jieCheng(i);//调用jieCheng方法,计算i的阶乘
        
    }
    //定义一个计算阶乘的方法
    public static int jieCheng(int i){
        int ji = 1;
        for (int j = 1 ; j <= i ; j++ ){
            ji *= j;
        }
        System.out.println(i + "的阶乘为" + ji);
        return ji;
    }
}

第二题:

public class lianXi1{
    public static void main(String[] args){
        java.util.Scanner s = new java.util.Scanner(System.in);
        System.out.print("请输入一个正整数:");
        int n = s.nextInt();
        zuiXiaoZhiShu(n);//调用zuiXiaoZhiShu的方法,找出最小质数
    }
    //定义一个方法,判断数字是不是质数
    public static boolean shiFouZhiShu(int n){
        //判断这个n是不是质数
        for ( int i = 2; i < n ;i++ ){
            if(n % i == 0){
                return false;
            }
        }
        return true;
    }
    //定义一个用来打印最小质数的方法
    public static void zuiXiaoZhiShu(int n){
        while(true){
            n++;//n自加1
            //判断此时n是否为质数
            boolean flag = shiFouZhiShu(n);//调用shiFouZhiShu方法,判断是不是质数
            if (flag){
                System.out.println("大于您输入的正整数的最小质数为" + n);
                break;
            }
        }
    }
}

第二题代码升级:

public class lianXi11{
    public static void main(String[] args){
        java.util.Scanner s = new java.util.Scanner(System.in);
        System.out.print("请输入一个正整数:");
        int n = s.nextInt();
        zuiXiaoZhiShu(n);//调用zuiXiaoZhiShu的方法,找出最小质数
    }
    //定义一个方法,判断数字是不是质数
    public static boolean shiFouZhiShu(int num){
        //判断这个n是不是质数
        for ( int i = 2; i < num ;i++ ){
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }
    //定义一个用来打印最小质数的方法
    public static void zuiXiaoZhiShu(int n){
        while (!shiFouZhiShu(++n)){
        }
        System.out.println(n);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335