public class MyInitTest { private String a; private double c; private int n; { a = "non-static initialization block "; System.out.println(a); } { c = 20.03652; System.out.println(c + a); } static private String string; static private int anInt; static { string = "Static block"; System.out.println(string); } static { anInt = 6; System.out.println(anInt + "Static block"); } public MyInitTest() { System.out.println("Constructor1"); } public MyInitTest(int i) { System.out.println("Constructor2"); } } public class Main { public static void main(String[] args) { MyInitTest myInitTest = new MyInitTest(); } } 
  • from which to call? in the usual way you call when you do new - Saidolim

3 answers 3

The main options for calling the constructor are already presented under this question, but I will add one more - reflection;

 package pack; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; public class StartPoint { public StartPoint() { System.out.println("-"); } public StartPoint(String g) { System.out.println("g"); } private StartPoint(int i) { System.out.println("i"); } public static void main(String[] args) throws Exception { Class someClassAsExampleStartPointClass = Class.forName("pack.StartPoint"); Constructor[] a = someClassAsExampleStartPointClass.getConstructors(); for (Constructor temp : a) { System.out.println(temp); // public pack.StartPoint(java.lang.String) and public pack.StartPoint() ;) } a = someClassAsExampleStartPointClass.getDeclaredConstructors(); for (Constructor temp : a) { System.out.println(temp); // **private pack.StartPoint(int)** ,public pack.StartPoint(java.lang.String) and public pack.StartPoint() ;) } System.out.println(a[0].newInstance(new Integer(12))); // out ->> "i" } } 

    If a

     MyInitTest myInitTest = new MyInitTest(); 

    constructor is called

     public MyInitTest() { System.out.println("Constructor1"); } 

    If a

     MyInitTest myInitTest = new MyInitTest(1000); 

    constructor is called

     public MyInitTest(int i) { System.out.println("Constructor2"); } 
       //указывать пакет, где находится исходный класс, важно! package model; //Если классы не связаны: public class MyInitTest2 { String a; Integer b; // объявление экземпляра класса, конструктор еще не вызывается. MyInitTest aaa; public MyInitTest2() { a = "Test2"; b = 10; // Инициализация, а вот тут как раз происходит вызов конструктора. aaa = new MyInitTest(); } } 

      The second call option:

       package model; // Если класс является наследником public class MyInitTest3 extends MyInitTest{ String a; Integer b; public MyInitTest3() { // первым у наследуемых классов всегда вызывается конструктор родителя // для этого используется ключевое слово super super(); a = "Test2"; b = 10; } }