一、方法
1.什么是方法
System.out.println()
System是系统类,out是标准输出对象,println()是一个方法
这句话是调用系统类System中的标准输出对象out中的方法printlin()
- 方法是解决一类问题的步骤的有序组合。
- 方法包含于类或者对象中。
- 方法在程序中被创建,在其他地方被引用。
2.方法的优点
-
使程序变得简短和清晰。
-
有利于维护程序。
-
提高程序的开发效率。
-
提高了代码的重要性。
二、方法的定义
修饰符 返回值类型 方法名(参数类型 参数名){
方法体
return 返回值;
}
- 修饰符:是可选的,告诉编译器如何调用该方法,定义了该方法的访问类型。
- 返回值类型:方法返回值的数据类型,有的方法执行操作后没有返回值,用void关键字。
- 方法名:该方法的名称。
- 参数:包含参数类型和参数名字,参数是可选的,方法可以不包含任何参数,调用改方法时,传递值给该参数。
- 形式参数:在方法被调用时用于接收外界输入的数据。
- 实际参数:调用方法时实际传给方法的数据。
- 方法体:方法中的执行语句,定义该方法的功能。
三、方法的调用
-
当方法返回一个值的时候,方法调用通常被当作一个值。例如:
int max = max(5,10)
-
当方法返回值是void,方法调用的一定是一条语句。例如:
System.out.println("Hello,World!")
-
Java中只有值传递。
public static void main(String[] args) {
int max = max(50, 20);
System.out.println(max);
//调用max方法,输出大的值。返回值。
}
//比大小 max方法
public static int max(int num1,int num2){
int result = 0;
if (num1==num2){
System.out.println("num1==num2");
return 0;//终止方法
}
if (num1>num2){
result = num1;
}else {
result = num2;
}
return result;
}
- 非静态方法,没有使用static修饰符修饰的方法,调用这种方法的时候,一定要使用对象。
- 静态方法,使用static修饰符修饰的方法,调用这种方法的时候,可以用对象,也可以使用类来调用。推荐后者。
- 类中方法中的调用,两个方法都是静态或者非静态都可以互相调用,当一个方法是静态,一个方 法是非静态的时候,非静态方法可以调用静态方法,反之不能。
四、方法的重载
方法重载:一个类中可以有俩个方法具有相同的名字,但是这俩个方法有不同的参数列表,即参数个数不同,或者参数个数相同,但所对应的参数类型不同。
public static int add(int a,int b){
int sum = 0;
sum = a + b;
return sum;
}
//方法重载,方法名字必须相同,参数类型或参数个数或者参数排列顺序不同。
public static int add(int a,int b,int c){
int sum = 0;
sum = a + b;
return sum;
}
五、命令行传参(了解)
有时候希望在运行一个程序时在传递给塔信息,这要靠传递命令行参数给main()函数实现。
错误:找不到或无法找到加载主类。
解决方法:在项目输出的项目目录下执行java命令,写完整路径即可。
六、可变参数
在方法声明中,在指定参数类型后加一个省略号(…)实现可变参数的声明。可变参数在一个方法中只能有一个,而且必须是该方法的最后一个参数。
//double... numbers 可变参数
public static void printMax(double... numbers) {
if (numbers.length == 0){
System.out.println("No argument passed");
return;
}
double result = numbers[0];
//排序!
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > result){
result = numbers[i];
}
}
System.out.println("The max value is"+result);
}
七、递归
递归:A方法调用A方法,即自己调用自己,设计递归算法时,要明白什么时候自己不调用自己,否则就是一个死循环。递归包括俩个部分:
- 递归头:什么时候不调用自身,没有递归头就会陷入死循环。
- 递归体:什么时候自己调用自己。
public static void main(String[] args) {
Demo07 demo07 = new Demo07();
System.out.println(demo07.f(3));
System.out.println(f(2));
}
//阶乘 3! 3*2*1
public static int f(int a){
if (a == 1){
return 1;
}else{
return a*f(a -1);
}
}
//边界条件:阶乘,乘到最后一个数,即1的时候,返回1,程序执行到底。
//递归前进段:当前的参数不等于1的时候,继续调用自身。
//递归返回段:从最大数开始乘,比如5的阶乘,就是5*(5-1),即n*(n-1).
递归和迭代的区别:
递归易于理解,容易编程,采取栈机制,对于嵌套层数深(深度大)的一些算法,就会占用大量的内存空间,时间开销也会增加,空间上内存会崩溃。
迭代不容易理解,编写复杂问题时困难,效率高,运行时间因循环次增加而增加,没有额外开销,空间上也没什么增加。
八、小练习
package com.feng.method;
import java.util.Scanner;
//简易加减乘除计算器
public class JiSuanQi {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double a = 0;
double b = 0;
String fh = "0";
if (scanner.hasNextDouble()){
a = scanner.nextDouble();
fh = scanner.next();
b = scanner.nextDouble();
}
switch (fh) {
case "+":
System.out.println(a+"+"+b+"="+(a+b));
break;
case "-":
System.out.println(a+"-"+b+"="+(a-b));
break;
case "*":
System.out.println(a+"*"+b+"="+(a*b));
break;
case "/":
System.out.println(a+"/"+b+"="+(a/b));
break;
default:
System.out.println("请输如正确内容");
}
scanner.close();
}
}