Java初级学习(九)Java方法

1.方法的定义:

语句的集合,一个方法只完成一个功能。

System. out.  println()

    类      对象     方法

 

2.方法的格式

1)修饰符(可选):定义方法的访问类型

2)返回值数据类型:void表示返回空,即没有返回值;int表示返回int类型数据

3)方法名:包含方法名,参数表

3)参数类型:在定义方法时,参数是形参,形参用于在方法被调用时接受外界的数据。当方法被调用时,实际被传给方法的数据为实参。

4)方法体:定义该方法的功能

 

3.方法的调用:两种方式

对象名.方法名(实参列表)

1)当方法返回一个值时,方法调用通常被当做一个值

int larger=max(10,20);

 

2)当方法返回值为void时,方法调用一定是一条语句

System.out.println(“hello,world”);

 

5)值传递(Java)和引用传递

Java都是值传递

区别

 

4.方法重载

定义:在一个类中,方法名相同,但形参不同的方法。

规则:

1)方法名相同,参数列表不同(个数、数据类型、排列顺序)

2)返回值类型可以相同或不同,但只有返回类型不同不是方法重载

 1 public class Demo04 {
 2     public static void main(String[] args) {
 3         int max1=max(1,2);  //这里会根据返回是什么类型来判断调用哪一个max函数
 4         double max2=max(1.0,2.0);
 5         System.out.println(max1);
 6         System.out.println(max2);
 7     }
 8     public static int max(int a,int b){
 9         if (a==b){
10             return 0;
11         }
12         if (a>b){
13             return a;
14         }else {
15             return b;
16         }
17     }
18     public static double max(double a,double b){
19         if (a==b){
20             return 0;
21         }
22         if (a>b){
23             return a;
24         }else {
25             return b;
26         }
27     }
28 }

 

 

5.命令行传递参数

1 //命令行参数,在cmd中运行,接收并输出参数
2 public class Demo05 {
3     public static void main(String[] args) {
4         for (int i=0;i< args.length;i++){
5             System.out.println(""+i+"个词为"+args[i]);
6         }
7     }
8 }

运行如下

#javac Demo05.java 

  报错:编码GBK的不可映射字符

修改为javac Demo10.java -encoding utf-8

 

 

 

 #java Demo05

  报错找不到或无法加载主类 Demo05

    java.lang.NoClassDefFoundError: com/rzd/method/Demo05

 

 

 于是,退回到com目录前,也就是src目录下

修改命令为java com.rzd.method.Demo05  hello world,运行成功。

 

 

 

 6.可变参数

可变参数的格式为

public static void test(int... i)

规则:

1)在方法声明的参数列表中,在可变参数的数据类型后加...

2)一个方法只能指定一个可变参数,必须是方法的最后一个参数。

 

一个可变参数

 1 public class Demo06 {
 2     public static void main(String[] args) {
 3         //Demo06 demo06 = new Demo06();
 4         //demo06.test(1,2,3);
 5         test(1, 2, 3);
 6     }
 7 
 8     public static void test(int... i) {
 9         System.out.println(i[0]);
10         //System.out.println(i);这里输出i的话不能输出该数组的值
11     }
12 }

 

调用可变参数计算数组的最大值 

 1 public class Demo06 {
 2     public static void main(String[] args) {
 3         max(1,23,444.0,5,6.0,77);
 4     }
 5     
 6     public static void max(double... d){
 7         double result=d[0];
 8         if (d.length==0){
 9             System.out.println("no argument passed");
10             return;
11         }
12         for (int i=1;i<d.length;i++){
13             if (d[i]>result){
14                 result=d[i];
15             }
16         }
17         System.out.println("最大值为"+result);
18     }
19 }

 

 

7.递归方法

我们可以把” 递归 “比喻成 “查字典 “,当你查一个词,发现这个词的解释中的某个词仍然不懂,于是你开始查这第二个词。第二个词里仍然有不懂的词,于是查第三个词,这样查下去,直到有一个词的解释是你完全能看懂的,那么递归走到了尽头,然后你开始后退,逐个明白之前查过的每一个词,最终,你明白了最开始那个词的意思。(摘自知乎的一个回答)

 

当我们遇到一个问题时,我们是怎么判断该题用递归来解决的?

1)子问题需与原问题为同样的事,且规模更小;

2)程序具备停止条件。

 1 /*递归
 2 计算阶乘:n!=1*2*3*...*(n-1)*n
 3 f(1)=1;
 4 f(2)=2*f(2-1)=2*f(1)=2*1
 5 f(3)=3*f(3-1)=3*f(2)=3*2*f(2-1)=3*2*1
 6 f(n)=n*f(n-1)
 7  */
 8 
 9 public class Demo07 {
10     public static void main(String[] args) {
11         int f=f(10);
12         System.out.println(f);
13 
14     }
15     public static int f(int n){
16         if (n<1){
17             return 0;
18         }
19         //停止条件
20         if (n==1){
21             return 1;
22         }else{
23             return n*f(n-1);
24         }
25     }
26 }

 

posted @ 2021-06-28 12:45  阮真冬  阅读(43)  评论(0)    收藏  举报