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);
}
}