Java 方法

1. 引入

举例

  System.out.println()
  • println() 是一个方法
  • System 是系统类
  • out 是标准输出对象

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

2. 方法定义

语法

  访问修饰符 返回值类型 方法名(参数列表){  
      方法体
  }
  • 方法名命名规范,参见:Java 基本语法:3.Java 标识符

  • 如果方法的返回类型为 void ,则方法中不能使用 return 返回值。

  • 方法也分为实例方法和类方法,加上关键字 static 的就是类方法。需要注意的是,构造方法是特殊的方法,不能用 static 修饰。而且类方法只能对类变量进行操作,也只能调用类中的类方法。当创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,则不再分配入口地址,也就是说,方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址。从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。

示例

public class TestMax {
  /** 主方法 */
  public static void main(String[] args) {
     int i = 5;
     int j = 2;
     int k = max(i, j);
     System.out.println( i + " 和 " + j + " 比较,最大值是:" + k);
  }

  /** 返回两个整数变量较大的值 */
  public static int max(int num1, int num2) {
     int result;
     if (num1 > num2)
        result = num1;
     else
        result = num2;

     return result; 
  }
}

这个程序包含 main 方法和 max 方法。main 方法是被 JVM 调用的,除此之外,main 方法和其它方法没什么区别。main 方法的头部是不变的,如例子所示,带修饰符 public 和 static,返回 void 类型值,方法名字是 main,此外带个一个 String[] 类型参数。String[] 表明参数是字符串数组。

Java的参数传递为值传递。也就是说,当我们传递一个参数时,方法将获得该参数的一个拷贝。实际上,我们传递的参数,一个是基本类型的变量,另一个为对象的引用。基本类型变量的值传递,意味着变量本身被复制,并传递给Java方法。Java方法对变量的修改不会影响到原变量。引用的值传递,意味着对象的地址被复制,并传递给Java方法。Java方法根据该引用的访问将会影响对象。

3. 方法重载

方法重载是多态性的一种,在进行方法重载的时候需要遵循以下的规则:

  • 在使用方法重载的时候,必须通过方法中不同的参数列表来实现方法的重载。
  • 不能通过访问权限,返回值类型和抛出的异常来实现重载。
  • 重载的方法中允许抛出不同的异常。
  • 可以有不同的返回值类型,可以有不同的访问修饰符,只要方法的参数列表不同即可。

4. 命令行参数

有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给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]);
     }
  }
}

运行结果:

5. 可变参数

JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。
方法的可变参数的声明如下所示:

typeName... parameterName

在方法声明中,在指定参数类型后加一个省略号(...) 。

一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

示例

public class VarargsDemo{
  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 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);
     }
  }
}

以上实例编译运行结果如下:

The max value is 56.5

The max value is 3.0

感觉像接收一个数组。

6. finalize() 方法

Java 允许定义这样的方法,它在对象被垃圾收集器析构(回收)之前调用,这个方法叫做 finalize( ),它用来清除回收对象。

finalize() 一般格式是:

  protected void finalize() {
      // 在这里终结代码
  }

关键字 protected 是一个限定符,它确保 finalize() 方法不会被该类以外的代码调用。当然,Java 的内存回收可以由 JVM 来自动完成。如果你手动使用,则可以使用上面的方法。

参考链接

原文地址:https://www.cnblogs.com/mingyueanyao/p/6725707.html