• 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();
    编译程序就会报告自己找不到一个相符的构造函数。

  • 相关阅读:
    Linux下常用压缩格式的压缩与解压方法
    FreeBSD内核编译
    How to enable a Virtualbox shared folder for Linux guest systems
    VBA删除空白行列
    freebsd 隐藏ssh版本号
    常用端口大全
    fcitx无法切换到中文(manjaro)
    关机报 at-spi-bus-launcher
    内核参数和GRUB&GRUB2
    Linux 串口调试工具汇总
  • 原文地址:https://www.cnblogs.com/findumars/p/3247275.html
Copyright © 2020-2023  润新知