Java 方法

Posted 爱吃西瓜的番茄酱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 方法相关的知识,希望对你有一定的参考价值。

Java方法 类似于C语言中的函数。

在语句 System.out.println()中:

  • println() 是一个方法。

  • System 是系统类。

  • out 是标准输出对象。

方法的命名规则

方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson、onePrice

方法的定义

语法如下:

修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;
}
  • 修饰符:这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。

  • 返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。

  • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名(类似于C语言的函数原型)。

  • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。

  • 方法体:方法体包含具体的语句,定义该方法的功能。

如:

public static int age(int birthday){...}

下面的方法包含 2 个参数 num1 和 num2,它返回这两个参数的最大值。

public static int max(int a, int b){
    int result;
    if(a>b) result = a;
    else result = b;

    return result;
}

方法调用

1、当方法返回一个值的时候,方法调用通常被当做一个值。例如:

int larger = max(30, 40);

2、如果方法返回值是void,方法调用一定是一条语句。例如,方法println返回void。下面的调用是个语句:

System.out.println("你好!");

实例:

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

    public static int max(int a, int b){
        int result;
        if (a>b)
            result = a;
        else result = b;
        
        return result;
    }
}

输出;

5 和 3 比较,最大值是:5

这个程序包含 main 方法和 max 方法。main 方法是被 JVM 调用的,除此之外,main 方法和其它方法没什么区别。

main 方法的头部是不变的,如例子所示,带修饰符 public 和 static,返回 void 类型值,方法名字是 main,此外带个一个 String[] 类型参数。String[] 表明参数是字符串数组。

返回值为void型的方法

下例说明如何声明和调用一个 void 方法:

public class TestVoidMethod {
    public static void main(String[] args){
        printGrade(78.5);
    }

    public static void printGrade(double score){
        if (score>=90.0){
            System.out.println(‘A‘);
        }
        else if (score>=80.0){
            System.out.println(‘B‘);
        }
        else if (score>=70.0){
            System.out.println(‘C‘);
        }
        else if (score>=60.0){
            System.out.println(‘D‘);
        }
        else System.out.println(‘F‘);
    }
}

输出:

C

方法的重载

创建另一个有相同名字但参数不同的方法,称为重载。

如:

public static double max(double num1, double num2) {
  if (num1 > num2)
    return num1;
  else
    return num2;
}

如果你调用max方法时传递的是int型参数,则 int型参数的max方法就会被调用;

如果传递的是double型参数,则double类型的max方法体会被调用,这叫做方法重载;

就是说一个类的两个方法拥有相同的名字,但是有不同的参数列表。

Java编译器根据方法签名(函数原型)判断哪个方法应该被调用。

变量作用域

方法内定义的变量被称为局部变量。

局部变量的作用范围从声明开始,直到包含它的块结束。

局部变量必须声明才可以使用。

方法的参数范围涵盖整个方法。参数实际上是一个局部变量。

for循环的初始化部分声明的变量,其作用范围在整个循环。

命令行参数的使用

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

通过命令行运行程序:

$ javac CommandLine.java 
$ java CommandLine this is a command line 200 -100
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100

注意:java与javac的版本需要一致,才可以如此运行。

构造方法

当一个对象被创建时候,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但构造方法没有返回值。

通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象。

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

一旦定义了自己的构造方法,默认构造方法就会失效。

实例:

// 一个简单的构造函数
class MyClass {
  int x;
 
  // 以下是构造函数
  MyClass() {
    x = 10;
  }
}

可变参数

JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。

方法的可变参数的声明如下所示:

typeName... parameterName

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

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

实例:

public class VarargsDemo {
    public static void main(String[] args){
        // 调用可变参数
        printMax(43, 2, 4, 7, 66);
        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 (result<numbers[i]){
                result = numbers[i];
            }
        }
        System.out.println("Max value is: "+ result);
    }
}

输出:

Max value is: 66.0
Max value is: 3.0

finalize() 方法

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

例如,你可以使用 finalize() 来确保一个对象打开的文件被关闭了。

在 finalize() 方法里,你必须指定在对象销毁时候要执行的操作。

finalize() 一般格式是:

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

关键字 protected 是一个限定符,它确保 finalize() 方法不会被该类以外的代码调用。

当然,Java 的内存回收可以由 JVM 来自动完成。如果你手动使用,则可以使用上面的方法。

实例:

public class FinalizationDemo {  
  public static void main(String[] args) {  
    Cake c1 = new Cake(1);  
    Cake c2 = new Cake(2);  
    Cake c3 = new Cake(3);  
      
    c2 = c3 = null;  
    System.gc(); //调用Java垃圾收集器
  }  
}  
 
class Cake extends Object {  
  private int id;  
  public Cake(int id) {  
    this.id = id;  
    System.out.println("Cake Object " + id + "is created");  
  }  
    
  protected void finalize() throws java.lang.Throwable {  
    super.finalize();  
    System.out.println("Cake Object " + id + "is disposed");  
  }  
}

输出:

$ javac FinalizationDemo.java 
$ java FinalizationDemo
Cake Object 1is created
Cake Object 2is created
Cake Object 3is created
Cake Object 3is disposed
Cake Object 2is disposed

每天学习一点点,每天进步一点点。

以上是关于Java 方法的主要内容,如果未能解决你的问题,请参考以下文章

22.java方法的定义

java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段

Java语言基础之方法的设计

Java初识方法

Android Java:在 onCreateView() 中返回空视图的片段

jsp页面被tomcat引擎运行的时候组装成java片段,但是这些java片段怎么没有main方法作为程序的入口啊?