main이 유효한 Java 식별자입니까?
내 아이들 중 하나가 고등학교에서 Java를 사용하고 있으며 그의 테스트 중 하나에서 이것을 가지고 있습니다.
다음 중 Java에서 유효한 식별자는 무엇입니까?
ㅏ.
123java
비.main
씨.java1234
디.{abce
이자형.)whoot
그는 b 에 대답 하고 잘못했습니다.
나는 질문을 보았고, 그 주장 main
이다 유효한 식별자과 잘 했어야있다.
우리는 식별자 에 대한 Java 사양 을 살펴보고 그 점을 강화했습니다. 우리는 또한 main
메소드 라는 변수를 가진 샘플 프로그램을 작성했습니다 . 그는 Java 문서 참조, 테스트 프로그램 및 교사가이를 무시하고 답변이 여전히 옳지 않다는 서면 반박을 작성했습니다.
가 main
유효한 식별자는?
public class J {
public static void main(String[] args)
{
String main = "The character sequence \"main\" is an identifier, not a keyword or reserved word.";
System.out.println(main);
}
}
이것은 컴파일되고 실행될 때이 출력을 내 보냅니다.
The character sequence "main" is an identifier, not a keyword or reserved word.
문자 순서 main
는 키워드 또는 예약어가 아닌 식별자입니다.
JLS 의 관련 섹션은 3.8입니다 .
식별자 의 무제한 길이의 순서입니다 자바 문자 와 자바 자리 해야 처음있는, 자바 문자 .
식별자 :
IdentifierChars이지만 키워드, BooleanLiteral 또는 NullLiteral은 제외
식별자
JavaLetter {JavaLetterOrDigit}
JavaLetter :
"자바 문자"인 유니 코드 문자
JavaLetterOrDigit :
"자바 문자"인 유니 코드 문자
문자 순서 main
는 위의 설명에 적합하며 3.9 절의 키워드 목록에 없습니다 .
(문자 시퀀스 java1234
도 같은 이유로 식별자입니다.)
main
유효한 Java 식별자이며 교사가 잘못되었습니다.
관련 문서는 Java 언어 사양에 있습니다.
3 장. "Lexical Structure", 섹션 3.8. "식별자":
https://docs.oracle.com/javase/specs/jls/se10/html/jls-3.html#jls-3.8
그것은 말한다 :
식별자는 길이가 무제한 인 Java 문자 및 Java 숫자 시퀀스이며 첫 번째는 Java 문자 여야합니다. 식별자는 키워드 (§3.9), 부울 리터럴 ( §3.10.3) 또는 null 리터럴 (§3.10.7) 또는 컴파일 타임 오류가 발생합니다.
이는 식별자로 식별자를 사용하고 컴파일 타임 오류가 발생하지 않음을 관찰하여 올바른 식별자임을 증명할 수 있음을 의미합니다.
다른 답변 상태로
main
유효한 Java 식별자 및 java1234
입니다.
이 main(String[])
방법이 JVM 1에 의해 종종 진입 점으로 사용 된다는 사실 때문에 혼란이 생겼습니다 . 그러나 이것이 토큰 main
자체가 식별자 2 로 사용될 수 없다는 것을 의미하지는 않습니다 .
스펙은 그렇게 말하고 다음 선언도 유효합니다.
필드 :
private int main;
지역 변수 :
String main = "";
방법:
private void main() { ... }
클래스 (소문자로 시작하는 클래스 이름은 권장되지 않지만) :
public class main { ... }
소포:
package main;
1 : 주석에서 언급했듯이 JVM 사양 자체는 특정 방법을 진입 점으로 요구하지 않지만 널리 사용되는 java
도구는 종종 그러한 방법을 진입 점으로 사용합니다.
2 : 나는 일반적으로 이외의 주요 방법을 만드는 것을 피할 것 main(String[])
입니다.
이것은 Java 1.8에서 잘 컴파일됩니다 ...
public class main {
public String main = "main";
public void main(String main) {
System.out.println("This object is an instance of the class " + this.getClass().getCanonicalName());
System.out.println("The value of the argument \"main\" for this call to the method \"main(String main)\" is " + main);
System.out.println("The value of the field \"main\" is " + this.main);
}
public static void main(String[] args) {
main main = new main();
main.main(main.main + main.main);
}
}
... 실행되면 출력이 생성됩니다.
This object is an instance of the class main
The value of the argument "main" for this call to the method "main(String main)" is mainmain
The value of the field "main" is main
나는 할 수있는 모든 것을 던졌고 작동하는 것처럼 보입니다. main이 유효한 식별자라고 말하고 싶습니다.
package main;
public class main {
static main main;
String Main;
main(String main) {
Main = main;
}
main(main main) {
System.out.println(main.Main);
}
main main(main main) {
return new main(main);
}
public static void main(main...Main) {
main:
for (main main : Main) {
main = (main instanceof Main) ? new main(main): main.main(main);
break main;
}
}
public static void main(String[] args) {
main = new main("main");
main.main(main, main);
main = main.new Main(main) {
main main(main main) {
return ((Main)main).main();
}
};
main.main(main);
main.main(main,main);
}
abstract class Main extends main {
Main(main main) {
super("main");
}
main main() {
main.Main = "Main";
return main;
}
}
}
main
"메인"메소드를 선언하기위한 식별자로 사용되는 동안 어떻게 식별자로 사용할 수 없습니까?
그런 고전 관용구 :
public class Foo{
public static void main(String[] args){
}
}
main
는 키워드가 아니며 명백한 레트로 호환성을 이유로 Java에서는 키워드가 아닐 수 있습니다.
질문에 main
대해 좋은 식별자입니까?
첫째 : 컴파일러에 유효하다고해서 반드시 좋은 것은 아닙니다.
예를 들어 java1234
제안 된 옵션은 유효한 식별자이지만 실제로 피해야합니다.
main
매우 특별하고 중요한 의미를 지니고 있습니다. java
명령 행에서 실행되는 클래스 및 jar의 시작점 메소드로 사용됩니다 .
사용 main
에 의해 사용되는 기준을 채우지 않는 방법 이름을 java
명령 행은 변수 이름으로 사용하거나 클래스 이름은 의미를 만들 수있는 동안 단지 오해의 소지가 될 것이다.
예를 들어 응용 프로그램의 진입 점을 나타내는 클래스를 응용 프로그램의 클래스로 정의하는 Main
것은 허용 가능하므로 다음과 같이 변수 이름으로도 사용하십시오.
public class Main {
public static void main(String args[]){
Main main = new Main();
// ...
}
}
일반적으로 Java에서 여러 문자 또는 "단어"는 컴파일러의 유효한 식별자로 간주되지만 클라이언트 코드에서 사용하지 않는 것이 좋습니다 (그러나 생성 된 코드는 다음과 같이 할 수 있습니다. 예를 들어 중첩 클래스는 읽을 수 없음). 또는 오해의 소지가 있습니다.
예를 들어 이것은 컴파일러에 유효 할 수 있습니다.
public class Object { // 1
public void foo() {
...
}
}
public class BadChosenIdentifier {
public static void main() { // 2
new BadChosenIdentifier().toString(new Object());
}
public void toString(Object java1234) { // 3, 4
String _result$ = java1234 + " -> to avoid"; // 4
System.out.println(_result$);
}
}
그러나 우리는 원하지 않습니다 :
- (1)에
Object
정의 된대로 클래스 이름을 지정 합니다java.lang
. - 명령 행에서
main()
사용할 기준을 채우지 않은 경우 메소드 이름을 지정합니다java
(2). Object.toString()
방법 (3) 을 과부하 .- 우리와 변수 이름을 지정합니다
_
,$
또는 공유 이름 지정 규칙 (4)에 가서 어떤 놀라운 일 / unmeaningful 문자.
유효한 식별자입니까? 예.
좋은 식별자입니까? JVM 시작시 시작하는 방법 이외의 용도로 사용하지 않는 경우.
유효한 다른 식별자가 있습니까? 예.
테스트 지침에 최상의 답변을 선택하라고 했습니까?
- "Java 문자와 Java 숫자의 순서이며 첫 번째는 Java 문자입니다"
- 키워드 가 아님
- 부울 리터럴 이 아닙니다 ( 예 : "true"또는 "false").
- null 리터럴 이 아님
public class Main {
private static String main;
public static void main(String[] main) {
Main.main = main[0];
new Main().main(Main.main);
}
private void main(String main) {
System.out.println(main);
}
}
그 교사는 main 이 유효한 식별자가 아니라고 가정 하거나 단순히 질문을 잘못 표현 했다고 가정하여 사소한 실수를 저질렀습니다 . 그는 아마도 "좋은 식별자"라고 말하려고했다.
그러나 아들의 주장을 무시하고 관련 문헌 (자바 사양)을 확인하고 실험 (샘플 프로그램 작성)을 수행하는 그의 과학적 접근 방식을 방해 하는 것은 교사가 하는 것과 정반대 입니다.
모두 main
하고 java123
있는 유효한 테스트 당신이 적어도 포인트 또는 반 점을 얻었어야했는데가는대로까지 사용이 완벽하게 허용 그래서 식별자, 주 예약 된 키워드가 없습니다.
한 단어 여야합니다. 공백은 허용되지 않습니다.
예 : mangoprice는 유효하지만 mango 가격은 유효하지 않습니다.
문자 (알파벳) 또는 밑줄 또는 $ 기호로 시작해야합니다.
예 : price, _price 및 $ price는 유효한 식별자입니다.
키워드는 컴파일러에 특별한 의미를 부여하므로 Java의 키워드가 아니어야합니다.
예 : class 또는 void 등
숫자로 시작하지 않아야하지만 숫자는 중간 또는 끝에있을 수 있습니다.
예 : 5mangoescost가 유효하지 않으며 mango5cost 및 mangocost5가 유효합니다.
Java에서 식별자의 길이는 65,535 자이며 모두 중요합니다. 식별자는 대소 문자를 구분합니다. 그것은 망고와 망고가 다르게 취급됩니다. 모든 대문자 또는 소문자 또는 혼합물을 포함 할 수 있습니다.
IDENTIFIER : 클래스 이름, 메소드 이름, 변수 이름입니다 ...
main은 예약어가 아니며 식별자를 정의하는 위의 설명에 따라 main은 유효한 식별자 이며 java1234 도 있습니다. 위의 설명으로 인해 나머지 옵션은 유효하지 않습니다.
참고 URL : https://stackoverflow.com/questions/52264638/is-main-a-valid-java-identifier
'IT' 카테고리의 다른 글
Git을 사용하여 커밋 ID를 기반으로 특정 커밋으로 되 돌리시겠습니까? (0) | 2020.03.20 |
---|---|
Windows 시스템에서 JDK가 설치된 위치를 어떻게 찾을 수 있습니까? (0) | 2020.03.20 |
'ImportError : 가져올 수없는 이름 IncompleteRead'는 어떻게 수정합니까? (0) | 2020.03.20 |
Java에서 쌍 또는 2 개의 튜플 사용 (0) | 2020.03.20 |
JavaScript 함수가 정의되어 있는지 확인하는 방법 (0) | 2020.03.20 |