Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Java Quiz: Nested Classes and Constructors

DZone's Guide to

Java Quiz: Nested Classes and Constructors

DZone's latest quiz for intermediate Java developers! Learn how nested classes and constructors behave.

· Java Zone ·
Free Resource

Start coding something amazing with our library of open source Cloud code patterns. Content provided by IBM.

Purpose

This is a quiz aimed at intermediate developers to:

  1. Introduce you to how nested classes behave in Java.

  2. Improve your internal calculations and expectations regarding nested classes and constructors.

What is written to the standard output as a result of executing the following code?

public class Outer{

    private int x;
    private int y;

    Outer(){
        x = 4;
        y = 3;
    }
    Outer(int z){
        new Outer();
        x += z;
        y -= z;
    }
    class Inner{

        Inner(){
            x ++ ;
            y += 2;
        }
        Inner(int i){
            this();
            x -= i;
            y += i;
            System.out.print(x ++ + " " + -- y + " ");
        }
    }
    public static void main(String[] args){
        Inner inner = new Outer(3).new Inner(2);
    }
}

Answer Explanation

First, create the object Inner:

Inner inner = new Outer(3).new Inner(2);
new Outer(3) calls the int-arg constructor of the outer class

new Outer(); // this new object doesn't affect the initial value of x & y.
x += z; // z = 3. x = 0 + 3 = 3.
y -= z; // y = 0 – 3 = -3

Now Inner(2) calls the int-arg constructor of the Inner class. 

Inner(int i){
this(); // this line calls the no-arg constructor of the inner class
x++; // x = 3 + 1 = 4
y+=2; // y = -3 + 2 = -1

Parameter i = 2;
x -= i; // x = 4 – 2 = 2
y += i; // y = -1 + 2 = 1
System.out.print(x ++ + " " + -- y + " ");

x++ actually means x = x + 1; and adds one to the value after the expression is evaluated. --y is the predecrement and x++ is the postincrement. x is still 2, and --y decrements by one, so y = 1 - 1 = 0. So "2 0" is written to the standard output, making B is the correct answer. 

You can learn more about Sar here at his website! Hope you enjoyed this quiz. Let us know your thoughts in the comments!

Code something amazing with the IBM library of open source blockchain patterns.  Content provided by IBM.

Topics:
java ,constructors ,classes ,nested class

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}