Java从构造函数调用构造函数 - 应用程序

时间:2018-02-01 09:50:28

标签: java constructor this

我一直在研究通过“this”关键字从构造函数中调用构造函数。

我在private static void insertTable() throws FileNotFoundException, IOException { HWPFDocument doc = new HWPFDocument(new FileInputStream("/home/ikadmin/Downloads/in.doc")); int rows = 3, columns = 3; Range range = doc.getRange(); Table table = range.insertTableBefore((short) columns, rows); for (int rowIdx = 0; rowIdx < table.numRows(); rowIdx++) { TableRow row = table.getRow(rowIdx); for (int colIdx = 0; colIdx < row.numCells(); colIdx++) { TableCell cell = row.getCell(colIdx); Paragraph par = cell.getParagraph(0); par.insertBefore("" + (rowIdx * row.numCells() + colIdx)); } } String newFilePath = "/home/ikadmin/Downloads/out.doc"; OutputStream out = new FileOutputStream(newFilePath); doc.write(out); out.flush(); out.close(); } 一书"Thinking in Java, 4th edition"中找到了以下代码段。

Bruce Eckel

}

我正在尝试理解上面代码的流程,所以我要写下我对它的理解 - 随意纠正它:

  1. 通过构造函数Flower()创建一个Flower类型的新对象。对该对象的引用是x。

  2. 从Flower()构造函数中调用Flower(int petalCount,String s)构造函数。传入47和hi作为参数。

  3. 调用Flower(int petalCount)构造函数,传入47的petalCount。

  4. 将petalCount局部变量分配给petalCount实例变量。打印出来。

  5. 跳回到Flower(int petalCount,String s)构造函数。将s局部变量设置为s实例字段。打印出来。

  6. 跳回到Flower()构造函数并继续执行下一个println语句。

  7. 使用第x.printPetalCount()行继续在main()中执行。

  8. 完成执行。

  9. 此外,我对从构造函数调用构造函数的应用程序感兴趣。可能只是一个构造函数的相同结果(将petalCount和s实例字段设置为对应的值):

    public class Flower {
    int petalCount = 0;
    String s = "Initial value";
    
    Flower(int petalCount) {
        this.petalCount = petalCount;
        System.out.println("Constructor with int arg only; petalCount = " + petalCount);
    }
    
    Flower(String s) {
        System.out.println("Constructor with String arg only; s = " + s);
        this.s = s;
    }
    
    Flower(int petalCount, String s) {
        this(petalCount); //calls for Flower(int petalCount) constructor
        this.s = s;
        System.out.println("Int and String args")
    }
    
    Flower() {
        this(47, "hi"); //calls for Flower(int petalCount, String s) constructor
        System.out.println("Default constructor");
    }
    
    public void printPetalCount() {
        System.out.println("petalCount = " + petalCount + ", s = " + s); 
    }
    
    public static void main(String[] args) {
        Flower x = new Flower();
        x.printPetalCount();
    }
    

1 个答案:

答案 0 :(得分:1)

public class Student
{
    private int age;

    public Student() {
        this(21);//this calling to below constructor 
    }

    public Student(int age) {
        this.age = age;
    }
}