Кіріспе
Біз білетіндей, Java – an objectіге бағытталған бағдарламалау тілі. Яғни, негізгі ұғым, өйткені іргетастардың негізін айту үшін бәрі an object болып табылады. Объектілер сыныптар арқылы сипатталады.
Сыныптар өз кезегінде күй мен мінез-құлыққа ие. Мысалы, банктік шоттың шоттағы ақша сомасы түріндегі күйі болуы және қалдықтың ұлғаюы мен азаюы мінез-құлқы болуы мүмкін. Java тіліндегі мінез-құлық әдістер арқылы жүзеге асырылады. Әдістерді қалай сипаттау Java тілін үйрену саяхатыңыздың ең басында енгізіледі. Мысалы, Oracle ресми оқулығында: “
Әдістерді анықтау ”. Мұнда екі маңызды аспект бар:
- Әрбір әдістің қолтаңбасы бар. Қолтаңба әдіс атауынан және оның енгізу параметрлерінен тұрады;
- Әдістер қайтару түрін көрсетуі керек;
- Қайтару түрі әдіс қолтаңбасының бөлігі емес.
Тағы да, бұл Java тілі қатты терілген тіл және компилятор қай түрлердің мүмкіндігінше қайда қолданылатынын алдын ала түсінгісі келетіндігінің салдары. Тағы да, бізді қателіктерден қорғау үшін. Жалпы, бәрі жақсылық үшін. Бұл тағы да бізге деректермен жұмыс істеу мәдениетін оятады, меніңше. Сонымен, әдістер үшін мән түрі көрсетіледі. Осы бірдей мәнді әдістерден қайтару үшін кілт сөзі пайдаланылады
return
.
Java тіліндегі кілт сөзді қайтару мәлімдемесі
Мәлімдеме кілт сөзі
return
oracle оқулығында талқыланған "ағынды басқару мәлімдемелеріне" қатысты "
Басқару ағыны туралы мәлімдемелер ". Сондай-ақ, мәндерді қалай қайтару керектігі туралы ресми оқулықтан оқуға болады: «
Әдістен мәнді қайтару ». Компилятор әдістен қайтарылған мән әдіспен көрсетілген қайтарылатын мән түріне сәйкес келетінін мүмкіндігінше мұқият бақылайды. Мысал ретінде tutorialspoint сайтындағы
Online IDE қолданайық. Бастапқы мысалды қарастырайық:
public class HelloWorld {
public static void main(String []args) {
System.out.println("Hello World");
}
}
Көріп отырғанымыздай, мұнда әдіс орындалады
main
, ол бағдарламаға кіру нүктесі болып табылады. Код жолдары жоғарыдан төменге қарай орындалады. Біздің
main
әдіс мәндерді қайтара алмайды, әйтпесе біз қатені аламыз: "
Error: Main method must return a value of type void
". Сондықтан әдіс экранға жай ғана шығады. Енді жолды қабылдауды хабарламаны алудың бөлек әдісіне ауыстырайық:
public class HelloWorld {
public static void main(String []args) {
System.out.println(getHelloMessage());
}
public static String getHelloMessage() {
return "Hello World";
}
}
Көріп отырғанымыздай, кілт сөзді пайдалана отырып
return
, біз кейінірек әдісте қолданылған қайтару мәнін көрсеттік
println
. Әдістің сипаттамасында (анықтамасында)
getHelloMessage
біз оның бізге қайтаратынын көрсеттік
String
. Бұл компиляторға әдіс әрекеттерінің жариялану тәсіліне сәйкестігін тексеруге мүмкіндік береді. Әрине, әдіс анықтамасында көрсетілген қайтару мәнінің түрі codeтан қайтарылған мән түрінен кеңірек болуы мүмкін, яғни. Ең бастысы, түрлері бір-біріне қысқарады. Әйтпесе, біз құрастыру уақытының қатесін аламыз: "
error: incompatible types
". Айтпақшы, бірден сұрақ туындауы мүмкін:
return
ол бағдарлама ағынын басқару операторларына неліктен қолданылады? Бірақ ол жоғарыдан төменге қарай бағдарламаның қалыпты ағынын бұзуы мүмкін болғандықтан. Мысалы:
public class HelloWorld {
public static void main(String []args){
if (args.length == 0) {
return;
}
for (String arg : args) {
System.out.println(arg);
}
}
}
Мысалдан көрініп тұрғандай,
main
егер біздің java бағдарламамыз параметрсіз шақырылса, әдістің орындалуын үземіз.
return
Егер сізде code болса, ол қолжетімсіз болатынын есте ұстаған жөн . Ал біздің смарт компилятор мұны байқайды және мұндай бағдарламаны іске қосуға мүмкіндік бермейді. Мысалы, бұл code құрастырылмайды:
public static void main(String []args) {
System.out.println("1");
return;
System.out.println("2");
}
Мұны айналып өту үшін лас хак бар. Мысалы, жөндеу мақсатында немесе басқа себептермен.
return
Жоғарыдағы codeты блокқа орау арқылы түзетуге болады
if
:
if (2==2) {
return;
}
Қатені өңдеуде қайтару мәлімдемесі
Бір өте күрделі жағдай бар - біз оны
return
қателерді өңдеумен бірге пайдалана аламыз. Бірден айтқым келеді, оны блокта пайдалану
return
өте
catch
, өте нашар пішін, сондықтан сіз одан аулақ болуыңыз керек. Бірақ бізге мысал керек, солай ма? Мінеки:
public class HelloWorld {
public static void main(String []args) {
System.out.println("Value is: " + getIntValue());
}
public static int getIntValue() {
int value = 1;
try {
System.out.println("Something terrible happens");
throw new Exception();
} catch (Exception e) {
System.out.println("Catched value: " + value);
return value;
} finally {
value++;
System.out.println("New value: " + value);
}
}
}
Бір қарағанда, 2 қайтару керек сияқты, өйткені
finally
ол әрқашан орындалады. Бірақ жоқ, мән 1 болады және айнымалы мәнге өзгерту
finally
еленбейді. Оның үстіне, егер ол
value
нысанды қамтыса және біз
finally
десек
value = null
, ол
catch
әлі де нысанға емес, сілтемені қайтарады
null
. Бірақ блоктан
finally
оператор
return
дұрыс жұмыс істейтін еді. Әріптестер мұндай сыйлық үшін алғыс айтпайтыны анық.
void.class
Және соңында. сияқты оғаш конструкция жазуға болады
void.class
. Бұл неліктен және оның мәні неде? Шындығында,
Java Reflection API қолданылатын әртүрлі құрылымдарда және қиын жағдайларда бұл өте қажет болуы мүмкін. Мысалы, әдіс қай түрін қайтаратынын тексеруге болады:
import java.lang.reflect.Method;
public class HelloWorld {
public void getVoidValue() {
}
public static void main(String[] args) {
for (Method method : HelloWorld.class.getDeclaredMethods()) {
System.out.println(method.getReturnType() == void.class);
}
}
}
Бұл әдістердің нақты codeын ауыстыру қажет болатын сынақ құрылымдарында пайдалы болуы мүмкін. Бірақ бұл әрекетті орындау үшін бұл әдіс қалай әрекет ететінін түсіну керек (яғни, ол қандай түрлерді қайтарады).
main
Жоғарыдағы codeтан әдісті жүзеге асырудың екінші жолы бар :
public static void main (String[] args) {
for (Method method : HelloWorld.class.getDeclaredMethods()) {
System.out.println(method.getReturnType() == Void.TYPE);
}
}
Олардың арасындағы айырмашылық туралы өте қызықты талқылауды stackoverflow арқылы оқуға болады:
java.lang.Void және void арасындағы айырмашылық неде? #Вячеслав
GO TO FULL VERSION