如题,在类中直接写方法,当创建对象时,自动会执行,想知道这样算是写在了构造器里么?class inner{ { System.out.println("in"); }}

解决方案 »

  1.   

    不是
    <init>先初始化变量,再执行初始化语句(即你写的那个),再调用构造函数
      

  2.   

    不是,你不写构造器,JAVA自动帮你弄一个无参数空构造器public inner(){}
      

  3.   

    Quote: 引用 8 楼 eviljordan 的回复:

    我理解的构造器:构造函数(貌似也叫构造方法)  不知楼上觉得如何啊
    一样的。只是不同的说法~[/quot]
    那么LZ的问题是不是如我所说那样?
      

  4.   

    肯定不是。
    不写构造方法的的类,在new实例化的时候系统默认的会自动加上一个无参的构造。
    而System.out.println("in");是静态方法块,只有在对象被创建的时候才初始化,
    构造方法和静态语句块明显是两码事情。有不同的使用方法和场景
    静态代码块要早于构造方法执行。
      

  5.   

    要明白这些你需要先了解jvm初始化对象的顺序。首先在class加载的时候你初始化静态变量和静态初始化块,然后是实例变量和构造函数。当然这些也都是从上往下的顺序执行的。public class HelloWorld{
      public String s = "hello world";   //3 
      public static int i; //1
      public HelloWorld(){
        //...   //4
      }
      static{
        //...              //2
      }
    }
      

  6.   

    静态代码块>代码块>构造方法
      

  7.   

     { System.out.println("in"); } 这句前边没有static,肯定就不是静态代码块了,那这种代码块什么时候初始化、执行呢。
    感觉好像不能被执行一样
      

  8.   

    这是初始化块,在new对象的时候执行,执行顺序在构造方法之前。
      

  9.   


    public class DiffTime {
    public static int sta=1;
    static{
    sta=2;
    System.out.println("fdsafdsafds");
    }
            public static void main(String[] args) {
               System.out.println(DiffTime.sta);
            }
    }输出是2  自己理解去
      

  10.   

    错了使出是:fdsafdsafds
              2 
      

  11.   

    public class Test {
    public  int a = 10 ;
    {
    System.out.println("aaaa");
    System.out.println(a);
    }
    public Test(){
    a = 11 ;
    }

     public static void main(String[] args)  {    
     new Test() ;
            } 
    }
    可以看出这种执行顺序,其实你把他想成一个类的的属性赋值就好了
      

  12.   

    静态代码块,也就是写在任何函数体外的以static修饰的代码块。
    类似
    static{
    }普通代码块,就是写在任何函数体外的代码块
    {
    }对象初始化顺序:
    1、静态代码块(对象的类第一次被加载时,会被执行,如果之前加载过,则不会被执行)
    2、普通代码块(每次创建对象时,都会被执行)
    3、构造函数
    下面是个例子:public class MySolution {
    {
    System.out.println("This is Common Code Block");
    }
    static
    {
    System.out.println("This is Static Code Block");
    }
    public MySolution(){
    System.out.println("This is a constructor");
    }
    public void test(){
    System.out.println("Only For Test");
    }
    public static void main(String[] args) {
    MySolution my = new MySolution();
    my.test();
    MySolution my2 = new MySolution();
    my2.test();
    }
    }结果为:
    This is Static Code Block
    This is Common Code Block
    This is a constructor
    Only For Test
    This is Common Code Block
    This is a constructor
    Only For Test
      

  13.   

    写一个无参的构造方法
    如:
    public inner(){
       //把你实例时,想要执行的代码,放在这个构造方法里就行了
    }