2013-11-22 78 views
0

我有一個很好奇的問題......如果我在一種方法中聲明瞭一個整數,例如:i = 1,我可以接受這個i並在我的主類(或另一種方法)中使用它的值嗎?下面的代碼可能有助於理解我在問什麼......當然,根據答案的不同,代碼可能不正確。是否可以將方法中的整數鏈接到類中?

public class main { 
    public main() { 
    int n = 1; 
    System.out.print(n + i); 
    } 

    public number(){ 
    i = 1; 
    } 
} 
+0

如果你的'i'是一個實例變量,然後是,SOP將起作用,否則,不會。 – SudoRahul

+0

取決於你想要什麼和你正在創建什麼樣的對象,你可以在你的類中聲明字段併爲其賦值,並且在類 –

+0

的任何方法(非靜態)中使用,請閱讀[visibility](http ://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html),並閱讀Joshua Bloch在'Effective Java'中限制變量範圍的章節 – avalancha

回答

0

你可以使用一個類範圍的領域將變量存儲在類對象中,或者可以將其從一個方法返回,或者將其作爲參數傳遞給另一個方法。請注意,您需要按照正確的順序調用您的方法,這不是最好的設計方案。

public class main { 

    int n; 
    int i; 
    public main() { 
    n = 1; 
    System.out.print(n + i); 
    } 

    public number(){ 
    i = 1; 
    } 
} 
2

不,你不能!除非你讓它成爲一個實例變量!

或者實際上將它作爲參數發送給函數!

0

是,創建一個classmember:

public class Main 
{ 
    private int i; 

    public main() { 
    int n = 1; 
    System.out.print(n + i); 
    number(); 
    System.out.print(n + i); 
    } 

    public number(){ 
    i = 1; 
    } 
} 
0
void method(){ 
    int i = 0; //has only method scope and cannot be used outside it 
} 

void method1(){ 
    i = 1; //cannot do this 
} 

這是因爲i的範圍僅限於該方法是在聲明

1

首先,讓我們開始簡單。所有不是構造函數的方法都需要返回類型。換句話說,

public void number(){ 
    i = 1; 
} 

會更合適。

第二:main方法傳統上有一個public static void main(String[] args)的簽名。

現在,談談你的問題。我們來看幾個例子。我將打破一些常見的編碼習慣來解決我的觀點。

案例1

public void number(){ 
    i = 1; 
} 

當你的代碼現在站立,你將有一個編譯時錯誤,因爲i沒有曾經宣佈過。你可以通過在課堂上的某個地方聲明來解決這個問題。要訪問此變量,則需要Main類型的對象,這將使你的類是這樣的:

public class Main { 
    int i; 

    public static void main(String[] args) { 
     Main myMain = new Main(); 
     myMain.number(); 
     System.out.print(myMain.i); 
    } 

    public void number(){ 
     i = 1; 
    } 
} 

案例2

比方說,你不想讓i類變量。你只是希望它是由函數返回的值。然後,您的代碼應該是這樣的:

public class Main { 

    public static void main(String[] args) { 
     Main myMain = new Main(); 
     System.out.print(myMain.number()); 
    } 

    public int number(){ //the int here means we are returning an int 
     i = 1; 
     return i; 
    } 
} 

案例3

前面的兩個案例將打印出1作爲它們的輸出。但讓我們嘗試一些不同的東西。

public class Main { 
    int i = 0; 

    public static void main(String[] args) { 
     Main myMain = new Main(); 
     myMain.number(); 
     System.out.print(myMain.i); 
    } 

    public void number(){ 
     int i = 1; 
    } 
} 

你認爲在這種情況下輸出是什麼?這不是1!在這種情況下,我們的輸出是0。爲什麼?

陳述int i = 1;number(),它創建一個新的變量,也被稱爲i,在number()範圍內。只要number()完成,該變量就會被清除。原來的i,在public class Main下聲明沒有改變。因此,當我們打印出myMain.i,其值爲0

案例4

更多的情況,只是爲了好玩:

public class Main { 
    int i = 0; 

    public static void main(String[] args) { 
     Main myMain = new Main(); 
     System.out.print(myMain.number()); 
     System.out.print(myMain.i); 
    } 

    public int number(){ 
     int i = 1; 
     return i; 
    } 
} 

什麼將這個輸出是什麼?這是10。你爲什麼問?因爲number()返回i是在number()範圍的i並具有1 myMaini的值,但是,仍然不變案例3

相關問題