• Java的默认构造函数调用


    // 注意,这里不能是 public class OOO,否则编译无法通过,需把文件命名成 OOO.java
    class OOO {
        // 注意:如果不定义OOO(),那么Shapes(int i)编译出错    OOO() {
            System.out.println(" Construtor() in OOO"); 
        }
        OOO(int i) {
            // this(); // 可以这样调用!
            System.out.println(" Construtor(i) in OOO"); 
        }
    }
    
    public class Shapes extends OOO{
    
        Shapes() {
            super(200); // 必须放在第一行,否则出错。
            // 调用super(200)以后,不再默认调用super()了,否则会自动调用super()
            // 原因:构造函数通常用于完成一些初始化的工作,比方说类B继承了类A,类A中有一个name属性,在类A的构造函数中name 被初始化,如果在类B构造函数中我们没有先调用父类A的构造函数而先使用了未初始化的资源name,将不能得到我们期望的结果,所以人们就会有了这种约定。
            System.out.println(" Construtor() in Shapes"); 
        }
    
        Shapes(int i) {
            // 还是会默认调用super()
            System.out.println(" Construtor(int) in Shapes"); 
        }
    
        public static void main(String[] args) {
            // 例子1:
            System.out.println("==================ex1==================");
            Shapes s1 = new Shapes();
    
            // 例子2:
            System.out.println("==================ex2==================");
            Shapes s2 = new Shapes(100);
        }
    } 

    另外有一篇:java构造函数的执行顺序

    http://www.blogjava.net/rocket/archive/2008/05/27/203165.html

    若创建一个没有构造函数的类,则编译程序会帮我们自动创建一个默认构造函数。
    如果已经定义了一个构造函数(无论是否有自变量),编译程序都不会帮我们自动合成一个:
    class Bush {
    Bush(int i) {}
    Bush(double d) {}
    }

    现在,假若使用下述代码:
    new Bush();
    编译程序就会报告自己找不到一个相符的构造函数。

  • 相关阅读:
    eclipse 中 debug-config
    release稳定版本/snapshot快照版本
    nginx.config文件配置
    用 Spring Boot 和 MybatisPlus 快速构建项目
    github 生成ssh key
    Vagrant安装virtualbox
    修改linux默认时区
    《加密与解密》笔记
    manjaro 安装显卡驱动
    排序算法-C++实现
  • 原文地址:https://www.cnblogs.com/findumars/p/3247275.html
Copyright © 2020-2023  润新知