> 文档中心 > 狂神JAVASE系列-03方法篇

狂神JAVASE系列-03方法篇


1.0 方法的定义及其调用

      

      

 调用系统类 System 中的标准输出对象 out 中的方法 println()

Java方法可以理解成其他编程语言中的函数,将某一类功能抽象出来,也就是解耦,目的也是为了可扩展性,即:方法就是完成特定功能的一段代码。

那么如何定义方法?

        语法格式:      

修饰符 返回值类型 方法名(参数类型 参数名){    ...    方法体    ...    return 返回值;}

代码示例:    

public class Demon01 {    //main方法    public static void main(String[] args) { int sum = add(1,2); System.out.println(sum); test();    }    //加法方法    public static int add(int a,int b){ return a+b;    }    public static void test(){ //循环输出1-1000之间能被5整除的数,并且每行输出3个 for (int i = 0; i < 1000; i++) {     if(i%5==0){  System.out.print(i+"\t");     }     if(i%(5*3)==0){  System.out.println("\n");     }    }

 参数说明:(参考Javav-菜鸟教程:)    

  • 修饰符:修饰符(可选参数)告诉编译器如何调用该方法以及定义了该方法的访问类型。
  • 返回值类型方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法没有返回值,那么关键字为void
  • 方法名一个方法具体叫什么?。
  • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
  • 方法体:方法体包含具体的语句,定义该方法的功能。

 *方法调用

*注:若方法返回值是void,方法调用一定是一条语句。

代码示例

public class Demon02 {    public static void main(String[] args) { int shuru = max(1,1);  //方法调用 System.out.println(shuru);    }    public static int max(int num1,int num2){ if(num1==num2){     System.out.println("num1==num2");     return 0; } if(num1>num2){     return num1; }else {     return num2; }    }}

  分析:上述代码包含 两个方法,分别是main 方法和 max 方法。

其中,main 方法是被 JVM 调用的,除此之外,main 方法和其它方法没什么区别。

main 方法的头部是不变的:

public static void main(String[] args) {}

public 和 static为修饰符,返回 void 类型值,方法名字是 main, String[] 类型参数。String[] 表明参数是字符串数组。

2.0 值传递

        定义一个方法需要传参,例如上述方法max(int a,int b),那么调用此方法时,需要提供参数且必须按照参数列表指定的顺序提供。

代码示例:    

public class Demon03 {    public static void main(String[] args) { int num1 = 1; int num2 = 2; System.out.println("交换前 num1 的值为:" +  num1 + " ,num2 的值为:" + num2); swap(num1, num2); //方法调用    }    /** 定义swap方法, */    public static void swap(int a1, int a2) { int temp = a1; a1 = a2; a2 = temp; System.out.println("\t\t交换后 n1 的值为 " + a1  + ",n2 的值:" + a2);    }}

        说白了,如果这个方法需要传参,那么传参的要按照顺序来进行。要做到实参和形参一一对应。

3.0 方法重载

  代码示例:

    public static int max(int num1,int num2){ if(num1==num2){     System.out.println("num1==num2");     return 0; } if(num1>num2){     return num1; }else {     return num2; }   

        分析上述代码:上述定义的max方法只能比较两个int型数据。如果想比较1.2和2.2,即比较两个浮点数值的大小怎么办?  

    public static int max(float num1,float num2){ if(num1==num2){     System.out.println("num1==num2");     return 0; } if(num1>num2){     return num1; }else {     return num2; }

        我们将max方法中传参的类型改为float即可实现我们的需求。那么创建一个有相同方法名但是参数不同的方法,就像上面那样,这叫什么?---------------->方法重载

        谈到这边呢,容易产生一个问题:既然两个方法名都一样,那么我在调用的时候怎么调?,也就是程序如何知道我是想比较int型还是float型?

        示例: 

public class Demon04 {    public static void main(String[] args) { //显然,方法名一样,但是程序会根据传递参数的类型,来准确的识别该调那种 int result1 = max(10,20);   double result2 = max(1.2,1.1); System.out.println(result1); System.out.println(result2);    }    public  static  int max(int a,int b){ if(a>b){     return a; }else {     return b; }    }    public  static  double max(double a,double b){ if(a>b){     return a; }else {     return b; }    }}

       分析上述可知: 根据传递参数的类型,即可确定时该如何调用的问题。也就是如果传递的是int型参数,则那么int型参数的max方法就会被调用,反之亦然。

方法重载总结:

  • 一个类中具有相同的方法名但是具有不同的参数列表(什么是方法重载,3个条件)
  • 什么是不同的参数列表?例如参数个数不同,类型不同,参数排列顺序不同等)
  • 重载的方法必须拥有不同的参数列表。不能仅仅依据修饰符或者返回类型的不同来重载方法。那么有个隐含的条件在这里,就是这个修饰符和返回类型可以一样。
  • Java编译器根据参数列表的差异性进而判断哪个方法应该被调用。
  • 方法重载有什么好处?可以让程序更清晰易读。执行密切相关任务的方法应该使用相同的名字

4.0 构造方法

        构造方法和它所在类的名字相同,但构造方法没有返回值。

        不管你是否自定义构造方法,所有的类都有构造方法,因为 Java 自动提供了一个默认构造方法,默认构造方法的访问修饰符和类的访问修饰符相同(类为 public,构造函数也为 public;类改为 protected,构造函数也改为 protected)。

一旦你定义了自己的构造方法,默认构造方法就会失效。(菜鸟教程)

 

5.0 命令行传参(了解即可)

        有时候希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。

命令行参数是在执行程序时候紧跟在程序名字后面的信息。

public class CommandLine {   public static void main(String[] args){for(int i=0; i<args.length; i++){  System.out.println("args[" + i + "]: " + args[i]);      }   }}

         注:如果想直接运行一个class文件,需要找到其包路径,然后才能加载,否则是执行不了的。如上面报错一样,必须回退到这个src。

6.0 可变参数

  •  JDK1.5开始,Java支持传递同类型可变参数给一个方法
  • 在方法声明中,在指定参数类型加一个省略号
    public class Demon05 {    public static void main(String[] args) { Demon05 demon05 = new Demon05(); demon05.test(1); demon05.test(1,2,3,4,5);     }//你也不知道你要传递几个参数    public void test(int ... i){ System.out.println(i[0]);    }}
  • 一个方法中只能指定一个可变参数,且必须是方法的最后一个参数,任何普通的参数在它之前进行声明。例如 int x, int ... i就不会报错,而int ... i,int x就会报错。
  • int... i 这个参数必须都是int  也就是是一个类型的。

示例:

        

代码示例:   

public class Demon05 {    public static void main(String[] args) { //调用可变参数的方法 printMax(34,3,3,2,56.5); printMax(new double[]{1,2,3});    }    public static  void  printMax(double... numbers){ if(numbers.length==0){     System.out.println("No argument"); } double result = numbers[0]; //排序 for (int i = 1; i result){  result = numbers[i];     } } System.out.println("The max value is"+ result);    }}