4

I have a test class:

public class Test {

    private static class Nested1 {
        Nested2 n2 = new Nested2();
    }

    private static class Nested2 {
        Nested1 n1 = new Nested1();
    }

}

As I understand, static nested classes are regular static member of the enclosing class, that are still top-level classes. When I compile the above code, I get four files:

  1. Test$1.class
  2. Test$Nested1.class
  3. Test$Nested2.class
  4. Test.class

Compiled from "Test.java"

class Test$Nested1 {
  Test$Nested2 n2;
  private Test$Nested1();
  Test$Nested1(Test$1);
}

My questions:

  1. Why do I have an additional class Test$1.class.

    class Test$1 {
    }
    
  2. Why does Test$Nested1.class' constructor have an input of type: Test$1?

Test.java

public class Test {  

    private static class Nested1 {
        Nested2 n2 = new Nested2();
    }

    private static class Nested2 {
        Nested1 n1 = new Nested1();
    }

}

I am using Java 1.8.

Prashant Pandey
  • 4,332
  • 3
  • 26
  • 44

0 Answers0