2013-02-12 4 views
-1

При создании метода внутри класса, если используется параметр:Создание объекта в методе параметров

public String Method(ClassName NewObject){}

или в моем примере ниже:

public String EqualsTo(Deck aCard){} 

он будет создавать новый объект этот класс в этом методе? Если кто-то не возражает против того, что я делаю с этим параметром?

ПРИМЕЧАНИЕ. Не обращайте внимания на любые незначительные ошибки синтаксиса, поскольку я только что построил это, чтобы получить мой вопрос лучше, поэтому это не полный класс.

import java.util.Scanner; 
import java.util.Random; 

public class Deck { 
private int suit; 
private int rank; 
private Random generator = new Random(); 
Scanner in = new Scanner(System.in); 

    //Default constructor 
    public Deck() { 
    suit = suit.random(4); 
    rank = rank.random(13); 
    } 


public String EqualsTo(Deck aCard){} 
} 
+1

Вы действительно должны быть очень осторожны с синтаксисом здесь: «незначительная синтаксическая ошибка» может легко сделать ваш код означающим совершенно другую вещь. – dasblinkenlight

+1

Чтобы посмотреть, как проходят объекты, прочитайте это сообщение http://stackoverflow.com/questions/40480/is-java-pass-by-reference – Honorificabilitudinitas

ответ

1

Объекты созданы, когда вы используете ключевое слово new. С другой стороны, когда вы объявляете метод как

public String EqualsTo(Deck aCard){} 

это говорит о том, что метод EqualsTo() принимает Deckссылки в качестве параметра. Чтобы использовать этот метод, вам необходимо создать объект Deck и сохранить ссылку на него. Затем вы отправляете ссылку на метод.

+0

Можете ли вы создать новую палубу в Main.Java и передать это как параметр с равными, например, (предположим, что я создал объект уже как NewDeck): 'Deck.EqualsTo (NewDeck);' – Bob

+0

@BobDunakey Да. То есть (почти) точно, как 'EqualsTo()' будет работать. Однако вы должны использовать экземпляр колоды, как для вызова метода, так и для параметра. Вы не можете использовать имя класса 'Deck' для вызова этого метода. –

1

Этот параметр действует как держатель места для этого типа объекта. Это не создает его, метод подпись говорит:

  1. Я являюсь EqualsTo() методом, и я беру/требуюсь Deck типа экземпляра/объекта в качестве параметра.

  2. В результате он возвращает String.

Кстати, я рекомендую использовать логический тип возвращаемого типа вместо «String» для метода EqualsTo.

1

Фундаментальная вещь: Java передается по значению.

  1. Новый объект не создан.
  2. Ссылка на объект, созданная вызывающим объектом, копируется в аргумент метода aCard.
  3. Любые изменения, сделанные на этом объекте, будут оставаться видимыми вызывающему объекту. Это потому, что опорное значение указывает на тот же адрес расположения объекта.

Вот пример.

public class Test2 { 

    public int bla; 

    public static void main(String[] args) { 
     Test2 test = new Test2(); 
     test.bla = 878; 
     test.doSome(test); // Calling Location 
     System.out.println(test.bla); 
    } 

    public void doSome(Test2 test) { 
     test.bla = 95; 
    } 
} 
1

NO

public String EqualsTo(Deck aCard){} 

ли не создать новый объект, когда она вызывается.

Здесь созданы объекты.Использовать случай

Deck deck1 = new Deck(); // NEW OBJECT CREATED 
Deck deck2 = new Deck(); // NEW OBJECT CREATED 

String result = deck1.EqualsTo(deck2); // NO NEW OBJECT CREATED, 
            // JUST PASSED REFERENCE OF EXISTING OBJECT 
            // (except the result of course, which is probably a new object) 
Смежные вопросы