class Sample1{
   int i = 12;
 }
 
 class Sample2{
   Sample s1= new Sample();
   int j = 10;
 }
 
 public class Test1{
 
   static Sample2  s2 = new Sample2(); /**为什么一定要是static成员?*//
  
   public static void main(String args[])
   {
     System.out.println(s2.s1.i);
   } 
 
 }初学java搞不懂这个public class,为什么不可以直接放属性Sample2 s2; ??

解决方案 »

  1.   

    因为静态方法main里边用到了s2这个对象,但是又没有创建Test1的对象,所以直接运行main的时候,s2是没有初始化的,是不能被调用的,但设为static则在main之前就被初始化了。
    还有,这里打错了:
     class Sample2{
       Sample s1= new Sample();
       int j = 10;
     }
    应改为:
     class Sample2{
       Sample1  s1= new Sample1();
       int j = 10;
     }
      

  2.   

    如果不是static成员,main就访问不到了,因为main是静态函数,静态函数不能访问非静态成员。
    原因是非静态成员类的每一个对象有一份,没有对象,就没有这个成员,而静态成员属于整个类,即使没有生成Test1类的任何对象,也可以直接访问它。要么你把s2定义成main的局部变量也可以。
    public static void main(String args[])
    {
         Sample2  s2 = new Sample2(); /**为什么一定要是static成员?*//
         System.out.println(s2.s1.i);

    因为函数自己局部的变量,总归是可以访问的。