main เป็นตัวระบุ Java ที่ถูกต้องหรือไม่


288

ลูกคนหนึ่งของฉันเรียน Java ในโรงเรียนมัธยมและได้รับสิ่งนี้จากการทดสอบของเขา:

ข้อใดต่อไปนี้เป็นตัวระบุที่ถูกต้องใน Java

ก. 123java
ข. main
ค. java1234
ง. {abce
จ. )whoot

เขาตอบbและเข้าใจผิด

ฉันดูคำถามและโต้แย้งว่าmain เป็นตัวระบุที่ถูกต้องและควรจะถูกต้อง

เราดูข้อมูลจำเพาะ Java สำหรับตัวระบุและเสริมจุดนั้น นอกจากนี้เรายังเขียนโปรแกรมตัวอย่างที่มีการเรียกตัวแปรmainเช่นเดียวกับวิธีการ เขาสร้างข้อโต้แย้งที่เป็นลายลักษณ์อักษรซึ่งรวมถึงการอ้างอิงเอกสาร Java โปรแกรมทดสอบและครูเพิกเฉยและบอกว่าคำตอบยังไม่ถูกต้อง

คือmainตัวระบุที่ถูกต้อง?


14
มันทำให้ฉันเสียใจเสมอที่เห็นครูไม่ปลอดภัยมากจนเขา / เธอกลัวที่จะเรียนรู้สิ่งใหม่ ๆ และยอมรับความผิดพลาด
Ryan Lundy

ฉันเดาว่ามันเป็น แต่คุณไม่ควรใช้มันเป็นชื่อตัวแปร / วิธีการ (อย่างไรก็ตามในกรณีที่ชัดเจน) ดังนั้นหากครูพยายามเจาะประเด็นที่บ้านเพื่อพิจารณาโดยเฉพาะอย่างยิ่งในกรณีนี้ - ชื่อวิธีการฉันจะเห็น / ประเด็นของเธอ
bharal

3
คำถามนี้ถามจริงๆหรือว่าครูของลูกชายคุณทำงานถูกต้องหรือไม่? ฉันเห็นตัวระบุ Java ที่ถูกต้องสองตัว ดังนั้นคำตอบคือ 'b' AND 'c' ดังนั้นครูจึงถูกต้อง หรือฉันขาดอะไรไป?. จะเป็นคำถาม SO ได้อย่างไร? การตัดสินเกี่ยวกับคนบางคนที่ไม่ได้เป็นส่วนหนึ่งของชุมชน ...
jschnasse

1
นี่เป็นคำถามเกี่ยวกับครูไม่เกี่ยวกับ java
ACV

1
อีกกรณีหนึ่งที่ "หลอกโดยคำถามหลอกของคุณเอง"; อย่างน้อยครูควรดูข้อมูลจำเพาะของภาษาก่อนที่จะพยายามเขียนคำถามสอบเช่นนี้
jrh

คำตอบ:


254
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 :

ระบุเป็นลำดับไม่ จำกัด ความยาวของตัวอักษร Javaและตัวเลข Javaแรกของการที่จะต้องเป็นตัวอักษร Java

ตัวระบุ:

    IdentifierChars แต่ไม่ใช่ Keyword หรือ BooleanLiteral หรือ NullLiteral

ตัวระบุ

    JavaLetter {JavaLetterOrDigit}

JavaLetter:

    อักขระ Unicode ใด ๆ ที่เป็น "ตัวอักษร Java"

JavaLetterOrDigit:

    อักขระ Unicode ใด ๆ ที่เป็น "Java letter-or-digit"

ลำดับตัวอักษรmainพอดีคำอธิบายข้างต้นและไม่ได้อยู่ในรายการคำหลักในมาตรา 3.9

(ลำดับอักขระjava1234ยังเป็นตัวระบุด้วยเหตุผลเดียวกัน)


25
@Clockwork คำถามถูกพูดว่ามีเพียงตัวเลือกเดียวเท่านั้นที่ถูกต้อง อย่างไรก็ตามทั้งสองตัวเลือกbและcเป็นไปตามเงื่อนไขของคำถามไม่สอดคล้องกับตัวเลือกโดยนัย สิ่งนี้ทำให้เด็ก OP ต้องเลือกระหว่างคำตอบที่ถูกต้องเป็นคำตอบเดียวที่ครูคิดว่าถูกต้อง
rgettman

@rgettman ฉันอ่าน "ข้อใดต่อไปนี้ ... " เนื่องจากอนุญาตให้มีตัวเลือกมากกว่าหนึ่งครั้งซึ่ง " b และ c " จะเป็นคำตอบที่ถูกต้อง
TripeHound

6
@TripeHound "เป็นตัวระบุที่ถูกต้อง" เป็นเอกพจน์และต้องการ 1 คำตอบ เปรียบเทียบกับ "เป็นตัวระบุที่ถูกต้อง"
อ้างวันที่ 411

2
คุณสามารถเข้าเรียนได้mainเช่นกัน;)
Peter Lawrey

97

main เป็นตัวระบุจาวาที่ถูกต้องและครูไม่ถูกต้อง

เอกสารที่เกี่ยวข้องอยู่ในข้อกำหนดภาษา Java ที่นี่:

บทที่ 3 "โครงสร้างคำศัพท์" ตอนที่ 3.8 "ตัวระบุ":

https://docs.oracle.com/javase/specs/jls/se10/html/jls-3.html#jls-3.8

มันบอกว่า:

ตัวระบุคือลำดับความยาวไม่ จำกัด ของตัวอักษร Java และตัวเลข Java ตัวแรกต้องเป็นตัวอักษร Java ... ตัวระบุไม่สามารถมีการสะกดเหมือนกัน (ลำดับอักขระ Unicode) เป็นคีย์เวิร์ด (§3.9) ลิเทอรัลบูลีน ( §3.10.3) หรือลิเทอรัลว่าง (§3.10.7) หรือเกิดข้อผิดพลาดเวลาคอมไพล์

ซึ่งหมายความว่าคุณสามารถพิสูจน์ได้ว่าเป็นตัวระบุที่ถูกต้องโดย:

  • ค้นหาในรายการคำหลัก java (คำใบ้: คุณจะไม่พบที่นั่น!) หรือเพียงแค่
  • โดยใช้เป็นตัวระบุและสังเกตว่าไม่มีข้อผิดพลาดเวลาคอมไพล์เกิดขึ้น

1
คุณช่วยพูดและสะกดให้ชัดเจนกว่านี้ได้ไหม
zero298

36
ไม่เพราะเป็นส่วนทั้งหมด หากครูคิดว่าส่วนนี้มีข้อยกเว้นบางประการสำหรับ 'หลัก' ก็คือครูที่จะต้องแสดงที่กล่าวเช่นนั้น
Mike Nakis

78

ตามที่คำตอบอื่น ๆ ระบุ

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[]).


23
"ฉันเดาว่าความสับสนนั้นมาจากการที่เมธอด main (String []) ถูกใช้เป็นจุดเริ่มต้นสำหรับ JVM" mainไม่ใช่จุดเริ่มต้นสำหรับ JVM เป็นจุดเริ่มต้นที่javaเครื่องมือใช้เรียกใช้แอปพลิเคชัน เครื่องมืออื่น ๆ (เช่นคอนเทนเนอร์ servlet) ใช้จุดเข้าอื่น
TJ Crowder

27
ซึ่งเป็นเรื่องที่น่าขันยิ่งกว่าเพราะแม้จะอยู่ใน "จุดเริ่มต้น - บริบท" หลัก ALREADY ก็เป็นตัวระบุที่ถูกต้อง ดังนั้นแม้กระทั่งกรณีที่คุณสามารถต่อต้านได้ก็พิสูจน์ได้ว่า OP ถูกต้อง
Hobbamok

@TJCrowder ขอบคุณฉันได้รวมไว้ในคำตอบแล้ว
MC Emperor

1
@Hobbamok คุณดูสับสนเกี่ยวกับแนวคิดพื้นฐานของ Java ซึ่งอาจอธิบายได้ว่าทำไมคุณถึงสอนมันในโรงเรียนและไม่ได้ฝึกคือคำตอบที่อยู่ในใจ
rath

4
javaเครื่องมือที่ไม่ต้องใช้main(String[])วิธีการที่ถ้าระดับหลักขยายjavafx.application.Application
VGR

65

สิ่งนี้รวบรวมได้ดีบน 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

5
เป็นไปได้หรือไม่ที่จะเพิ่มstatic mainวิธีการอื่นที่มีพารามิเตอร์ต่างกัน
jpmc26

6
@ jpmc26 ลองดูและบอกเราว่ามันเป็นอย่างไร :)
MichaelK

1
ดีที่มากของไฟ
MC จักรพรรดิ

4
@MCEmperor ใช่นั่นคือข้อโต้แย้งหลักสำหรับคำตอบของฉัน ;)
MichaelK

3
คุณลืมเพิ่มpackage main;!
Solomon Ucko

45

ฉันทุ่มทุกอย่างที่ทำได้และดูเหมือนว่าจะได้ผล ฉันจะบอกว่า 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;
        }
    }
}

2
ฉันชอบมัน. ลองใช้ 'grep -o main main.java | wc -l '
Gary Bak

3
รหัสนั้นทำให้ฉันนึกถึงภาษาโปรแกรม "ook" ^^ เกือบทุกคำในรหัสนี้คือ "main" ...
Florian Bach

public static void main(main...Main)( ไม่มีช่องว่าง ) ไม่สามารถทำงานได้หรือไม่?
Gerold Broser

3
ฉันรู้สึกว่าตัวเองเป็นหลัก
Ross Presser

1
@GeroldBroser นั่นเป็นสิ่งที่สะอาดกว่า แต่ไม่จำเป็นอย่างยิ่ง: ช่องว่างระหว่างโทเค็นในหลาย ๆ กรณีเป็นทางเลือกพวกเขาจำเป็นก็ต่อเมื่อการเชื่อมต่อของโทเค็นสองรายการที่ตามมาจะถูกต้อง
MC Emperor

44

วิธีmainไม่สามารถนำมาใช้เป็นตัวบ่งชี้ในขณะที่มันถูกใช้เป็นตัวบ่งชี้ที่จะประกาศวิธีการ "หลัก"?

สำหรับสำนวนคลาสสิกดังกล่าว:

public class Foo{
   public static void main(String[] args){
   }
}

main ไม่ใช่คีย์เวิร์ดและอาจไม่เป็นคีย์เวิร์ดใน Java เนื่องจากเหตุผลด้านความเข้ากันได้ย้อนยุคที่ชัดเจน


เกี่ยวกับคำถามเป็นmainตัวระบุที่ดีหรือไม่?

อันดับแรก: ถูกต้องสำหรับคอมไพเลอร์ไม่ได้หมายความว่าจะดีเสมอไป
ตัวอย่างเช่นไฟล์java1234ตัวเลือกที่เสนอเป็นตัวระบุที่ถูกต้อง แต่ควรหลีกเลี่ยงจริงๆ

mainมีความหมายโดยเฉพาะอย่างยิ่งและสำคัญมาก: ใช้เป็นวิธีจุดเริ่มต้นของคลาสและไหที่ดำเนินการโดยjavaบรรทัดคำสั่ง
การใช้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$);
    }    
}

แต่เราไม่ต้องการ:

  • เพื่อตั้งชื่อObjectคลาสของเราตามที่กำหนดไว้ในjava.lang(1)
  • เพื่อตั้งชื่อเมธอดmain()หากไม่เติมเต็มเกณฑ์ที่จะใช้โดยjavaบรรทัดคำสั่ง (2)
  • เพื่อโอเวอร์โหลดObject.toString()วิธีการ (3)
  • การตั้งชื่อตัวแปรของเราด้วย_, $หรือน่าแปลกใจ / ตัวอักษรใด unmeaningful ที่ไปกับการตั้งชื่อที่ใช้ร่วมกัน (4)

7
โปรดทราบว่าmainอาจเป็นคีย์เวิร์ดที่ใช้เป็นชื่อสำหรับวิธีการแบบคงที่พร้อมลายเซ็นที่เหมาะสม (หรืออะไรก็ได้) โปรดทราบว่าการเรียกระดับซูเปอร์คลาสใช้superในลักษณะที่ทำให้ดูเหมือนตัวระบุ: super(foo);และsuper.fooแต่superเป็นคีย์เวิร์ด (และก่อนที่จะเพิ่ม generics นี่เป็นวิธีเดียวที่จะใช้ (ที่ฉันจำได้))
jaxad0127

@ jaxad0127 จุดที่น่าสนใจ แต่ฉันไม่เห็นด้วยอย่างสมบูรณ์ จริงๆแล้วมันไม่ใช่และในอนาคตอาจเป็นไปไม่ได้ด้วยเหตุผลที่ยังคงความเข้ากันได้ หากคุณกำหนดmainเป็นคีย์เวิร์ดใน java เวอร์ชันใหม่หมายความว่าโค้ดใด ๆ ที่ใช้ main เป็นชื่อเมธอด (หรือชื่อสมาชิก) จะไม่คอมไพล์อีกต่อไป การใช้superin generics ไม่มีผลข้างเคียงใด ๆ ในโค้ดที่มีอยู่เนื่องจาก generics ไม่มีอยู่ในขณะนี้
davidxxx

2
ฉันแค่หมายความว่ามันสามารถทำได้เป็นคำหลัก เพียงเพราะดูเหมือนตัวระบุไม่ได้หมายความว่าจะต้องเป็น
jaxad0127

2
ฉันจะยืนยันว่ายังคงเป็นตัวบ่งชี้ที่ดีกว่าmain java1234การใช้วิธีนี้เป็นวิธี "ปกติ" จะทำให้เข้าใจผิด แต่ฉันก็ไม่มีปัญหาในการตั้งชื่อตัวแปรmainถ้ามันเป็นสิ่งหลักในวิธีการของฉัน java1234มันแย่มากชื่อควรจะบรรยาย ...
AJPerez

1
"เกี่ยวกับคำถามหลักคือตัวระบุที่ดีหรือไม่" มันขึ้นอยู่กับ. ฉันอาจจะไม่สนใจตัวแปรที่มีชื่อว่าmainถ้าฟังก์ชันที่ฉันกำลังดูนั้นทำอะไรกับข้อมูลหลักของน้ำ ฉันจะโยนขึ้นถ้าฉันเคยเห็นjava1234ในรหัสการผลิต (และอธิษฐานว่าไม่มีตัวแปรอื่น ๆ อีก 1233 ตัวพร้อมคำนำหน้าjava)
jpmc26

40

เป็นตัวระบุที่ถูกต้องหรือไม่? ใช่.

เป็นตัวระบุที่ดีหรือไม่? ไม่ใช่ถ้าคุณใช้มันเพื่อสิ่งอื่นนอกเหนือจากวิธีการที่เริ่มต้นเมื่อเปิดตัว JVM

มีตัวระบุอื่นที่ถูกต้องอยู่ในรายการหรือไม่ ใช่.

คำแนะนำในการทดสอบบอกว่าให้เลือกคำตอบที่ดีที่สุดหรือไม่?


7
ตกลง - ปรนัยเช่นนี้เกี่ยวกับการเลือกคำตอบที่ 'ดีที่สุด' ที่ถูกต้องเมื่อมีหลายคำตอบ อย่างไรก็ตามนั่นไม่ได้ทำให้คำถามนี้เป็นคำถามปรนัยที่ดีและฉันคิดว่าการพูดคุยกับครูเกี่ยวกับเรื่องนี้เป็นสิ่งที่ควรทำ
เงา

19
@Shadow นี่คือหลักสูตรการเขียนโปรแกรม ความคลุมเครือในคำถามเกี่ยวกับบางสิ่งที่ระบุด้วยไวยากรณ์ทางคณิตศาสตร์อย่างเป็นทางการนั้นไม่สามารถทนได้ การพูดถึงมาตรฐานนั้นอย่างเคร่งครัด (ซึ่งเป็นนัยโดย " ถูกต้อง ") คำตอบทั้งสองถูกต้องเท่าเทียมกัน ฉันนึกภาพออกได้หลายกรณีที่mainเป็นตัวระบุที่ยอมรับได้มากกว่าที่java1234จะเป็นได้ ตัวอย่างเช่นพิจารณาฐานรหัสที่ทำงานกับข้อมูลน้ำประปา (ท่อน้ำประปา)
jpmc26

5
ในทางกลับกัน java1234 เหม็นไปถึงสวรรค์ชั้นสูงในฐานะตัวระบุ
Joshua

4
"เลือกคำตอบที่ดีที่สุด" ไม่ได้หมายความว่า "คิดออกเมื่อครูไม่รู้ว่าพวกเขากำลังพูดถึงอะไรและเดาคำตอบที่ไม่ดีที่พวกเขากำลังคิดอยู่" main ไม่ได้เป็นเพียงตัวระบุที่ถูกต้องเท่านั้น แต่ยังเป็นตัวระบุที่สำคัญมากเนื่องจากแอปพลิเคชัน Java ทุกตัวมีเมธอดหลักและเมธอดจะถูกตั้งชื่อด้วยตัวระบุ
fluffysheap

2
ฉันพบว่าคำตอบนี้มีความเห็นสูงและฉันหวังว่าจะสามารถลงคะแนนได้มากกว่าหนึ่งครั้ง ดูเหมือนว่าคุณพยายามที่จะเสียค่าใช้จ่ายทั้งหมดและไม่ได้พิจารณาภาพที่กว้างขึ้น mainเป็นตัวระบุที่ดีอย่างสมบูรณ์แบบที่ใดก็ได้นอกโดเมนแคบ ๆ ของแอปพลิเคชัน Java ธรรมดา อาจเป็นชื่อของเขตข้อมูลในชั้นเรียนที่แสดงถึงชุดเมนู หรือ<main>ส่วนของเอกสารในตัวสร้าง HTML java1234ในทางกลับกันมันแย่มากพอ ๆ กับตัวระบุ
toniedzwiedz

29

mainถูกต้องสมบูรณ์เพราะจากเอกสาร :

  1. เป็น "ลำดับของตัวอักษร Java และตัวเลข Java ซึ่งตัวแรกคือตัวอักษร Java"
  2. ไม่ใช่ก คำหลัก
  3. ไม่ใช่ลิเทอรัลบูลีนเช่น "จริง" หรือ "เท็จ"
  4. ไม่ใช่ตัวอักษรว่างเปล่า

29
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);
    }
}

7

ครูคนนั้นทำผิดพลาดเล็กน้อยโดยถือว่าmainไม่ใช่ตัวระบุที่ถูกต้องหรือเพียงแค่ใช้สำนวนคำถามผิด เขาอาจหมายถึงการพูดว่า "ตัวระบุที่ดี"
แต่การเพิกเฉยต่อข้อโต้แย้งของบุตรชายของคุณและด้วยเหตุนี้จึงทำให้ไม่สนใจวิธีการทางวิทยาศาสตร์ของเขาในการตรวจสอบวรรณกรรมที่เกี่ยวข้อง (ข้อกำหนด Java) และทำการทดลอง (เขียนโปรแกรมตัวอย่าง) เป็นสิ่งที่ตรงกันข้ามกับสิ่งที่ครูควรทำ


1
ดังที่ระบุไว้ในคำตอบอื่น ๆmainมักจะเป็นตัวระบุที่ "ดี" มากกว่าที่java1234จะเป็น ถึงตรงนั้นครูก็ผิด ;)
jpmc26

5

ทั้งสองอย่างmainและjava123เป็นตัวระบุที่ถูกต้อง main ไม่ใช่คีย์เวิร์ดที่สงวนไว้ดังนั้นจึงเป็นที่ยอมรับอย่างสมบูรณ์ในการใช้งานเท่าที่การทดสอบดำเนินไปคุณควรได้คะแนนหรือครึ่งหนึ่งเป็นอย่างน้อย


5
  1. ควรเป็นคำเดียว นั่นคือไม่อนุญาตให้เว้นวรรค

    ตัวอย่าง: ราคามะม่วงถูกต้อง แต่ราคามะม่วงไม่ถูกต้อง

  2. ควรขึ้นต้นด้วยตัวอักษร (ตัวอักษร) หรือขีดล่างหรือสัญลักษณ์ $

    ตัวอย่าง: price, _price และ $ price เป็นตัวระบุที่ถูกต้อง

  3. ไม่ควรเป็นคีย์เวิร์ดของ Java เนื่องจากคีย์เวิร์ดมีความหมายพิเศษต่อคอมไพเลอร์

    ตัวอย่าง: คลาสหรือโมฆะเป็นต้น

  4. ไม่ควรขึ้นต้นด้วยเลขโดด แต่หลักสามารถอยู่ตรงกลางหรือท้าย

    ตัวอย่าง: 5mangoescost ไม่ถูกต้องและ mango5cost และ mangocost5 ใช้ได้

  5. ความยาวของตัวระบุใน Java สามารถมีอักขระได้ 65,535 ตัวและทั้งหมดมีความสำคัญ ตัวระบุเป็นกรณี ๆ ไป นั่นคือมะม่วงและมะม่วงจะได้รับการปฏิบัติที่แตกต่างกัน สามารถประกอบด้วยตัวอักษรตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กหรือส่วนผสม

IDENTIFIER : เป็นชื่อคลาสชื่อเมธอดชื่อตัวแปร ...

เนื่องจาก main ไม่ใช่คำสงวนและตามคำอธิบายด้านบนสำหรับการกำหนดตัวระบุmain คือตัวระบุที่ถูกต้องและjava1234ด้วยตัวเลือกที่เหลือไม่ถูกต้องเนื่องจากคำอธิบายข้างต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.