第五章 初始化与清理

5.1 用构造器确保初始化
  • 注意变量声明、定义、赋值和初始化的区别:


    image.png
  • 注意成员变量在类内初始化和构造函数初始化的区别:
public class InitialClass {
    //类中初始化
    private String msg = "initial";

    //构造器中初始化
    public InitialClass(String msg){
        this.msg = msg;
    }

    public String getMsg() {
        return msg;
    }

    public static void main(String[] args){
        InitialClass initialClass = new InitialClass("constructor initial");
        System.out.println(initialClass.getMsg());
    }
}
输出结果:
constructor initial
5.2 方法重载
  • 区分方法重载:每个加载的方法都必须有一个独一无二的参数类型列表,即使参数顺序不同也视为方法重载
public class OverloadingOrder {

    void f(String s, int i){
        System.out.println("String: " + s + ", int: " + i);
    }

    void f(int i, String s){
        System.out.println("int: " + i + ", String: " + s);
    }

    public static void main(String[] args){
        OverloadingOrder order = new OverloadingOrder();
        order.f("string", 1);
        order.f(1, "string");
    }
}
输出结果:
String: string, int: 1
int: 1, String: string
  • 基本类型的重载

a. 如果传入的数据类型小于方法中声明的形式参数类型,实际数据类型就会被提升;比如将int传入到f(double)中,会将参数int类型转换为double类型;
b. 如果传入的实际参数大于方法中声明的形式参数类型,必须通过类型转换来执行窄化转换,否则,编译器会报错。反之不能将double类型直接传入到f(double)中,可以进行类型转换后,再传入。

  • 陷阱:以返回值区分重载方法
void f() {}
int f() { return 1; }
//无法判断是调用哪个函数
f();
5.3 默认构造函数
  • 如果类中不含构造函数,则编译器会自动创建一个默认构造函数;若类中含有构造函数,则不会自动创建。
5.4 this关键字
  • 表示当前对象的引用
public class Leaf {
    int f = 0;
    Leaf increment() {
        f ++;
        return this;
    }
}
  • 在构造函数中调用构造器
public class Coffee {
    
    private double prices;
    private String name;
    
    private static final double DEFAULT_PRICES = 10.0;

    public Coffee(double prices, String name) {
        this.prices = prices;
        this.name = name;
    }
    
    public Coffee(String name){
        this(DEFAULT_PRICES, name);
    }
}
  • 陷阱:static方法中没有this的方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 用构造器确保初始化 类里的数据成员,有三个途径初始化: 默认初始化,一般都为0。即使没有默认构造器,也会初始化 直...
    老茂在北京阅读 126评论 0 0
  • 初始化和清理是编程时涉及安全的两个问题。 1. 用构造器确保初始化 在java中通过提供构造器,确保每个对象都会得...
    MAXPUP阅读 156评论 0 0
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,542评论 1 51
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,906评论 1 10
  • 時間可以沖淡一切生活卻可以牢記和你曾經在一起的時刻是那麼【快樂 】你在前面走我在後邊跟隨......我們手拉這手看...
    麦子路阅读 267评论 0 2