2017-12-19 1 views
4

JDK9의 jshell로 작업하고 있습니다.최종 변수가 jshell에서 제대로 작동하지 않습니다.

방금 ​​마지막 변수를 만들고 값을 할당했습니다. 그리고 다음 줄에서 방금 값을 수정했습니다. 놀랍게도 최종 변수를 수정할 때 오류가 없었습니다.

jshell> final int r = 0; 
| Warning: 
| Modifier 'final' not permitted in top-level declarations, ignored 
| final int r = 0; 
| ^---^ 
r ==> 0 

jshell> r = 1; 
r ==> 1 

jshell> System.out.println("r = "+r) 
r = 1 

이 jshell에서 예상되는 무엇인가 : 여기

는 코드 조각인가? 또는 jshell에서 최종 변수로 작업하는 다른 방법이 있습니까?

답변

5

최상위 레벨에서 최종 변수를 만드는 것은 연습하지 않아도됩니다. 그러나 그러한 용도를 제한하는 데는 어려운 방법이 없다고 생각합니다. 문서에서

JShell.eval

주변의 수정은 public, protectedprivate, staticfinal는 이 영업 이익 수준 선언에서 허용되지 않으며 경고으로 무시 있습니다.

동기식, 네이티브, 추상 및 기본 최상위 메서드는 이 아니며 오류가 있습니다.

선언의 이전 정의 덮어 인 경우 상태를 보여주는 이벤트가있을 것입니다 이미 덮어 선언을, 하락이 발생하지 않습니다, 덮어 쓰기로 변경 거부, 또는. 다음과 같이 상세 모드에서 jshell을 실행할 때 경고가 위에서 언급 한

꽤 볼 수 있습니다 :

enter image description here

관련 문제