方法
方法的定义
方法就是一段可重复调用的代码段,例如:有某段长度约100行的代码,要在多个地方使用此段代码,如果在各个地方都重复编写此部分代码的话,则肯定会比较麻烦,而且此部分代码如果修改的话也比较困难,所以此时可以将此部分代码定义成一个方法,以供程序反复调用。方法名称后小括号里的参数叫形参。传递的值叫实参,接收的值叫形参。
方法的定义格式:
public static 返回值类型 方法名称(类型 参数1,类型 参数2,…){
方法的主体
程序语句 ;
[return 表达式];
}
在本节中定义的方法,因为其可以直接使用主方法(main())调用,所以将方法声明处加上了public static两个关键字
定义一个方法,在主方法中进行调用
public class MethodDemo01 {
public static void main(String[] args) {
printInfo() ; // 调用printInfo()方法
printInfo() ; // 调用printInfo()方法
printInfo() ; // 调用printInfo()方法
System.out.println("Hello World!") ;
}
// 此处由于此方法是由main方法直接调用所以一定要加上public static
public static void printInfo() { // 此处方法没有返回值
char c[] = {'H','e','l','l','o',',','L','X','H'}; // 定义一个字符数组
for (int x = 0; x < c.length; x++) { // 循环输出
System.out.print(c[x]) ;
}
System.out.println("") ; // 换行
}
}
有返回值的方法
public class MethodDemo02 {
public static void main(String[] args) {
int one = addOne(10, 20); // 调用整数的加法操作
float two = addTwo(10.3f, 13.3f); // 调用浮点数的加法操作
System.out.println("addOne的计算结果:" + one) ;
System.out.println("addTwo的计算结果:" + two) ;
}
// 定义方法,完成两个整数的加法操作,方法返回一个int型数据
public static int addOne(int x, int y) {
int temp = 0; // temp为局部变量,只在此方法中有效
temp = x + y; // 执行加法计算
return temp; // 返回计算结果
}
// 定义方法,完成两个浮点数的加法操作,方法返回一个float型数据
public static float addTwo(float x, float y) {
float temp = 0; // temp为局部变量,只在此方法中有效
temp = x + y; // 执行加法计算
return temp; // 返回计算结果
}
}
//要想没有返回值需要在定义方法时定义void类型,方法的使用是通过方法名加参数的形式调用,调用时方法名后传入的值称为实参。
方法的重载
方法的重载就是方法名称相同,但参数的类型和参数的个数不同,通过传递参数的个数及类型不同以完成不同功能的方法调用。
public class MethodDemo03 {
public static void main(String[] args) {
int one = add(10, 20); // 调用有两个参数的整型加法
int two = add(10, 20, 30); // 调用有三个参数的整型加法
float three = add(10.3f, 13.3f); // 调用有两个参数的浮点型加法
System.out.println("add(int x, int y)的计算结果:" + one) ;
System.out.println("add(int x, int y, int z)的计算结果:" + two);
System.out.println("add(float x, float y)的计算结果:" + three);
}
public static int add(int x, int y) { // 定义add方法,完成两个整数相加
int temp = 0; // 定义局部变量
temp = x + y; // 执行加法计算
return temp; // 返回计算结果
}
public static int add(int x, int y, int z) { // 定义add方法,完成三个整数相加
int temp = 0; // 定义局部变量
temp = x + y + z; // 执行加法操作
return temp; // 返回计算结果
}
public static float add(float x, float y) { // 定义add方法,完成两个浮点数相加
float temp = 0; // 定义局部变量
temp = x + y; // 执行加法操作
return temp; // 返回计算结果
}
}
//方法的重载一定只是在参数上的类型或个数不同
方法的递归调用
递归调用是一种特殊的调用形式,是方法自己调用自己 。
package demo0301;
import java.util.Scanner;
public class Test4 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入从1-累加的值:");
int a=in.nextInt();
System.out.print("从1到"+a+"的累加值为:"+sum(a));
}
public static int sum(int num){
if(num==1) {
return 1;
}else {
return num+=sum(num-1);
}
}
}
//执行流程 输入一个数字100
调用sum方法100传递到形参num中
判断num是否为1不是就累加num+(num-1)
是的话返回1 递归调用方法
100+sum(99)+sum(98)+......1
从return 1到sum(100)的累加
输入年月日计算是当年的第几天
package demo0301;
import java.util.Scanner;
/*
* 输入年月日计算是当年的第几天
*/
public class Test5 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入年份:");
int n=in.nextInt();
System.out.println("请输入月份:");
int y=in.nextInt();
System.out.println("请输入日子:");
int r=in.nextInt();
System.out.println(n+"年"+y+"月"+r+"日在那一年中是第"+nyr(n,y,r)+"天!");
}
public static int nyr(int n,int y,int r) {
int sum=0;//累加天数变量
if((n%4==0&&n%100!=0)||n%400==0) {//判断是否为闰年
System.out.print(n+"是一个闰年!");
for(int i=1;i<y;i++) {
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) {
sum+=31;
}else if(i==2) {
sum+=29;
}else {
sum+=30;
}
}
sum=sum+r;
return sum;
}else {
System.out.print(n+"不是一个闰年!");
for(int i=1;i<y;i++) {
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) {
sum+=31;
}else if(i==2) {
sum+=28;
}else {
sum+=30;
}
}
sum=sum+r;
return sum;
}
}
}
1.当进行方法调用的时候,如果形参是基本数据类型,被调用的方法内部对形参的改变不影响实参。
2.当进行方法调用的时候,如果形参是引用数据类型,被调用的方法内部对形参的改变可以影响实参。
public static void main(String[] args) {
int a[]= {1,2,3,4,5};
increase(a);
System.out.println(a[0]);
}
public static void increase(int[] nums){
nums[0]++;
System.out.println(nums[0]);
}
输出结果: 2
2
3.字符串是个特殊情况。.当进行方法调用的时候,如果形参是字符串,被调用的方法内部对形参的改变不影响实参。字符串拼接过程中出现变量,会重新生成一个新的字符串,并且新的字符串在堆中。