方法:函数主要用于封装具有独立功能的一段代码,用于定义课重用的代码以及组织和简化编码。
1、定义方法
方法的定义由方法名称、参数、返回值类型以及方法体组成。
1.1方法参数写的时候要加上数据类型(int n ,double b).
1.2参数列表根据需要进行书写,也可以没有
1.3如果方法要返回数据,返回值类型就写上相应的类型名,如果不返回,应该填写void.
1.4方法体中,有返回值需要用return返回,没有的话就不需要,但其实默认写了return,但后面什么都不跟。
1.5方法不能放在class外 也不能放在其他函数内
2.调用方法
方法的调用时执行方法中的代码。(假如已经定义方法 public static int max(int a,int b) )
1.有返回值的方法 通常就当一个值处理,可以打印,赋值,运算。
int larger = max(3,4); System.out.println(max(3,4));
注意:在Java中,带返回值的方法也可以当作语句调用,这种情况下,调用者只需要忽略返回值即可。
2.每当调用一个方法时, 系统会创建一个活动记录(也称为活动框架 ), 用于保存方法的参数和变量。 活动记录置于一个内存区域中, 称为调用堆栈(call stack)。 调用堆栈也称为执行堆栈、 运行时堆栈, 或者一个机器堆栈, 常简称为 “堆栈”。 当一个方法调用另一个方法时,调用者的活动记录保持不变,一个新的活动记录被创建用于被调用新的方法。一个方法结束返回到调用者时,其相应的活动记录也被释放。
3.局部变量:在函数中定义的变量
随着函数进栈而存在
随着函数出栈而消亡
4.没有返回值的方法
class test{
public static void main(String[] args){
print();
}
public static void print(){
System.out.println("你好!");
}
}
//程序输出 你好
可以看到,方法体中没有return语句。
使用方法的优点:减少代码的冗余,提高代码的复用率
3.重载方法
假如当我们完成两个整数相加这个方法时,使用了add这个方法名,那完成两个浮点数的相加,起名字应该怎么起?Java中有重载方法可以解决这类问题,当方法体完成的功能类似,但是参数列表的数据类型和个数不同,就可以用到重载方法。也就是说, 在一个类中有两个方法, 它们具有相同的名宇, 但有不同的参数列表。 Java 编译器根据方法签名决定使用哪个方法。
public static int add(int a, int b ){
return a+b;
}
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.有时调用一个方法 ,会有两个或更多可能的匹配,但是编译器无法判断哪个是最精确的匹配,这就需要我们在定义方法 时,考虑到这个问题。
4.自顶向下的设计
在写代码时,主方法中尽量展现程序的逻辑思路,而不是具体的细节,具体的细节我们应该把它写成方法,用到的时候由主方法进行调用。这样做的好处有:1.更简单的程序,使程序易于理解
2.重用方法,定义了一次的方法,可以多次调用。
3.易于开发、调试和测试,代码出现错误,可以只修改方法,而不是修改所有代码
4.方便团队合作,当一个大问题分解为许多子问题,各个子问题可以分配给不同的人员进行解决。
总结:1.程序模块化和课重用性时软件工程的中心目标之一。方法就是这样一个结构。
2.方法头指定方法的修饰符、返回值类型、方法名和参数。
3.方法可以返回一个值,也可以不返回。
4.传递给方法的实际参数应该与方法签名中的形式参数具有相同的数目、类型和顺序。
5.方法可以重载。
编程题:
import java.util.Scanner;
class Class25{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入数字:");
long a = input.nextLong();
System.out.println(sumDigits(a));//调用分解数字的方法
}
public static int sumDigits(long n){//分解数字
int sum = 0; //存储各个数字之和
while(n != 0){
sum +=n % 10;
n /= 10;
}
return sum; //返回值
}
}
import java.util.Scanner;
class Class26{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入数字");
int number = input.nextInt();
if(isPalindrome(number)){ //调用方法
System.out.println("是回文数");
}else{
System.out.println("不是回文数");
}
}
public static int reverse(int number){ //翻转数字
int revNumber = 0;
while(number != 0){
revNumber = revNumber * 10 + number % 10;
number /= 10;
}
return revNumber; //返回翻转的数字
}
public static boolean isPalindrome(int number){ //比较翻转的数字是否与原来相同
int revNumber = reverse(number);
return revNumber == number; //返回
}
}