zoukankan      html  css  js  c++  java
  • 10.12

    今天学习了

    方法的重载

    上面使用的max方法仅仅适用于int型数据。但如果你想得到两个浮点类型数据的最大值呢?

    解决方法是创建另一个有相同名字但参数不同的方法,如下面代码所示:

    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()函数实现。

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

    实例

    下面的程序打印所有的命令行参数:

    CommandLine.java 文件代码:

    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自动提供了一个默认构造方法,默认构造方法的访问修改符和类的访问修改符相同(类为 public,构造函数也为 public;类改为 protected,构造函数也改为 protected)。

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

    实例

    下面是一个使用构造方法的例子:

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

    你可以像下面这样调用构造方法来初始化一个对象:

    ConsDemo.java 文件代码:

    public class ConsDemo { public static void main(String args[]) { MyClass t1 = new MyClass(); MyClass t2 = new MyClass(); System.out.println(t1.x + " " + t2.x); } }

    大多时候需要一个有参数的构造方法。

    实例

    下面是一个使用构造方法的例子:

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

    你可以像下面这样调用构造方法来初始化一个对象:

    ConsDemo.java 文件代码:

    public class ConsDemo { public static void main(String args[]) { MyClass t1 = new MyClass( 10 ); MyClass t2 = new MyClass( 20 ); System.out.println(t1.x + " " + t2.x); } }

    运行结果如下:

    10 20

    可变参数

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

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

    typeName... parameterName

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

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

    实例

    VarargsDemo.java 文件代码:

    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

    finalize() 方法

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

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

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

    finalize() 一般格式是:

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

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

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

    实例

    FinalizationDemo.java 文件代码:

    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
  • 相关阅读:
    多线程编程(14) 多线程同步之 WaitableTimer (等待定时器对象)
    多线程编程(17) 多线程同步之 WaitableTimer (等待定时器对象)[续三]
    多线程编程(13) 多线程同步之 Event (事件对象)
    一个关于 absolute 关键字的小练习
    [新功能]在个人Blog页面显示最新评论
    asp.net页面中hmtl注释的问题
    [征询意见]博客园准备租用更好的服务器
    [公告]博客园分页浏览功能改进
    [公告]博客园新服务器测试
    [公告]博客园建立了人才求职区
  • 原文地址:https://www.cnblogs.com/dty602511/p/14159802.html
Copyright © 2011-2022 走看看