比如class A{
int a=1;
Sysem.out.println("hello");
void funa()
{
……
}}这对吗,这算什么:【类定义中,成员变量和成员方法之间,单独放一个println语句输出语句,能执行吗,这算什么?】

解决方案 »

  1.   

    不对。
    你可以这样试一下public class A{
        static {
            System.out.println("hello");
        }
    }这可以编译执行  (只是报个警告!)
      

  2.   

    当然有main函数了,只是省略而已请关注主要问题
      

  3.   

    多谢3楼
    发现虽然不对,但是直接加上一个{}就对了,没有用static关键字
    请问这算什么?多谢
    应该算是非静态语句块吧,那这种非静态语句块充当的是什么角色,什么时候运行????渐渐明白了,还是请大侠核准
      

  4.   

    恩  看看这文章http://fishermen.javaeye.com/blog/24025
      

  5.   

    ZangXT你太厉害了,多谢你
    但有一个问题,我发现子类mian中若new子类本身,则会调用子类非静态域,就是你说的那种在构造函数之前运行(此时还有一个问题【问题1】,类的成员变量是不是最先初始化,也就是说顺序是:类的成员变量的默认初始化和显式初始化,然后非静态域,然后构造函数?)【问题2】但若不new本身而运行,则不会调用非静态域~!
    请指点只是怎么回事?
    【问题3】子类main中new不new自己的区别在哪里,不是都能运行吗?
    总共3个问题,请赐教,多谢
      

  6.   


    对于【问题2】,Java里面的规定是
    非静态块,每次new一个新对象的时候,调用一次;没有new新对象时,不调用
    静态块,当类被调用的时候,仅仅此时调用一次,以后不再调用
    对照上面,所以不new本身而运行,非静态的不会被调用
      

  7.   

    main中new不new自己的区别在哪里,不是都能运行吗?