"Này, tân binh trẻ tuổi, người mắc rất nhiều lỗi mỗi ngày, ngay cả trong những chương trình đơn giản nhất!

"Ừm... Chào, Diego. Cậu bé, cậu thật biết cách làm mọi người vui lên đấy!"

"Tất nhiên rồi! Học cách nói những gì cần nói. Như tôi đã nói, 'mỗi ngày'. Nói một cách lịch sự hơn, lời chào của tôi có nghĩa là "lập trình viên thành công trong tương lai, tất nhiên, nếu bạn không thổi bay nó ."

"Oooh, vậy thì cảm ơn bạn, giáo viên kim loại nhất của tôi! .

"Bạn sẽ cảm ơn tôi sau bài học này. Sau đây tôi sẽ liệt kê những lỗi phổ biến nhất được trình biên dịch lưu ý. Và công việc của bạn là ghi nhớ. Báo trước là báo trước.

Quên dấu chấm phẩy

"Lỗi phổ biến nhất mà các lập trình viên Java khao khát mắc phải liên quan đến dấu chấm phẩy. Hay đúng hơn là sự vắng mặt của dấu chấm phẩy ở nơi lẽ ra phải có."

"Sự thật là... tôi đã phạm tội này nhiều lần."

"Mọi câu lệnh bên trong một phương thức phải kết thúc bằng dấu chấm phẩy. Dấu chấm phẩy là thứ phân tách các câu lệnh hoặc lệnh: đây là cách chúng tôi báo cho trình biên dịch Java nơi một lệnh kết thúc và lệnh tiếp theo bắt đầu.

Ví dụ về lỗi:

mã không chính xác đúng mã
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?");

Quên đóng dấu ngoặc kép

"Lỗi phổ biến thứ hai đối với những người mới làm quen với Java là viết một chuỗi trong mã và sau đó quên đóng dấu ngoặc kép.

Mỗi chuỗi ký tự trong mã phải được đặt ở cả hai bên bằng dấu ngoặc kép ("). Những lập trình viên mới bắt đầu thường đặt dấu ngoặc kép ở đầu văn bản nhưng họ lại quên đóng chúng ở cuối.

mã không chính xác đúng mã
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.";

Quên thêm dấu cộng khi dán các dây lại với nhau

"Một lỗi phổ biến khác khi làm việc với chuỗi là quên viết dấu cộng khi dán các chuỗi lại với nhau. Lỗi này đặc biệt phổ biến khi văn bản và biến được nối trong một biểu thức dài trong mã.

Dưới đây là một số ví dụ:

mã không chính xác đúng mã
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);

Quên đóng dấu ngoặc nhọn

"Đây là một sai lầm rất phổ biến. Có hai tình huống mà đây là điển hình:

  1. Bạn quyết định sao chép mã từ đâu đó và vô tình bỏ lỡ một số dấu ngoặc nhọn.
  2. Bạn chỉ đơn giản là không làm phiền chính mình để đảm bảo rằng mọi dấu ngoặc đơn mở đều khớp với dấu ngoặc đơn đóng."

"Lựa chọn thứ hai là những gì tôi làm. Đôi khi tôi quá mải mê đến nỗi quên mất!" .

"Để tránh những lỗi này, các lập trình viên mới bắt đầu thường được khuyến nghị viết dấu ngoặc nhọn đóng bên dưới dấu mở đầu.

Ví dụ:

mã không chính xác đúng mã
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!");
      }
   }
}

Quên thêm dấu ngoặc đơn

"Thông thường, lỗi này được thực hiện bởi các nhà phát triển biết các ngôn ngữ lập trình không yêu cầu dấu ngoặc đơn trong các tình huống tương tự.

Một khả năng là họ quên đặt dấu ngoặc đơn ở cuối lời gọi phương thức:

Một khả năng khác là họ quên đặt điều kiện của một if-elsecâu lệnh trong ngoặc đơn.

Ví dụ:

mã không chính xác đúng mã
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!");
   }
}

Viết mainsai khai báo phương thức

"Ngay sau khi họ tuyên bố mainphương pháp chết tiệt này! Có lẽ không có gì khiến người mới vấp ngã nhiều như phương pháp tồi tệ này. Điều quan trọng là sau đó họ luôn ngạc nhiên và tự hỏi tại sao chương trình của họ không bắt đầu? Và, tất nhiên, lập trình viên không Không thể đổ lỗi, mà là chương trình, trình biên dịch, trình xác thực mã, máy Java, v.v. Danh sách vật tế thần là vô tận.

Ví dụ:

mã không chính xác Giải trình
static void main(String[] args)
publicmất tích
public void main(String[] args)
staticmất tích
public main(String[] args)
voidmất tích
void main(String[] args)
publicstaticđang mất tích
public static void main(String args)
[]mất tích
public static void main()
String[] argsmất tích
public static int main(String args)
Chúng tôi có intthay vìvoid

Tên tệp khác với tên lớp

"Theo tiêu chuẩn Java, tất cả các lớp Java phải được lưu trữ trong một tệp có cùng tên với tên lớp. Và như đã đề cập trước đó, trường hợp của các chữ cái quan trọng ở đây:

tên tệp Tên lớp Ghi chú
Giải pháp.java Giải pháp Mọi thứ đều ổn
Giải pháp .java Giải pháp Tên tệp dưới dạng một chữ cái thừa 's'
s giải pháp.java Giải pháp Tên tệp bắt đầu bằng một chữ thường
Giải pháp. txt Giải pháp Phần mở rộng tệp là .txt thay vì .java
Giải pháp.java giải pháp Tên lớp bắt đầu bằng một chữ thường

"Trên thực tế, một số lớp có thể được khai báo trong một tệp có phần mở rộng .java, nhưng chỉ một trong số chúng có từ publictrước tên lớp. Và đây là tên phải khớp với tên tệp.

"Tệp .java phải luôn có một lớp có tên giống với tên tệp và lớp đó cần phải có công publiccụ sửa đổi. Ví dụ:

Giải pháp.java
public class Solution
{
}

class Apple
{
}

class Pineapple
{
}

"Ngoài ra, ngôn ngữ Java cho phép bạn viết các lớp bên trong các lớp. Đây là một cách khác để vượt qua giới hạn trên. Nếu một lớp công khai (một lớp có công cụ sửa đổi public) được khai báo trong một tệp và có cùng tên với tên tệp, thì bạn có thể khai báo bao nhiêu lớp tùy thích bên trong lớp public này.Điều đó nói rằng, đây sẽ không còn là các lớp thông thường nữa, thay vào đó, chúng sẽ là các lớp nội bộ hoặc lớp lồng nhau.Ví dụ:

Giải pháp.java
public class Solution
{
   public class Apple
   {
   }

   public static class Pineapple
   {
   }
}

quên viếtpackage

"Vì các chương trình thường có hàng nghìn lớp nên khó có thể tìm được các tên đơn giản, dễ hiểu và duy nhất cho tất cả chúng. Đó là lý do tại sao trong Java, người ta thường nhóm các lớp thành các gói bằng cách sử dụng từ khóa. Chính xác là cách các tệp được packagenhóm vào các thư mục."

"À-ha, vì vậy đó là lý do tại sao mỗi lớp nên bắt đầu với một dấu hiệu của gói mà nó thuộc về."

"Chính xác. Đây là một ví dụ:

Mã không có gói Ví dụ đã sửa
public class Solution
{
}
package en.codegym.tasks.task0001;

public class Solution
{
}

quên thêmimport

"Nếu chúng tôi muốn sử dụng lớp của người khác trong chương trình của mình, chúng tôi có hai tùy chọn: ở mọi nơi trong mã của chúng tôi, chúng tôi cũng phải viết tên gói của nó trước tên của lớp. Ngoài ra, chúng tôi có thể viết tên lớp đủ điều kiện bằng từ khóa một importlần . Ví dụ:

Không sử dụng nhập khẩu Sử dụng nhập khẩu
public class Solution
{
   java.util.Scanner scanner = new java.util.Scanner();
}
import java.util.Scanner;

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

"Cả hai tùy chọn đều hoạt động, nhưng nếu bạn chỉ viết Scannermã của mình mà không thêm import, thì trình biên dịch sẽ không thể hiểu nó cần lấy lớp Scannertừ gói nào và chương trình của bạn sẽ không biên dịch được."

"Cảm ơn Diego. Bài học này sẽ khiến tôi chú ý hơn."

"Đó là những gì tôi đã tính đến. Chúc may mắn!"