2016-03-04 2 views
0

Я смущен о «пустоте», , поскольку он относится к методам.Что означает «пустота» как возвращаемый тип метода?

Я не знаю, что такое различие между двумя методами, когда человек имеет «пустоту», а другой нет.

Например, если я делаю:

Public meth (int amount) 
{ 

    amount = initial * interest; 
    return amount; 

} 

(не уверен, если он был прав, или даже действительно, взять имя «количество» и назовите его то же самое, как мой формальный параметр, но что имеет смысл в том, что вы выполняете вычисления и возвращает результат)

Тогда, если я сделал что-то вроде:

Public void Testing (int array[]) 
{ 

    //code that would modify the internals of an array 

} 

Будет ли второй один не имеют «возврат», потому что это больше о f общий метод, который может быть применен к любому целочисленному массиву, а первый - о работе над определенными переменными?

Был бы также оценен один или два примера того, когда я использовал или не использовал бы «void» и «return».

Еще одна вещь, которая меня смущает, - это вызов методов.

Я иногда знаю, что буду делать что-то подобное, например, с использованием метода тестирования выше,

Testing(ArrayName); 

Другие времена, это будет как:

NameOfWhateverImApplyingMethodTo.MethodName(); 

А потом времена когда все будет сделано должным образом:

Thing1.MethodName(Thing2); 

В каких обстоятельствах я бы переключил синта x для вызовов методов, подобных этому?

+0

Если у вас есть два вопроса, вы должны задать два вопроса. Вопроса о «пустоте» достаточно для одного вопроса. Вы должны сделать часть «вызывающих методов» отдельным вопросом. –

ответ

0

Тип возврата - это то, что вы получаете от него. Когда вы это называете, что вы надеетесь вернуться? Например, если метод получает среднее значение из двух чисел, то вы ожидаете номер обратно, поэтому тип возвращаемого значения будет иметь тип номера, например «int» (integer). Вы можете видеть, что он должен использовать эту логику или, глядя в методе слова return - то, что приходит после возврата, - это то, что возвращается, и его тип должен быть объявлен в методе (например, если он говорит «return 4;» он возвращает int, и должен быть, например, public int getFour()

Вы также спросили, например, о тестировании() и тестировании (слово) Помню, что у меня такая же сложность.Различие между ними также относится к линии декларации метода. Я проиллюстрирую.

public String testing(){ 
     return "a word"; 
    } 

Вызов этого метода осуществляется «System.out.println (testing());» должен печатать «слово». Вызов этого метода осуществляется с помощью «System.out.println (тестирование (« слово »)); даст вам проблему - это потому, что когда вы вызываете тестирование, он смотрит на соответствующий метод: один в правильном классе, с правильным типом возврата и с правильными аргументами/параметрами. Если вы вызываете тестирование («слово»), это означает, что вы используете String в качестве аргумента (потому что «слово» является строкой), и поэтому он пытается использовать метод тестирования (String aString), который не существует. Итак, вы используете пустые скобки, когда метод не принимает ввода, и вы кладете вещи в скобки, когда метод ожидает чего-то. Это должно быть менее запутанным, чем кажется, потому что обычно логично - если вы хотите вызвать метод, который возвращает среднее значение, вам нужно задать себе «Среднее значение , что?» Вероятно, вам нужно будет предоставить ему значения, которые вы хотите усреднить.

Двигаясь на: (а) тестирование() по сравнению с (б) AClass.testing() по сравнению с (с) aclass.testing() -

В (а), нет класса указано. Поэтому, если вы вызываете его из этого класса, Java может угадать, какой класс: этот, и он будет работать. Из любого другого класса он не будет знать, о чем вы говорите, и может даже оскорбить вас. В (b) вы указываете класс в целом - поэтому он будет знать, какой класс его найти, и он будет работать, если это «статический метод». * [см. внизу] В (c) вы указываете экземпляр из AClass, который вы хотите запустить «тестирование()» на *.

Например, представьте, что вы создали класс под названием «Бизнес». Вы создаете сто бизнес-объектов, указав для каждого имя, номер, адрес. , например.

Business b = new Business(name, number, address); 

Тогда в бизнес-классе у вас есть метод «getName()». Этот метод не принимает аргументов - вы можете видеть, что скобки пусты - так, если из другого класса вы вызываете «Business.getName()», как он может узнать, какое имя вы хотите? Вы только что создали сотню предприятий! Это просто не может. Поэтому для такого метода вы должны называть «b.getName()» (b - это бизнес, который мы создали выше), и он получил бы имя для этого экземпляра бизнеса - а именно, b. Я рад помочь, поэтому, если вы запутались в каких-либо частях того, что я только что написал, дайте мне знать, и я попытаюсь уточнить!

Редактировать: Немного о статических методах: Статические методы не относятся к экземпляру класса. getName(), например, получит имя this Бизнес - то есть этот экземпляр бизнес-класса. Но предположим, что в бизнес-классе вы создали метод, который взял первую букву каждого слова в String и преобразовал ее в верхний регистр - например, если вы хотите, чтобы названия компаний выглядели более профессиональными при их распечатке.

public static String stringToUpperCase(String aString){ 
    aString = aString.substring(0, 1).toUpperCase() + aString.substring(1); 
    return aString; 
} 

И использовать это, вы измените метод GetName() от:

public String getName(){ 
    return name; 
} 

к

public String getName(){ 
    return stringToUpperCase(name); 
} 

Новый метод используется здесь, чтобы сделать имя есть верхний регистр первый письмо - но это степень его участия в бизнес-классе.Вы заметили, что он не запрашивает информацию об имени, адресе или номере для определенного бизнеса. Он просто берет строку, которую вы ей даете, что-то делает, и возвращает ее обратно. Неважно, у вас нет Бизнеса или сотни. Для вызова этого метода, вы будете использовать:

System.out.println(Business.stringToUpperCase("hello")); 

Это будет печатать Привет. Если бы это было не статический метод, вы должны сделать новый бизнес первый:

Business b = new Business("aName", "aNumber", "anAddress"); 

System.out.println(b.stringToUpperCase("hello")); 

И если метод сделал необходим доступ к дополнительной информации Бизнес-экземпляра (как номер имя бизнес-или адрес), он не сможет быть переменной экземпляра.

+0

Я ценю все ответы, но этот действительно делает это для меня. – MrRunIt82

+0

Это очень грустно слышать :) Не так давно я боролся с этим материалом, поэтому разрешаю время, я постараюсь сделать себя доступным для вас - вы можете сообщить мне вопросы StackOverflow не примет, и я я постараюсь ответить на них –

+0

И нажмите, пожалуйста, рядом с ответом –

0

Первый пример - метод без типа возврата - constructor; используется, когда экземпляр создается с помощью new. Однако вы не можете вернуть значение из конструктора. Нечто подобное,

this.amount = initial * interest; // return amount; 

устанавливает поле amount к initial * interest.

1
  1. Java чувствителен к регистру, поэтому модификатор Public недействителен, public
  2. Вы не можете определить метод, как public methodName(int a), только конструктор имеет эту подпись, метод должен быть public void methodName(<signature>) для методов, которые дон» t вернуть что-либо или public <return type> methodName(<signature>) для методов, которые делают.
0

Void в основном означает, что метод ничего не вернет.

Если вы сделали

String name= "tim"; 
public void getName(){ 
return name; 
} 

Это приведет к ошибке, так как метод GetName возвращает строковый объект с именем имя, но объявление метода говорят, что я не возвращаю ничего - потому что он является недействительным.

Вместо этого метод должен быть:

String name = "tim"; 
public String getName(){ 
return name; 
} 

Теперь, когда метод GetName() вызывается она возвращает «имя» строка объекта с «тим» внутри него :)

Вы могли бы имеют пустоту для заданного метода. Так, например

String name = "tim"; 
public void setName(String newName){ 
this.name = newName; 
} 

Когда вызывается этот метод вы будете использовать setName("Andy"); и было бы установить значение переменной имя, чтобы быть «Энди». В этом методе ничего не возвращается, потому что он устанавливает что-то, но нет необходимости отправлять что-либо обратно, поэтому мы используем void в объявлении метода.

Надеюсь, это поможет.

1

Метод, который имеет void как возвращаемый тип, ничего не возвращает. Например, вы хотите установить поле firstName в своем классе. Вы напишете метод установки, как

public void setFirstName(String n) { 
this.firstName = n; 
} 

Как вы можете видеть, вы просто установив переменную класса и не требует ничего возвращать.

Если вы не используете void, вы должны указать тип возвращаемого значения для метода. Подобно этому, если вы хотите написать геттер для выше переменной как:

public String getFirstName() { 
return this.firstName; 
} 

После того, как вы обеспечиваете тип возврата, вам придется возвращать значение этого типа в противном случае ваш код не будет компилироваться.

Вызов метода может быть сделано на основе того, где вы вызываете его от и используется модификатор:

  • Если вы вызываете метод из того же класса, то вы можете просто написать firstName = getFirstName()
  • Если вы вызываете метод из другого класса, то вам требуется объект класса метода в качестве спецификатора как personObject.getFirstName()
  • Если вы вызываете статический метод, то вам требуется имя класса, как классификатор, как Person.getFirstName();
Смежные вопросы