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 }

浙公网安备 33010602011771号