2012-12-21 57 views
1
public class A 
    { 
     private void sub() 
     { 
      add(); 
     } 
     private void add() 
     { 
       ----- 
     } 
    } 

我可以調用子Add方法類似上面,我可以做以下同類及其對象

public class A 
{ 
    private void sub() 
    { 
     A obj_A = new A(); 
     obj_A.add(); 
    } 
    private void add() 
    { 
      ----- 
    } 
} 

我想知道它們之間的差異。 謝謝。

回答

1

在第一種方法中,您正在調用類的同一個實例的add方法。在第二個示例中,您正在創建該類的新實例並調用其方法add

例如:

public class A 
    { 
     private int num = 3; 

     private void sub() 
     { 
      num = 10;    
      add(); 
     } 
     private void add() 
     { 
       system.out.println(num); 
     } 
    } 

public class A 
{ 
    private int num = 3; 

    private void sub() 
    { 
     A obj_A = new A(); 
     num = 10;  
     obj_A.add(); 
    } 
    private void add() 
    { 
      system.out.println(num); 
    } 
} 

在第一個例子,它會打印10.在第二個,它會因爲你正在打印的實例本身NUM第一個例子打印3.本的操作系統,你以前修改過。在第二個示例中,您還修改了num值,但是由於您正在調用添加您創建的新類,因此它將打印3.

+0

但在第二種情況下,如果我將num分配爲10,然後調用add,那麼num將再次爲10. – Raghurocks

+1

@Raghurocks ..Num不會是10。另一個實例運行'add()'方法。而在'sub()'方法中,你正在爲'num = 10'設置不同的實例。 –

+1

@Raghurocks ..目前它是--' this.num = 10;'要改變新對象的數量,你需要 - 'obj_A.num = 10;'。 –

4
  • 如果創建的實例與第一類和調用sub()你將有法範圍內的1個 實例。
  • 如果您使用第二個類創建A的實例並調用sub(),您將擁有方法範圍A的2個實例。
+0

這可能會造成混淆,因爲obj_A只有局部範圍,並且會在方法子完成時釋放。 – Xetius

+0

@Xetius你是對的。現在我認爲混亂已經消除。 – Juvanis

0
private void sub() 
{ 
    add(); 
} 

調用其稱爲sub()方法在同一對象上的方法add()

private void sub() 
{ 
    A obj_A = new A(); 
    obj_A.add(); 
} 

創建類型A的新對象並調用其上的方法add()

0

通過第二方法中,爲了調用add方法兩個對象將被創建,通過使用該方法1中,我們可以訪問由只創建一個對象

0

在第二計算策略unneciserly我們創建對象添加方法。

首先接近更好。