如果你的那个"l"定义为int类型
可以得没问题
注释去掉也可以第一个是个构造函数,不需要返回类型
第二个是类的内部函树,这不是bug。

解决方案 »

  1.   

    概念错误,建议好好看看java的基础
      

  2.   

    你注释掉了第一个函数,但是你new TestDB(),其实还是调用了TestDB的默认构造函数
    public TestDB(){
    }而你可以调用内部函数
    b.TestDB();构造函数是不能有返回值且与类名同名的函数不满足这两点的就是内部函数,不管它是否与类同名。如果你写成
    private TestDB(){
    }此时就不能用new TestDB()在外部实例化这个对象。
      

  3.   

    因为第一个构造方法需要传入一个参数,如果你把第一个方法的注释去掉,你需要再添加一个无参构造方法:
    public TestDB()
    {
    }
      

  4.   

    这里有两个问题:
       1。如果public int TestDB() 本意是做为构造函数的,那这里错误。  因为java中构造函数是不能定义返回值类型的,因为构造函数的返回值就是它本身。   2。如果public int TestDB() 是作为一个实例方法来使用。那么,你在main中的引用就不对。 应该如下:b.TestDB();
         而不是: TestDB ba = new TestDB();
          
      

  5.   

    程序当然可以编译并运行,在这种情况下,
    被注释掉的是类TestDB的构造方法(带参数),这时候 执行TestDB ba = new TestDB();时,由于不能找到类的显式构造方法,于是调用了其默认超类java.lang.Object的构造方法(无参数),来实例化对象;这时候的 public int TestDB()由于有返回值,它不是构造方法,而是一个实例方法
    ,它不会自动执行,可以由类的对象调用,比如:int i=ba.TestDB()如果去掉第1个方法的注释,则程序会出现问题:
    现在类有了自己的构造方法,而且是带参数的,但执行 TestDB ba = new TestDB();的时候,指定的是无参构造,出现了构造方法找到但参数不匹配的问题,由于类已经有了构造方法,此时编译器找不到可以匹配的构造参数后,也不再去寻找父类的构造,而是直接报错
    要使得构造方法可用,要么把 // TestDB b = new TestDB("ppp"); 这句的注释也取掉,然后给
    TestDB ba = new TestDB();加上注释, 如果要保留 TestDB ba = new TestDB(); 的话,就再
    加个类的无参构造方法;无论怎么改, public int TestDB()仍然是类的实例方法,可以由类的对象调用,只要注意它还有个int型的返回值就可以了