本人初学JAVA对static的用法很迷糊,以下有三个程序,大家帮我分析一下,谢谢!
public class mm
{
 public static void main(String args[])
 { 
  star();}
  public static void star()
 {
  System.out.print("i love you");
 }
}
//书上说:在star()method之前要加上static关键字,是因为main()本身也声明成static,而static method内只能访问到static成员的原因,故要把star()声明成static才行!  可是下面的程序的方法中为什么没有声明成static???class mm
{ int num;
 void set_num(int n) //为什么此处的方法不用声明成static也可以被g1.set_num(5)访问???
{
 num=n;
 System.out.println("num="+num);
 }
}
 public class gg
{ public static void main(String args[])
 {
  gg g1=new gg();
  g1.set_num(5);//g1.set_num(5);为什么可以访问非static的void set_num(int n)??
 }
}
而下面的内部类,却又要声明成static才能访问???public class mm

 public static void main(String args[])
  { gg g1=new gg();
   g1.set_num(5);
  }
  static class gg //这个所谓的内部类,此处为什么要声明成static???
  {
    int num;
 void set_num(int n){
  num=n;
 System.out.println("num="+num);
  }
}
请各位大哥大姐帮忙,烦恼好多天了,谢谢谢谢!

解决方案 »

  1.   

    寰堢畝鍗?锛屽湪闈欐€佹柟娉曚腑璁块棶鍒殑闈為潤鎬佹柟娉曠敤鐢熸垚绫诲璞$殑琛屽舰寮忥紝鐢ㄥ璞℃潵璋冪敤閭d釜闈為潤鎬佹柟娉曞氨鍙互浜嗭紝锛屽湪闈欐€佹柟娉曢噷瑕佽闂潪闈欐€佹柟娉曞彧鏈夌敤瀵硅薄鏉ヨ皟鐢紝绗簩涓綘鐢熸垚浜嗕竴涓璞1锛岀涓€涓綘鏄洿鎺ュ啓鐨剆tar();娌℃湁瀵硅薄璋冪敤銆傜涓変釜鍐呴儴绫讳篃涓€鏍蜂綘鐩存帴浣跨敤浜嗗唴閮ㄧ被鐨刵um鑰屾病鏈夐€氳繃瀵硅薄璁块棶锛屾墍浠ュ繀椤诲0鏄庢垚static
      

  2.   

    did you find that class gg and method star which shouled be decleared static are ranking  the same with method main which is staticmy poor english!
      

  3.   

    My  Work Pc Could mot resolve  Chinese ,May be You can mail me [email protected]  from You have said you  should know that:
    1. You should First Initialize OUter class ,then Inner class(Do not include static).2.Static inner  class is just the member of outter Class ,You should not Initialize Outter Class,still can use. 3.Plz remember give Score to
      

  4.   

    public class mm
    {
      private int a=1;
      private static int b=2;  public static void star()// MUST STATIC
     {
      System.out.print("i love you");
     } public static void main(String args[])//STATIC
     {    star();
    // System.out.print("a="+a);//ERROR: NOT STATIC MENBER
     System.out.print("b="+b);//STATIC MENBER
      
     }
    }
      

  5.   

    class T{
      public static void main(String args[]){
        staticFun();
        new T().nonstaticFun();
        new staticclass();
        new nonstaticclass();
     }
      public static void staticFun(){}
      public void nonstaticFun();  static class staticclass{}
    }class nostaticclass{}
      

  6.   

    class mm
    { int num;
     void set_num(int n) //涓轰粈涔堟澶勭殑鏂规硶涓嶇敤澹版槑鎴恠tatic涔熷彲浠ヨg1.set_num(5)璁块棶???
    {
     num=n;
     System.out.println("num="+num);
     }
    }
     public class gg
    { public static void main(String args[])
     {  
        
        mm m1=new mm();
        m1.set_num(5);
       //error
      //gg g1=new gg();
      //g1.set_num(5);//g1.set_num(5);涓轰粈涔堝彲浠ヨ闂潪static鐨剉oid set_num(int n)??
     }
    }
    // A poor mm.
      

  7.   

    第一、   g1.set_num(5);//g1.set_num(5);为什么可以访问非static的void set_num(int n)??
    因为 g1是gg的一个实例(对象) 一个对象既可以访问静态成员也可以访问动态成员,所以这个地方非static的void set_num(int n)可以被g1调用。第二、 static class gg //这个所谓的内部类,此处为什么要声明成static???
    之所以要声明成静态内嵌类,是因为你在static main()里使用了 直接创建gg实例(对象)的方式了,    如果你以下面的方式创建gg的对象的话,就不用声明为静态内嵌类:
    mm m= new mm();
    mm.gg g1 = m.new gg(); 以这种方式创建g1的话,内嵌类就不用声明为static了,第三、给你讲述一下静态内嵌类和动态内嵌类
      内嵌类,实际上也是作为外围类的“成员”来看待的。不使用static修饰的内嵌类是动态内嵌类,其定义内部可以访问外围类的任何成员,并可通过“外围类.this”的格式来代表外部类的当前对象,其对象必须依附外围类的一个对象才能创建,即动态内嵌类的对象必须绑定于一个外围类的对象。
       假设A为外围类,B为其内部的动态内嵌类,要从A的外部(包括静态方法,静态初始化语句)创建内嵌类的对象需要经过这样的步骤:
    A a = new A(); //创建外围类的对象
    A.B b = a.new B();//在外围类的对象a上创建其内部内嵌类B的对象,其引用赋给变量b
       一个静态内嵌类,则可以直接使用“new 类型(参数)”的通用格式来创建,例如:
    A.B b = new A.B(); 
      

  8.   

    接分!怎么也要给我一半分啊,我还发了两个供你测试比较的程序...jfjfjfjfjfjfjfjfjf...
      

  9.   

    为什么又是“小女子”呢,是不是感觉CSDN的男生看到了“小女子”就会有求必应呢,把CSDN的男生都看成什么?真的好奇怪,脑筋动在了这个地方?哈……
      

  10.   

    static 是静态的
    可以直接用类名调用没有 static 的,要先 new 出对象,用  对象 才可以调用本人刚刚学,可以一起讨论