示例代码
public class Demo01_what { //main方法 public static void main(String[] args) { //实际参数,实际调用给他的参数 int sum = add(1, 2); System.out.println(sum);//输出3 } //加法 //形式参数,用来定义作用 public static int add(int a,int b){ return a+b; } }
语法格式
修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体; ... return 返回值; }
代码示例
public class Demo02_definition { public static void main(String[] args) { int large = max(10,20); System.out.println(large);//输出20 } //比大小 public static int max(int num1,int num2){ int result = -1; if(num1==num2) { System.out.println("两个数一样大"); return 0;//终止方法 } else if(num1>num2){ result = num1; }else { result = num2; } return result; } }
调用方法:对象名.方法名(实参列表)
Java支持两种调用方法的方式,根据方法是否返回值来选择。当方法返回一个值的时候,方法调用通常被当做一个值。例如:
int larger = max(30,40);
如果方法返回值是void,方法调用一定是一条语句。
System.out.println( "Hello,kuangshen!" );
代码示例
java的按值调用改变对象内容
public class Demo03_passByValue_passByReference { public static void main(String[] args) { A a = new A(); setA(a,20); System.out.println(a.num);//输出结果为20 } public static void setA(A a,int x){ a.num = x; // 这里是改变a指向对象 a = new A();//这里的改变a,因为a是复制出的,所以并不会影响实参a指向的对象 } } class A{ int num = 10; }
通俗的例子
你有一把钥匙,当你的朋友想要去你家的时候,如果你直接把你的钥匙给他了,这就是引用传递。这种情况下,如果他对这把钥匙做了什么事情,比如他在钥匙上刻下了自己名字,那么这把钥匙还给你的时候,你自己的钥匙上也会多出他刻的名字。
你有一把钥匙,当你的朋友想要去你家的时候,你复刻了一把新钥匙给他,自己的还在自己手里,这就是值传递。这种情况下,他对这把钥匙做什么都不会影响你手里的这把钥匙。
但是,不管上面哪种情况,你的朋友拿着你给他的钥匙,进到你的家里,把你家的电视砸了。那你说你会不会受到影响?所以上面的java代码就是用新钥匙改变了你家之后,又把新钥匙改变成一个开其他人家的钥匙,对于旧钥匙并没有改变。
方法重载举例
public static int max(int num1,int num2){} public static double max(double num1,double num2){} public static int max(int num1,int num2,int num3){}
错误方法重载举例
int max(int num1,int num2){}//1 int max(int num2,int num1){}//2
参数排列顺序不同,这里的num1和num2的类型都是int,所以是等价的,改变顺序之后对于方法来说还是同一个方法。就例如调用方法是max(10,20),编译器是不知道调用方法1还是方法2的,因为都是两个int类型。
有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。
代码
public class Demo05_commondLine { //args.length 数组长度 public static void main(String[] args) { for (int i = 0; i < args.length; i++) { System.out.println("args["+i+"]:"+args[i]); } } }
编译执行
代码示例
public class Demo06_varyingParameter { public static void main(String[] args) { //调用可变参数的方法 Demo06_varyingParameter demo06_varyingParameter = new Demo06_varyingParameter(); demo06_varyingParameter.printMax(1.0,2.0,3.0,4.0); demo06_varyingParameter.printMax(new double[]{1.0,2.0,3.0}); demo06_varyingParameter.printMax(); } public void printMax(double... numbers){ if(numbers.length==0){ System.out.println("no argument");//没有参数 return; } double result = numbers[0]; //顺序比较,取最大值 for (int i = 0; i < numbers.length; i++) { if(numbers[i]>result) result = numbers[i]; } System.out.println("the max value is"+result); } }
运行结果
代码示例
public class Demo07_recursion { public static void main(String[] args) { System.out.println(f(5));//输出结果为120 } // 1! 1 // 2! 2*1 // 3! 3*2*1 // 4! 4*3*2*1 // 5! 5*4*3*2*1 public static int f(int n){ if(n==1){ return 1; } else { return n * f(n - 1); } } }
图解