2013-01-11 97 views
-3

我從一本教科書中獲得了這段代碼。錯誤:非靜態變量不能從靜態上下文中引用

class FirstClass 
{ 
    int idNo =25; 
    public static void print() 
    { 
     System.out.println("firstclass citizen " + idNo); 
    } 
} 
class SecondClass 
{ 
    int idNo =24; 
    public static void print() 
    { 
     System.out.println("secondclass citizen" + idNo); 
    } 
} 
public class People 
{ 
    //FirstClass female; 
    //SecondClass male; 
    public static void main(String[] args) 
    { 
     System.out.println("people from java world"); 
     FirstClass.print(); 
     SecondClass.print(); 
    } 
} 

但這個編譯代碼時,我得到了以下錯誤

People.java:7: error: non-static variable idNo cannot be referenced from a stati 
c context 
      System.out.println("firstclass citizen " + idNo); 
                ^
People.java:16: error: non-static variable idNo cannot be referenced from a stat 
ic context 
      System.out.println("secondclass citizen" + idNo); 
                ^
2 errors 
+0

-1,因爲1)標題和實際問題不同意2)有很多重複,只是*搜索錯誤* - 即'[java]非靜態變量,這不能從靜態上下文中引用。我希望這個問題很快就會被刪除:你可以加快這個過程。 – 2013-01-11 05:48:34

回答

2

this指當前的Object,可以參考對當前對象的任何成員從一個實例方法或通過使用該構造內。 但是,您不能在靜態上下文(方法或塊)中使用this引用。

static方法可以在不創建該類的對象的情況下調用。所以如果你在靜態上下文中使用這個或者非靜態變量,它將會產生編譯錯誤。

+0

我改變了你的答案。問題也。錯誤更改爲People.java:7:錯誤:非靜態變量idNo無法從站點引用 c上下文 System.out.println(「firstclass citizen」+ idNo); ^ People.java:16:error:非靜態變量idNo不能從屬性引用 ic context System.out.println(「secondclass citizen」+ idNo); ^ 2錯誤 – Neeraj

+0

首先我不明白爲什麼-1?你的類成員變量是非靜態的,所以你不能在靜態方法或塊中使用它們。 –

+0

-1不是我:) – Neeraj

0

你可能希望創建類的實例,並把這些方法爲實例方法,而不是靜態方法。

public class FirstClass { 

    private int idNo = 25;   

    public void print() { 
     System.out.println("firstclass citizen " + this.idNo); 
    } 
} 

,然後從主方法:

FirstClass fc = new FirstClass(); 
fc.print(); 
+0

這不起作用 – Neeraj

+0

我忘記在我的示例代碼中包含idNo。我已更新我的示例。 – claesv

-1

不能引用非靜態的屬性和使用到一個靜態方法,即

class FirstClass 
{ 
    static int idNo =25; 
    public static void print() 
    { 
      System.out.println("firstclass citizen " + idNo); 
    } 
} 
class SecondClass 
{ 
    static int idNo =24; 
    public static void print() 
    { 
      System.out.println("secondclass citizen" + idNo); 
    } 
} 
public class People 
{ 
    FirstClass female; 
    SecondClass male; 
    public static void main(String[] args) 
    { 
      System.out.println("people from java world"); 
      FirstClass.print(); 
      SecondClass.print(); 
    } 
} 
+0

People.java:7:錯誤:非靜態變量idNo不能從靜態引用 c上下文 System.out.println(「firstclass citizen」+ idNo); ^ People.java:16:error:非靜態變量idNo不能從屬性引用 ic context System.out.println(「secondclass citizen」+ idNo); ^ 2錯誤這是您的答案錯誤 – Neeraj

+0

-1如果您希望它們具有靜態方法和變量,那麼您的類也需要是靜態的。 – nhydock

+0

這個類不需要是靜態的。只有屬性。你是否在每個屬性之前放置了靜態詞? –

相關問題