小弟刚接触JAVA,对JAVA的语法格式不太熟悉(我看的书上没有讲到),请教各位大虾一下,不盛感激!一个Test.java文件:public class Test {
    public static void main(String[] args){
        DataOnly dataOnly = new DataOnly();
    }
}
class DataOnly {
    private int i;
}DataOnly在Test外定义,编译可以执行,我想知道是否可以像下面一样:
public class Test {
    public static void main(String[] args){
        DataOnly dataOnly = new DataOnly();
    }
    class DataOnly {
        private int i;
    }
}不可以把所有的类都定义在Test中吗??还有在main中可以定义类吗??谢谢了

解决方案 »

  1.   

    你的写法叫内隐类(inner class),内隐类可以放在类中任何地方。
      

  2.   

    public class Test {
        public static void main(String[] args){
         Test test = new Test();
        
            DataOnly dataOnly =test.new DataOnly();
        }
           
        class DataOnly {
            private int i;
        }
    }
    main 是static 不能直接定义DataOnly dataOnly = new DataOnly();可以把所有的类都定义在Test中,但不太好
      

  3.   

    mian()是一个方法,不能在方法中定义类,
    可以在类中定义类,也可以在一个类的类外定义。
      

  4.   

    不知楼主所指的"下面这样"是怎样?
    如果说内部类的话,完全可以像"下面这样".至于内部类好不好,要看情况,内部类很大程度上完善了Java多重继承的解决方案,也有他的作用.
    但如果说静态方法内实例化一个非静态对像"下面这样"是行不通的.因为静态方法是类的方法,可以不用与一个对象相对应,而非静态方法必须与一个对象相对应.所以不能在没有静态方法用非静态的变量或引用,因为可能还没实例化一个与他们相应的对象.
      

  5.   

    这样写就是内部类可行
    写在方法里面还可以用匿名类在main方法中。
      

  6.   

    public class Test {
        Test() {
            Thread myThread = new MyThread();
            Thread xThread = new Thread(){
                public void run()
                {
                    System.out.println("匿名内部类,只有临时线程名"+this.getName());
                }
            };
            
            myThread.start();
            xThread.start();
        }    private class MyThread extends Thread {
            public void run()
            {
                System.out.println("内部类,类名为MyThread,临时线程名"+this.getName());
            }
        }    public static void main(String[] args) {
            new Test();
        }
    }“匿名”是指没有类名
    你的代码有误!!如果想在main(一个static方法)中生成内部类的对象,就必须把内部类声明为static!
    像这样:
    public class Test {
        public static void main(String[] args){
            DataOnly dataOnly = new DataOnly();
        }
        static class DataOnly {
            private int i;
        }
    }
    否则你就写:
    public class Test {
        public static void main(String[] args) {
            new Test();
        }    public Test() {
            DataOnly dataOnly = new DataOnly();
        }
        class DataOnly {
            private int i;
        }
    }