"어이, 가장 간단한 프로그램에서도 매일 많은 실수를 하는 젊은 신입사원들!

"음... 안녕, 디에고. 얘야, 넌 정말 사람들을 격려하는 방법을 알고 있구나!"

"물론이죠! 말해야 할 것을 말하는 방법을 배우세요. 제가 말했듯이 '매일'입니다. 좀 더 정중하게 말하면 제 인사는 "미래의 성공적인 프로그래머, 물론 당신이 그것을 날려 버리지 않는다면"을 의미합니다. ."

"오오, 그럼 감사합니다, 나의 가장 금속적인 선생님! .

"이 수업이 끝나면 나에게 고마워할 것입니다. 여기서는 컴파일러가 지적한 가장 일반적인 오류를 나열할 것입니다. 그리고 당신의 일은 기억하는 것입니다. 사전 경고는 준비되어 있습니다.

세미콜론을 잊어버림

"Java 프로그래머가 저지르는 가장 흔한 실수는 세미콜론과 관련된 것입니다.

"사실은... 나는 이 범죄를 반복해서 저질렀습니다."

"메서드 내의 모든 명령문은 세미콜론으로 끝나야 합니다. 세미콜론은 명령문이나 명령을 구분하는 것입니다. 이것은 우리가 Java 컴파일러에게 하나의 명령이 끝나고 다음 명령이 시작되는 위치를 알려주는 방법입니다.

오류의 예:

잘못된 코드입니다 올바른 코드
int a
int b = 5
int c = a + b
int a;
int b = 5;
int c = a + b;
System.out.println("Hello")
System.out.println("Hello");
if (2 > 3)
   System.out.println("Are we in Australia?")
if (2 > 3)
   System.out.println("Are we in Australia?");

따옴표를 닫는 것을 잊음

"자바를 처음 접하는 사람들이 저지르는 두 번째로 흔한 실수는 코드에 문자열을 작성한 다음 따옴표를 닫는 것을 잊는 것입니다.

코드의 모든 문자열 리터럴은 양쪽을 큰따옴표(")로 묶어야 합니다. 초보 프로그래머는 종종 텍스트 시작 부분에 따옴표를 넣지만 끝에서 닫는 것을 잊습니다.

잘못된 코드입니다 올바른 코드
String s = "Hello;
String s = "Hello";
System.out.println("Hello);
System.out.println("Hello");
String s = "Hello";
String message = s + " and by. ;
String s = "Hello";
String message = s + " and bye.";

문자열을 함께 붙일 때 더하기 기호를 포함하는 것을 잊음

"문자열로 작업할 때 흔히 저지르는 또 다른 실수는 문자열을 함께 붙일 때 더하기 기호를 쓰는 것을 잊는 것입니다. 이 오류는 코드에서 텍스트와 변수가 긴 표현식으로 연결될 때 특히 많이 발생합니다.

여기 몇 가지 예가 있어요.

잘못된 코드입니다 올바른 코드
String s = "Hello";
String message = s  " and bye.";
String s = "Hello";
String message = s + " and bye.";
int age = 35;
System.out.println("Age=" age);
int age = 35;
System.out.println("Age=" + age);
int age = 35;
System.out.println("Age=", age);
int age = 35;
System.out.println("Age=" + age);

중괄호를 닫는 것을 잊음

"이것은 매우 일반적인 실수입니다. 이것이 일반적인 두 가지 상황이 있습니다.

  1. 어딘가에서 코드를 복사하기로 결정했고 실수로 일부 중괄호를 놓쳤습니다.
  2. 모든 여는 괄호가 닫는 괄호와 일치하는지 확인하기 위해 자신을 괴롭히는 것이 아닙니다."

"두 번째 옵션은 제가 하는 일입니다. 가끔 너무 정신이 팔려서 잊어버릴 때가 있어요!" .

"이러한 오류를 방지하려면 일반적으로 초보 프로그래머가 여는 중괄호 아래에 닫는 중괄호를 작성하는 것이 좋습니다.

예:

잘못된 코드입니다 올바른 코드
if (2 < 3)
{
   if (3 < 4)
   {
      System.out.println("Mathematics!");
   }
if (2 < 3)
{
   if (3 < 4)
   {
      System.out.println("Mathematics!");
   }
}
{
   if (2 < 3)
   {
      if (3 < 4)
      {
         System.out.println("Mathematics!");
      }
   }
{
   if (2 < 3)
   {
      if (3 < 4)
      {
         System.out.println("Mathematics!");
      }
   }
}

괄호를 추가하는 것을 잊음

"이러한 실수는 비슷한 상황에서 괄호가 필요하지 않은 프로그래밍 언어를 알고 있는 개발자가 자주 범합니다.

한 가지 가능성은 메서드 호출 끝에 괄호를 넣는 것을 잊어버리는 것입니다.

또 다른 가능성은 명령문의 조건을 괄호로 묶는 것을 잊었다는 것입니다 if-else.

예:

잘못된 코드입니다 올바른 코드
System.out.println("Hello!");
System.out.println;
System.out.println("And bye!");
System.out.println("Hello!");
System.out.println();
System.out.println("And bye!");
if 2 < 3
{
   if 3 < 4
   {
      System.out.println("Mathematics!");
   }
}
if (2 < 3)
{
   if (3 < 4)
   {
      System.out.println("Mathematics!");
   }
}

main메서드 선언을 잘못 작성

"그들이 이 빌어먹을 방법을 선언하자마자 main! 이 형편없는 방법만큼 초보자들을 놀라게 하는 것은 없을 것입니다. 중요한 것은, 그들은 항상 놀라고 왜 그들의 프로그램이 시작되지 않는지 궁금해합니다. 그리고 물론 프로그래머는 비난할 것이 아니라 프로그램, 컴파일러, 코드 유효성 검사기, Java 시스템 등입니다. 희생양 목록은 끝이 없습니다.

예:

잘못된 코드입니다 설명
static void main(String[] args)
public누락
public void main(String[] args)
static누락
public main(String[] args)
void누락
void main(String[] args)
public그리고 static누락되었습니다
public static void main(String args)
[]누락
public static void main()
String[] args누락
public static int main(String args)
우리는 int대신void

파일 이름이 클래스 이름과 다릅니다.

"Java 표준에 따르면 모든 Java 클래스는 클래스 이름과 동일한 이름을 가진 파일에 저장되어야 합니다. 그리고 앞서 언급했듯이 여기서 문자의 대소문자가 중요합니다.

파일 이름 클래스 이름 메모
솔루션.자바 해결책 다 괜찮아
솔루션 .java _ 해결책 불필요한 문자 's'로 된 파일 이름
솔루션. 자바 해결책 파일 이름은 소문자로 시작합니다.
해결책. txt 해결책 파일 확장자는 .java 대신 .txt입니다.
솔루션.자바 해결책 클래스 이름은 소문자로 시작합니다.

"실제로 .java 확장자를 가진 파일에 여러 클래스를 선언할 수 있지만 그 중 하나만 public클래스 이름 앞에 단어를 가질 수 있습니다. 그리고 이것은 파일 이름과 일치해야 하는 이름입니다.

".java 파일에는 항상 이름이 파일 이름과 동일한 클래스가 있어야 하며 해당 클래스에는 수정자가 있어야 합니다 public. 예:

솔루션.자바
public class Solution
{
}

class Apple
{
}

class Pineapple
{
}

"또한 Java 언어를 사용하면 클래스 내에서 클래스를 작성할 수 있습니다. 이는 위의 제한을 우회하는 또 다른 방법입니다. 공용 클래스(수식어가 있는 클래스 public)가 파일에서 선언되고 파일 이름과 동일한 이름을 갖는 경우, 그런 다음 이 공용 클래스 내에서 원하는 만큼 클래스를 선언할 수 있습니다. 즉, 더 이상 일반 클래스가 아니라 내부 또는 중첩 클래스가 됩니다. 예:

솔루션.자바
public class Solution
{
   public class Apple
   {
   }

   public static class Pineapple
   {
   }
}

쓰는 것을 잊는다package

"프로그램에는 일반적으로 수천 개의 클래스가 있기 때문에 모든 클래스에 대해 간단하고 이해하기 쉬우며 고유한 이름을 찾기가 어려울 수 있습니다. 그래서 Java에서는 키워드를 사용하여 클래스를 패키지로 그룹화하는 것이 관례입니다. 파일이 그룹화되는 방식과 동일합니다 package. 폴더에."

"아하, 그래서 각 클래스는 자신이 속한 패키지의 표시로 시작해야 합니다."

"맞습니다. 예를 들면 다음과 같습니다.

패키지 없는 코드 수정된 예
public class Solution
{
}
package en.codegym.tasks.task0001;

public class Solution
{
}

추가하는 것을 잊어버림import

"우리 프로그램에서 다른 사람의 클래스를 사용하려면 두 가지 옵션이 있습니다. 코드의 모든 곳에서 클래스 이름 앞에 패키지 이름을 써야 합니다. 또는 키워드를 사용하여 정규화된 클래스 이름을 한 번 쓸 수 있습니다 import. . 예:

가져오기를 사용하지 않고 가져오기 사용
public class Solution
{
   java.util.Scanner scanner = new java.util.Scanner();
}
import java.util.Scanner;

public class Solution
{
   Scanner console = new Scanner();
}

"두 옵션 모두 작동하지만 Scanner를 추가하지 않고 단순히 코드를 작성하면 import컴파일러는 클래스를 가져와야 하는 패키지를 이해할 수 없으며 Scanner프로그램이 컴파일되지 않습니다."

"고마워, 디에고. 이 수업은 내가 더 집중하게 만들거야."

"그게 내가 믿고 있던거야. 행운을 빕니다!"