1.没有产生对象,因为main()方法是一个静态方法,它可以不依赖于实例存在。
2.由于第一个问题的答案,第二个问题已经解决。如果在Main()方法中创造实例,那么当然还是先执行main()方法。
3.这是Java语法规范。当然,main()方法也可以不定义成静态方法,但是那样Java虚拟机就无法自动执行main()方法,不过你可以自己调用。另外,上面的例子有一个错误,main方法必须有String []类型的参数,否则它不会被自动执行。
4.上面的例子好像编译不通过的。在static方法中没有this,因为static方法是不依赖于对象存在的。
5.对,Java的静态方法只能被静态方法覆盖。至于空间回收,应该是可以自动处理的,那是Java虚拟机的事。

解决方案 »

  1.   

    1.OS课上我学到了:进程就是应用程序的一次执行,是它的一次实例。
               那么:JAVA程序的一次执行,是不是可以理解为类的一次实例化呢?
                    含有main()方法的“主类”,它是否产生了一个对象?
    没有产生这个对象,因为main方法是static的,不需要对象,但是加载这个类.
    我的理解:一次Java运行就是一个进程,所以运行两次就是两个进程2.如果的确如上所述,按照“类在实例化时,最先执行构造方法”
                  疑问就来了:JAVA程序运行时,是先执行main()方法还是“主类”的构造方法?   
                 (课本上有这么一句原话:“当程序执行时,解释器会找主方法,它是程序的入口点”
                  还有这样一句话:“每当创建一个对象,为新建对象开辟内存空间后,JAVA系统自动调用构
                  造方法.......) 
              它们是否互相矛盾?
    没有对象生成所以不会执行构造函数,只是执行main方法.3.例程中,main()被定义为static
             为什么每个main()都要定义为static?
    入口函数规定的,这里不需要生成这个类的实例.4.假设构造方法比main()先执行,
      那么例程还有一个错误:main()是static的,它里面调用了非static的数据a。
          如果我把System.out.print(a);
              改为System.out.print(this.a);
           可以吗?java程序能自己调用自己吗?this指针可以引用含有main()方法的对象吗?
    假设不成立,静态方法不可以调用非静态域.
    5.静态方法不能被非静态方法重写,而只能被静态方法重写(overwrite)。(后半句对吗?为什么?)
         假设对,如果重写之前的静态方法占用内存是10个空间,重写之后只要5个空间。
                那么java会自动回收该内存空间?
    对,这个问题根本不是问题,静态方法是属于类的,你用那个类就调用了那个方法.这个和占用空间有什么关系?
      

  2.   

    System.out.print(a);
    System.out.print(this.a);
    如果a就是该类的域(属性)的话。。
    这两句 就一样的语句
    比如:javabean中的set get方法就会写成
    ...
    private int id;
    public void setId(int id)
    {
         this.id=id;//这里如果不用this引制的话 就是指 局部变量id 而不是 本类属性id
    }
      

  3.   

    java应用程序都是从main()函数开始执行的
    在main里初始化对象,为对象分配内存空间
    main之所以声明为static,我想是因为当编译时声明为static的函数或者是字段类是的一部分
    所以像楼上说的,能够自动加载,这也是靠java虚拟机
      

  4.   

    一定要明确一点:
    由static声明的,是类级别的对象,也就是说要调用或使用静态的变量或方法是不需要生成任何对象的,所以在调用main函数的时候,无任何对象生成,也没有该类的构造方法的调用,这也是任何程序中,main都必须为static的原因,要不,main就无法作为程序的入口了,,
    你的例子的确会产生错误,因为a作为一个对象级别的变量必须要等到有该类的对象生成后,方能使用,而这儿的main为类方法,它的使用又不需要对象,这样就有了冲突,,
      

  5.   

    public static void main(String[] args)方法是应用程序的入口,程序是从这一行开始的.由于它是静态的所以不用先实例化类.
      

  6.   

    类实例化的时候,不是最先执行构造方法的,如果类中有static{}的话,那么应该先执行这个,先在内存中开辟static的共享区,然后再根据构造方法建立实例。public class Test
    {
       static
       { 
        System.out.println("static");
       }
       Test()
       { 
       System.out.println("instance");
       }
       public void hehe()
    {
       System.out.println("hehe");
    }
       public static void main(String[] args)
       {
            Test a=new Test();
    a.hehe();
            System.out.println("main");
       }
    }另外,在static中是不可以引用this,因为this是代表当前的类对象,而static是个静态类,不需要实例就可以引用,所以不能用this的。你明白static和实例的实质区别,就会明白上面的问题了。
      

  7.   


    1.OS课上我学到了:进程就是应用程序的一次执行,是它的一次实例。
               那么:JAVA程序的一次执行,是不是可以理解为类的一次实例化呢?
                    含有main()方法的“主类”,它是否产生了一个对象?
    A:没有产生对象,你说的"主类"通常情况下只有当被new操作符操作时才能产生一个新的对象,而main方法是static的,也就是说可以不通过一个实例而直接调用.2.由于第一个问题的答案,第二个问题已经解决。如果在Main()方法中创造实例,那么当然还是先执行main()方法。
    3.这是Java语法规范。当然,main()方法也可以不定义成静态方法,但是那样Java虚拟机就无法自动执行main()方法,不过你可以自己调用。另外,上面的例子有一个错误,main方法必须有String []类型的参数,否则它不会被自动执行。
    4.上面的例子好像编译不通过的。在static方法中没有this,因为static方法是不依赖于对象存在的。
    5.对,Java的静态方法只能被静态方法覆盖。至于空间回收,应该是可以自动处理的,那是Java虚拟机的事。2.如果的确如上所述,按照“类在实例化时,最先执行构造方法”
                  疑问就来了:JAVA程序运行时,是先执行main()方法还是“主类”的构造方法?   
                 (课本上有这么一句原话:“当程序执行时,解释器会找主方法,它是程序的入口点”
                  还有这样一句话:“每当创建一个对象,为新建对象开辟内存空间后,JAVA系统自动调用构
                  造方法.......) 
              它们是否互相矛盾?A:如果类中有static,基本类型数据,等等,在实例化时,并不是最先执行构造方法,他还有一个初始化的过程,一般是 基本数据->static->non-static->(有对象生成先执行constructor)->main方法(如果在main里产生对象一般先执行main方法)3.例程中,main()被定义为static
             为什么每个main()都要定义为static?
    A:在回答这个问题之前,先搞清楚this,this代表了引用当前类的reference,所谓的static就是表明当前的方法不能引用this,不需要产生对象就可以通过类名直接引用,而MAIN方法是一个类的入口,如果它不是static,你让程序怎么去执行main方法呢?
    举个例子:
    public class Employee
    {
        public static void main(String[] args)
        {
              
        }
     
        public static void test()
        {
            System.out.println("This is a test");
        }    public void getSalary()}Employee e = new Employee(); 
    e.getSalary(); //e就是所谓的this,而getSalary()是non-static函数
    Employee.Test();
    Employee.main(args);  //4.假设构造方法比main()先执行,
      那么例程还有一个错误:main()是static的,它里面调用了非static的数据a。
          如果我把System.out.print(a);
              改为System.out.print(this.a);
           可以吗?java程序能自己调用自己吗?this指针可以引用含有main()方法的对象吗?
    5.静态方法不能被非静态方法重写,而只能被静态方法重写(overwrite)。(后半句对吗?为什么?)
         假设对,如果重写之前的静态方法占用内存是10个空间,重写之后只要5个空间。
                那么java会自动回收该内存空间?
    谢谢了~
      

  8.   

    http://community.csdn.net/Expert/topic/3504/3504490.xml?temp=.6220819
      

  9.   


    1.OS课上我学到了:进程就是应用程序的一次执行,是它的一次实例。
               那么:JAVA程序的一次执行,是不是可以理解为类的一次实例化呢?
                    含有main()方法的“主类”,它是否产生了一个对象?
    A:没有产生对象,你说的"主类"通常情况下只有当被new操作符操作时才能产生一个新的对象,而main方法是static的,也就是说可以不通过一个实例而直接调用.
    2.如果的确如上所述,按照“类在实例化时,最先执行构造方法”
                  疑问就来了:JAVA程序运行时,是先执行main()方法还是“主类”的构造方法?   
                 (课本上有这么一句原话:“当程序执行时,解释器会找主方法,它是程序的入口点”
                  还有这样一句话:“每当创建一个对象,为新建对象开辟内存空间后,JAVA系统自动调用构
                  造方法.......) 
              它们是否互相矛盾?A:如果类中有static,基本类型数据,等等,在实例化时,并不是最先执行构造方法,他还有一个初始化的过程,一般是 基本数据->static->non-static->(有对象生成先执行constructor)->main方法(如果在main里产生对象一般先执行main方法)
    3.例程中,main()被定义为static
             为什么每个main()都要定义为static?
    A:在回答这个问题之前,先搞清楚this,this代表了引用当前类的reference,所谓的static就是表明当前的方法不能引用this,不需要产生对象就可以通过类名直接引用,而MAIN方法是一个类的入口,如果它不是static,你让程序怎么去执行main方法呢?
    举个例子:
    public class Employee
    {
        public static void main(String[] args)
        {
            Employee.test(); //static方法可以直接调用
            //!getSalary(); //在static方法中不能直接调用non-static函数
            Employee e = new Employee(); //必须创建一个对象
    e.getSalary(); //通过对象来调用non-static函数
        }
     
        public static void test()
        {
            System.out.println("This is a test");
        }    public void getSalary()
        {
            System.out.println("getSalary");
        }}Employee e = new Employee(); 
    e.getSalary(); //e就是所谓的this,而getSalary()是non-static函数
    Employee.Test();      //可以直接调用
    Employee.main(args);  //这个也可以~
    4.假设构造方法比main()先执行,
      那么例程还有一个错误:main()是static的,它里面调用了非static的数据a。
          如果我把System.out.print(a);
              改为System.out.print(this.a);
           可以吗?java程序能自己调用自己吗?this指针可以引用含有main()方法的对象吗?
    A:同上,在static方法中不能直接调用non-static方法,static方法中没有所谓的this
    5.静态方法不能被非静态方法重写,而只能被静态方法重写(overwrite)。(后半句对吗?为什么?)
         假设对,如果重写之前的静态方法占用内存是10个空间,重写之后只要5个空间。
                那么java会自动回收该内存空间?
    A:后半句是对的。你的说法不对,不过我想能够理解你的意思,空间回收是JVM的事情。应该是可以的。
    看了楼主的贴子,我对楼主有几个建议,
    1。静下心来搞清楚类,对象,引用(reference),static方法,non-static方法的含义。
    2.关于类,对象含义。可以看看JAVA书的相关章节。比如《CORE JAVA 6/E》的第4/5章(好象)
    3。关于初始化可以看看《Thinking in java》第四章后半段。
    4.还有,由于翻译的原因,句柄,引用等都是指同一个东西(reference),还有比如函数,方法,等还有比如实例方法。类方法等等都有不同的翻译。在看书的时候要注意一下
    5。楼主好象对底层实现很感兴趣。这个是不错的。好象有C/C++经验的也经常会有这种感觉。楼主可以看看《Inside JVM 2/e》,我觉得对语法有了一定了解之后。适当花些精力的了解一下底层细节是很有好处的。楼主加油~