问题1: 你的 ltest1变量没有声明就直接用了(编译的时候应该要出错的)
问题2 : 你的test2如果是一个application的话少了最重要的main()方法,如何让程序执行?这是我修改的test2,可以运行,结果是 : 
------->out
------>end希望对你有帮助
public class test2 {
  
public static void main(String[] args){  
  try {
   test1 ltest1 = new test1();
   System.out.println("----->out");
  } catch (Exception e) {
   System.out.println("------->error");
  } finally {
   System.out.println("------->end");
  }
 } 
}

解决方案 »

  1.   

    test1中没有构造函数应该是没事的,会自动调用父类的构造函数。还有,最好把上下文的程序都贴出来,我觉得就这样好像信息太少了,例如你是怎么样调用test2的?
      

  2.   

    ltest这个变量没有声明就可以用吗?可以吗?真的可以吗?果然可以吗?关于test1.java,我觉得就是一个dummy类,什么都不干的。当然contructor还是会用Object的default contructor的。关于test2.java嘛,我觉得问题就是出在我第一贴上面写的。小弟才疏学浅,还请大家指教
      

  3.   

    没有main()可以,没声明变量不行啊
      

  4.   

    没有main()可以的吗?那么application程序的入口(programm entry point)在那里啊?
    applet当然可以没有主类,但是test2.java明摆着是一个application. 请指教.
      

  5.   

    也许是个version问题
    当你修改了你的程序后,由于不小心把编译后的程序输出到另一个目录。
    当你执行程序的时候可能会用到以前的版本。
      

  6.   

    哈哈
    我也出现了楼上大哥的情况
    修改后出现的。
    原来的就是没有声明,没有入口处
    在test2中怎么去找test1
      

  7.   

    你的程序太不全了,我把你的程序编译了一下,修改了一些错误提示,现在的程序是这样的,你看一看,和你的想法一样吗?如果不一样,最好把你的源程序帖出来,大家研究研究。
    class Test1 extends Object {
      static public String check () { return null;
      }
      static public String check2 () { return null;
      }
      static public String check3 () { return null;
      }
    }
    //请注意在test1中没有构造函数.//java 文件test2.java:
    public class Test2 {
    public static void main(String[] args) {
        try {
          /*Test1 ltest1 = */new Test1();
          System.out.println("----->out");
        } catch (Exception e) {
          System.out.println("------->error");
        } finally {
          System.out.println("------->end");
        }
    }
    }
    结果为:
    ----->out
    ------->end
      

  8.   

    楼上的哥们,你和我的想法是一样的,唯一区别是,你用了shorthand的写法 
     new Test1();  虽然比较省事但是我还是比较主张使用标准的变量声明的语句,
    这样程序会比较清晰,对于以后debug也有好处。哈哈,建议仅供参考。
      

  9.   

    wind13:觉得可以了,就给点分吧
      

  10.   

    咦,昨天回的帖子怎么没有了,难道被坛主删了不成?:)
     我写哪个程序的意思只是想问大家这样一个问题,如果有一个像test1那样即没有构造函数,也没有继承父类的类,我new的时候,是如何运行的呢?
      

  11.   

    你声明并分配内存空间给了TEST1,但是这个变量ltest1并没有被主程序用到,所以,java的垃圾收集机制就会在某个时间点回收ltest1所占用的内存空间。应该就是这样的啊。顺便说一句,java里有default contructor的,你不写contructor不等于就是没有,编译器会自动调用的。
      

  12.   

    第一,没有写构造类,不等于没有,编译器会自动加一个的默认构造器。
    第二,你确实没有继承,但是你的两个文件都在同一个文件夹下,可以认为是在一个包下 ,此处用到了package的概念,你可以看看书,你也可以,将Test1移出此文件夹,再编译,那么/*test1/* ltest= new test1();就会包错了,你可以试试。
    不知你说的是不是这个意思。
    记着给分呀!
      

  13.   

    我再举个例子,将这个问题说的清楚些,希望对你有用。
    如果你的问题只是“有一个像test1那样即没有构造函数,也没有继承父类的类,我new的时候,是如何运行的呢?”
    那么我简单的修改一下你的程序如下:
    //*******java文件  test1.java:
    public class Test1 {
      static public void prt() {
        System.out.println("test1()");
      }
    }
    //********请注意在test1中没有构造函数.//********java 文件  test2.java:
    public class Test2 {
      public static void main(String[] args) {
        Test1 ltest1=new Test1();
        ltest1.prt();   
      }
    }
    //*******Test1.java 和 Test2.java是两个不同的文件,没有继承关系。 
    现在来回答你的问题:
        第一,Test1虽然没有构造器,但是编译器会给他加一个默认的构造器 public Test1() {},所以没有构造器,new Test1(),也回正常执行。
        第二,表面看来Test1和Test2没有什么联系,但是为什么在Test2中定义Test1的变量Test1 ltest1=new Test1(),这是因为,他们在同一个文件夹下,也就是说他们在同一个包下(默认的包)。为了检测,我们做如下测试:
        现在的情况是:Test1.java和Test2.java都在d:\java下,编译正确,结果为test1().
        我们将Test1.java放到d:\java\test\下,此时编译,就回报错。这是因为在同一包下,class Test1和class Test2是公有的,所以在Test2.java中就可以用 Test1 ltest1=new Test1()定义Test1的变量ltest1;而现在他们不在同一个包中,所以不能定义Test1的变量。为了正确执行,我们只需在class Test1和class Test2之前分别加上package test;和import test即可,如下:
    //*******java文件  test1.java:
    package test;
    public class Test1 {
      static public void prt() {
        System.out.println("test1()");
      }
    }
    //********java 文件  test2.java:
    import test.*;
    public class Test2 {
      public static void main(String[] args) {
        Test1 ltest1=new Test1();
        ltest1.prt();   
      }
    }
    javac Test2.java
    java Test2
    结果:test1().