sourcecode

Java에 goto 스테이트먼트가 있나요?

copyscript 2022. 7. 30. 18:17
반응형

Java에 goto 스테이트먼트가 있나요?

나는 이것에 대해 혼란스럽다.우리는 대부분 자바어에는 goto 문장이 없다고 들었다.

그런데 그게 자바 키워드 중 하나라는 걸 알게 됐어요.어디에 사용할 수 있습니까?사용할 수 없다면 왜 자바에 키워드로 포함시켰을까요?

James 은 James Gosling의 JVM을 .goto이 기능을 불필요하게 삭제했습니다. 이유 : ★★★★★goto는, 은 보다 쉬운할 수 것이 예: 「이러한 문장으로 치환할 수 있습니다」).break/continue이치노

출처 : James Gosling, Q&A 세션

Java 키워드 리스트는,goto쓰이지 않다

원래의 JVM(@VitaliiFedorenko의 답변 참조)에 있었지만, 그 후 삭제되었습니다.이것은 아마도 Java의 새로운 버전에 추가될 경우를 대비해 예약된 키워드로 보관되어 있을 것입니다.

ifgoto에서는 '이러다'라는 되고 있습니다.goto식별자(예: 이름, 메서드 이름 등)가 끊어질 수 있습니다. ★★★★★★★★★★★★★★★★★★★★.goto키워드입니다.이러한 코드는 현재 컴파일도 되지 않습니다.또, 기존의 코드를 깨지 않고, 나중에 실제로 무언가를 실행할 수 있습니다.

키워드는 존재하지만 구현되지 않습니다.

내가 생각할 수 있는 goto를 사용하는 좋은 이유는 이것뿐이다.

for (int i = 0; i < MAX_I; i++) {
    for (int j = 0; j < MAX_J; j++) {
        // do stuff
        goto outsideloops; // to break out of both loops
    }
}
outsideloops:

Java에서는 다음과 같이 할 수 있습니다.

loops:
for (int i = 0; i < MAX_I; i++) {
    for (int j = 0; j < MAX_J; j++) {
        // do stuff
        break loops;
    }
}

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html

키워드 const와 goto는 현재 사용되지 않지만 예약되어 있습니다."

그래서 언어 디자이너들이 필요성을 느낀다면 언젠가 사용할 수 있을 것이다.

또, 이러한 키워드를 가지는 언어(예를 들면 C, C++)의 프로그래머가 그것들을 잘못 사용하고 있는 경우, Java 컴파일러는 유용한 에러 메세지를 제공할 수 있습니다.

아니면 프로그래머가 goto를 사용하지 않도록 하기 위해서였을 수도 있습니다.

향후 사용을 위해 예약되어 있습니다('Java Language Keywords' 참조).

키워드 const와 goto는 현재 사용되지 않지만 예약되어 있습니다.

Java에 goto 문이 없는 이유는 "Java Language Environment"에서 찾을 수 있습니다.

Java에 goto 문이 없습니다.연구들은 고토가 단순히 "있기 때문에"가 아니라 더 자주 잘못 사용된다는 것을 보여주었다.예를 들어, goto가 스테이트먼트 중간에 미치는 영향에 대한 규칙은 없습니다.약 10만 줄의 C 코드에 대한 연구에서 goto 문장의 약 90%는 순전히 중첩된 루프에서 벗어나기 위한 효과를 얻기 위해 사용된 것으로 확인되었습니다.위에서 설명한 바와 같이 멀티레벨 브레이크 앤 컨티뉴는 goto 스테이트먼트의 필요성을 대부분 배제합니다.

Java에서 "계속" 라벨을 사용하는 방법의 예는 다음과 같습니다.

public class Label {
    public static void main(String[] args) {
        int temp = 0;
        out: // label
        for (int i = 0; i < 3; ++i) {
            System.out.println("I am here");
            for (int j = 0; j < 20; ++j) {
                if(temp==0) {
                    System.out.println("j: " + j);
                    if (j == 1) {
                        temp = j;
                        continue out; // goto label "out"
                    }
                }
            }
        }
        System.out.println("temp = " + temp);
    }
}

결과:

I am here // i=0
j: 0
j: 1
I am here // i=1
I am here // i=2
temp = 1

은 '이해할 수 없다'는 을 이해하는 것입니다.gotoconstruct는 프로그래머들이 기계어와 어셈블리 언어로 프로그래밍했던 시절의 잔재입니다.이러한 언어들은 매우 기본적이기 때문에(각 명령의 실행은 1개뿐), 프로그램 제어 흐름은 다음과 같이 이루어집니다.goto스테이트먼트(어셈블리 언어에서는 점프 명령 또는 브랜치 명령이라고 부릅니다).

C 언어는 상당히 낮은 수준이지만 매우 높은 수준의 어셈블리 언어라고 생각할 수 있습니다.C의 각 문장과 함수는 어셈블리 언어 명령으로 쉽게 분류할 수 있습니다.C는 오늘날 컴퓨터를 프로그래밍할 수 있는 주요 언어는 아니지만 임베디드 시스템과 같은 낮은 수준의 애플리케이션에서 여전히 많이 사용되고 있습니다.에 C의 함수는 어셈블리 언어의 함수와 매우 유사하기 에 C의 함수는 C의 함수로만 .goto다고 하다

C/C++는 C/C++입니다.자바는 C에서 많은 기능을 공유하지만 더 많은 세부사항을 추상화하므로 단순히 다르게 기술됩니다.언어이기 에 Java와 같은 낮은 을 가질 .goto각 함수에 대한, 각 함수에 대한, 그리고 루프가 프로그램 흐름을 제어하는 것과 같은 보다 높은 수준의 구성일 때., 한 가지 을 수행했다고 해 보세요.goto라벨을 다른 기능으로 변환합니다.아, 른른른 른귀?을 사용하다

은 왜 Java가 Java를 .goto, 그 이유를 것이 합니다.goto애초에 하위 레벨의 어플리케이션에서 사용된 적이 있는데, 왜 자바에서 사용되는 것이 말이 안 되는지에 대해 설명합니다.

되지 않기 왜 걸 거죠?" " " " " 、 " " "goto도 않은 """ " " " " " ""goto

, ""를 사용할 수 .break label; ★★★★★★★★★★★★★★★★★」continue label;으로 하기 위한 goto그렇긴 한데 추천하고 싶지는 않아요.

public static void main(String [] args) {

     boolean t = true;

     first: {
        second: {
           third: {
               System.out.println("Before the break");

               if (t) {
                  break second;
               }

               System.out.println("Not executed");
           }

           System.out.println("Not executed - end of second block");
        }

        System.out.println("End of third block");
     }
}

아요 no요 。goto는 사용되지 않지만 라벨을 정의하고 라벨까지 루프를 남길 수 있습니다.하시면 됩니다.break ★★★★★★★★★★★★★★★★★」continue그 뒤에 라벨이 붙습니다.따라서 여러 루프 레벨에서 점프할 수 있습니다.튜토리얼을 보세요.

없다, 없다.goto★★★★★★★★★★★★★★★★★★.

goto뿐 (「」도 입니다).const를 참조해 주세요.

아요 no요 。goto는 예약어임에도 불구하고 Java에서는 사용되지 않습니다. 경우도 입니다.const둘 다 C++에서 사용되기 때문에 예약되어 있을 것입니다.아마 목적은 C++ 프로그래머가 Java로 이행하는 것을 피하기 위해서였을 것입니다.또, Java의 최신 리비전에서도 사용할 수 있도록 하는 것이었을 것입니다.

goto의 대부분의 양성 용도를 다음과 같이 대체할 수 있습니다.

  • 돌아가다

  • 브레이크.

  • 라벨을 떼다

  • 시험삼아 던지다

한 대로 없다goto에서는 이이 "Sun"을 추가하고 에 대비하여 예약되어 있습니다.goto자바에 접속할 수 있습니다.코드를 너무 많이 깨지 않고 추가할 수 있기를 원했기 때문에 키워드를 예약했습니다.에서는 Java 5가 되어 있습니다.enum키워드도 그렇게 많은 코드를 깨지 않았습니다.

에는 Java가 goto가 몇 있습니다.goto, 「」, 「」, 「」를 할 수 break ★★★★★★★★★★★★★★★★★」continue네임드 루프가 있습니다.ㅇㅇㅇㅇ.finally의 할 수 있다goto.

같은 이름의 변수 선언을 금지합니다.

★★int i = 0, goto;

이것은 Do Not Do의 하나로 매우 많이 고려되고 있지만, 아마도 개발자들에게 혼란을 피하기 위해 예약된 단어로 기재되어 있을 것입니다.

http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto

만약 당신이 자바에 goto 문이 없다고 들었다면 당신은 속은 것입니다.실제로, Java는 '소스' 코드의 두 계층으로 구성되어 있습니다.

다음 링크를 참조하면 모든 Java 예약 단어가 표시되고 추가된 버전이 표시됩니다.

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html

goto는 예약되어 있습니다.현재는 사용되지 않지만 never라고 말하지 마십시오.단, 다음과 같습니다.

i나 i i 、 i 、 i 、 i 、 i 、 i i i 。goto어느 쪽이든, 보통 코드를 읽기 어렵게 만들기 때문입니다.하지만 나는 그 규칙에는 예외가 있다고 믿는다(특히 렉서나 파서에 관한 한).

물론 당신은 당신의 프로그램을 어셈블러와 같은 무언가로 번역하여 항상 Kleene Normalform으로 가져올 수 있습니다. 그리고 나서 다음과 같은 것을 쓸 수 있습니다.

int line = 1;
boolean running = true;
while(running)
{
    switch(line++)
    {
        case 1: /* line 1 */
                break;
        case 2: /* line 2 */
                break;
        ...
        case 42: line = 1337; // goto 1337
                break;
        ...
        default: running = false;
                break;
    }
}

(VM사용하다)line명령 포인터에 대응합니다.)

쉬워요.goto 그래 안 ?

네, 가능하지만 c#만큼 좋지는 않습니다(제 생각에는 c#이 더 낫습니다!).항상 소프트웨어를 모호하게 만드는 의견은 따분하고 어리석다!자바가 적어도 케이스 xxx가 없다는게 슬프다.

앞으로 이동:

 public static void main(String [] args) {
   myblock: {
     System.out.println("Hello");
     if (some_condition)
       break myblock; 
     System.out.println("Nice day");
   }
   // here code continue after performing break myblock
   System.out.println("And work");
 }

뒤로 이동:

 public static void main(String [] args) {
   mystart: //here code continue after performing continue mystart
   do {
     System.out.println("Hello");
     if (some_condition)         
       continue mystart; 
     System.out.println("Nice day");
   } while (false);
   System.out.println("And work");
 }

물론 키워드이지만 소스 코드 수준에서는 사용되지 않습니다.

그러나 바이트 코드로 변환되는 jasmin 또는 기타 하위 수준의 언어를 사용하면 "goto"가 있습니다.

Java 언어는 사용하지 않지만 JVM 바이트코드는 사용합니다.

gotoJava가 아닙니다.

GOTO를 사용해야 하는데 correctly.in 키 자바 워드를 사용하지 않습니다.http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html

   public static void main(String[] args) {            
            GOTO me;
            //code;
            me:
            //code; 
            }   
   }

언급URL : https://stackoverflow.com/questions/2545103/is-there-a-goto-statement-in-java

반응형