Java方法详解
什么是方法
方法是语句的集合,在一起执行一个功能
- 方法包含于类中或者对象中、
- 方法在程序中被创建,在其他地方被引用
- 如System.out.println();意为System类中的out对象之中的方法println()
方法的定义及调用
方法定义
Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包括下面的语法:
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
-
方法大体上包含一个方法头、一个方法体
-
修饰符:可选的,告诉编译器如何调用该方法,定义该方法的访问类型
-
返回值类型:方法可能会有返回值,returnValueType为返回值的类型
若无返回值,则返回值类型为void关键字,不需要return 0;
返回值类型为void,return 0即为终止方法 -
方法名:方法的名称,方法名与参数表共同构成方法签名
-
参数类型:参数类型,即告诉调用者我需要的材料是什么,我要木头你不能给我塑料,且必须按要求的顺序给我,不能乱给我,这里声明的被称为形式参数,参数列表指的是:方法的参数类型、顺序和参数的个数。参数是可选的,可以没有参数
- 形式参数:在方法被调用时接受外界输入的数据
- 实参:调用方法时实际传给形式参数的数据
-
方法体:包含实际实现方法的语句,定义该方法的功能
//比较两个数的大小
public static int Bigger(int num1,int num2){
if(num1>=num2)
return num1;
else
return num2;
}
方法的调用
public static void main(String[] args) {
//调用方法
int max=Bigger(10,20);
System.out.println(max);
}
方法重载
重载就是在一个类中,方法的名字相同,但是参数列表不一样,编译器会根据调用者,传递的参数自动匹配相应的方法进行调用,若匹配不上,则直接报错(爆红)
- 方法重载的规则
- 方法的名字需要一致
- 参数列表必须不一样(个数、类型、或者排列顺序不同)
- 方法的返回类型可以相同也可以不相同
- 仅仅返回类型不一样不能实现方法的重载
承接上一个知识点,现在想在一个类里比较小数之间的大小
public static void main(String[] args) {
//调用方法
int max=Bigger(10,20);
//现在要比较两个小数之间的大小
double Max=Bigger(10.0,20.4);
System.out.println(Max);
}
//比较两个数的大小
public static int Bigger(int num1,int num2){
if(num1>=num2)
return num1;
else
return num2;
}
//比较两个小数的大小
public static double Bigger(double num1,double num2){
if(num1>=num2)
return num1;
else
return num2;
}
命令行传参
运行程序的过程中想要给程序传递参数,依靠命令行参数传递给main()方法来实现
传递给String[] args数组实现命令行传参
代码
public static void main(String[] args) {
//args.length表示数组的长度
for (int i = 0; i < args.length; i++) {
System.out.println("args["+i+"]"+args[i]);
}
}
实际执行流程
- 进入类文件所在位置
- 进入命令行界面
- 编译java类
编译时出现错误:编码GBK的不可映射字符
解决方案:设置编码方式
编译成功,而且生成了类文件
- 带参数执行java类,需要退回到src目录
可变参数
- JDK1.5开始,Java支持传递同类型的可变参数
- 在方法声明,在指定参数类型后加一个省略(…)
- 在一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明
小例子
public static void main(String[] args) {
test1(1,2,3,4);
//使用数组传递参数也可以
test1(new int[]{10,20,30,28});
test2(4,1,2,3);
}
public static void test1(int...i)
{
System.out.println("可变参数的长度为:" + i.length);
for (int x : i) {
System.out.println(x);
}
}
public static void test2(int n, int...i)
{
System.out.println("第一个参数为:" + n);
for (int x : i) {
System.out.println("其他的参数为:" + x);
}
}
运行结果
递归
递归就是A方法调用A方法自己
- 利用递归可以做到将问题分解,大事化小,小事化了,将大规模的问题转化为与原问题相比的较小的问题来解决
- 递归结构包括两个部分
- 递归头(终止条件):什么时候不调用自身方法。如果没有头,将陷入死循环
- 递归体:什么时候需要调用自身方法
小例子
求阶乘
public static void main(String[] args) {
System.out.println(f(5));
}
public static int f(int n)
{
if(n==1)
{
return 1;
}
else
{
return n*f(n-1);
}
}
运行结果