第一个问题:我问一下,java编程时,什么情况时创建一个变量或对象时,需要把声明和用new实例化的分开,也就是说能有class a=new class(); 一步完成.
最近编程一直遇到很怪的问题,
比如
class A implements Runnnable{
Thread newThread
     public A()
    {
      newThread = new Thread(this)    }
     public void run()
    {    }
其他东西....我省了.这里不写了...
}
我如果在其中,创建对象时,必须分两步,编译器才不会报错?就是说不能 Thread newThread=new Thread(this);
除了这个Thread类,我还在创建AWT组件的某些类的时候,也遇到过同样的问题,请高手指教这是为何?
是不是,在如果,这个类中,还含有内部类,而且内部类还要调用到那个对象,所以必须把它声名成成员实例变量,所以才需要把它的声明放到构造方法外面?而new()的话,可以放在构造方法内部?因为构造方法,也是这个类的成员方法,而且,在内部类,只能访问到外部类中的成员变量,而访问不到这个外部类的其他方法中的局部变量.
是这样的吗,请详细说一下,谢谢了!!!!

第二个问题:为什么有些类的静态常量,比如 Frame类的setExtendedState中的涉及到MAXIMIZED_BOTH,MAXMIZED_VERT和MAXIMIZED_HORIZ
为什么有些像这种样子的常量,引用的时候,不需要在其前面加上类名,但是诸如JOptionPane的INFORMATION_MESSAGE WARNING_MESSAGE等常量,是必须加上类名,编译才会让通过的.请问,这是为什么?

解决方案 »

  1.   

    1 你的问题很奇怪,那样写没有问题的,请参考public class Test implements Runnable {
      Thread newThread = new Thread(this);  public Test() {
      }  public void run() {
      }  public static void main(String[] args) {
      }
    }2 是否需要加上类名,取决于你当前的类。 如果那些常量属于你的父类,当然就不需要了,如果不是,就需要写上类名
     jdk 5 新增加了静态import, 可以让你全不需要写类名,不过 我个人觉得不推荐建。import static java.lang.Math.*;
      

  2.   

    现在写java都不要用结束符的吗??lz
      

  3.   

    Thread   newThread=new   Thread(this);    这句话不就有问题了吗?    new Thread()已经是产生一个对象,而你现在又Thread, 不懂你这做什么意思?  如果想class   a=new   class();   一步完成. 那你真接就搞一个new class()不就行吗?
      

  4.   


    public class Test implements Runnable {      public Test() {
      Thread newThread = new Thread(this);
      }   public void run() {
      }   public static void main(String[] args) {
      }
    }这样也没问题啊 把你出问题的代码发出来吧看看吧
    PS请把你的代码用中括号括起来放到code=Java标签中例如[code=Java]
    public class Test{
    }[/code]