zoukankan      html  css  js  c++  java
  • 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
    

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

  • 相关阅读:
    ab Apache HTTP server benchmarking tool
    压缩JS的类
    看电影学人生:《白银帝国》有感
    JavaScript 闭包
    微软为asp.net ajax和jquery创建了CDN
    JavaScript工具
    Mysql初始化root密码和允许远程访问
    一步一步学Ruby(二十一):文件操作2
    测试包含HttpContext.Current的代码
    What’s the difference between <system.web> and <system.webServer>?
  • 原文地址:https://www.cnblogs.com/youcoding/p/12693998.html
Copyright © 2011-2022 走看看