JavaRush /Java блогы /Random-KK /Java тіліндегі қайтару мәлімдемесі
Viacheslav
Деңгей

Java тіліндегі қайтару мәлімдемесі

Топта жарияланған

Кіріспе

Біз білетіндей, Java – an objectіге бағытталған бағдарламалау тілі. Яғни, негізгі ұғым, өйткені іргетастардың негізін айту үшін бәрі an object болып табылады. Объектілер сыныптар арқылы сипатталады. Java тіліндегі қайтару мәлімдемесі - 1Сыныптар өз кезегінде күй мен мінез-құлыққа ие. Мысалы, банктік шоттың шоттағы ақша сомасы түріндегі күйі болуы және қалдықтың ұлғаюы мен азаюы мінез-құлқы болуы мүмкін. Java тіліндегі мінез-құлық әдістер арқылы жүзеге асырылады. Әдістерді қалай сипаттау Java тілін үйрену саяхатыңыздың ең басында енгізіледі. Мысалы, Oracle ресми оқулығында: “ Әдістерді анықтау ”. Мұнда екі маңызды аспект бар:
  • Әрбір әдістің қолтаңбасы бар. Қолтаңба әдіс атауынан және оның енгізу параметрлерінен тұрады;
  • Әдістер қайтару түрін көрсетуі керек;
  • Қайтару түрі әдіс қолтаңбасының бөлігі емес.
Тағы да, бұл Java тілі қатты терілген тіл және компилятор қай түрлердің мүмкіндігінше қайда қолданылатынын алдын ала түсінгісі келетіндігінің салдары. Тағы да, бізді қателіктерден қорғау үшін. Жалпы, бәрі жақсылық үшін. Бұл тағы да бізге деректермен жұмыс істеу мәдениетін оятады, меніңше. Сонымен, әдістер үшін мән түрі көрсетіледі. Осы бірдей мәнді әдістерден қайтару үшін кілт сөзі пайдаланылады return.

Java тіліндегі кілт сөзді қайтару мәлімдемесі

Мәлімдеме кілт сөзі returnoracle оқулығында талқыланған "ағынды басқару мәлімдемелеріне" қатысты " Басқару ағыны туралы мәлімдемелер ". Сондай-ақ, мәндерді қалай қайтару керектігі туралы ресми оқулықтан оқуға болады: « Әдістен мәнді қайтару ». Компилятор әдістен қайтарылған мән әдіспен көрсетілген қайтарылатын мән түріне сәйкес келетінін мүмкіндігінше мұқият бақылайды. Мысал ретінде 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 арасындағы айырмашылық неде? #Вячеслав
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION