2009-07-09 21 views
7

Tôi là một người mới đến Java và tôi đang bối rối về điều gì đó:Làm thế nào để Hello World của Java làm việc mà không có một cá thể đối tượng?

Trong chương trình hello world đơn giản trong Java, không có đối tượng nào được tạo ra để lớp hoạt động như thế nào trong ví dụ sau?

public class HelloWorld 
{ 
    public static void main (String args[]) 
    { 
     System.out.println ("Hello World!"); 
    } 
} 
+6

Các "hello world" là một đối tượng ít nhất :) – willcodejavaforfood

Trả lời

10

Bất kỳ biến hoặc phương thức được khai báo tĩnh có thể được sử dụng độc lập với cá thể lớp.

Thử nghiệm

Hãy thử biên dịch lớp này:

public class HelloWorld { 
    public static int INT_VALUE = 42; 

    public static void main(String args[]) { 
     System.out.println("Hello, " + INT_VALUE); 
    } 
} 

này thành công vì các biến INT_VALUE được khai báo tĩnh (như phương pháp main).

Cố gắng biên soạn lớp này cùng với các lớp trước:

public class HelloWorld2 { 
    public static void main(String args[]) { 
     System.out.println("Hello, " + HelloWorld.INT_VALUE); 
    } 
} 

này thành công vì các biến INT_VALUE là cả tĩnhcông. Nếu không đi vào chi tiết quá nhiều, thường tốt để tránh biến các biến công khai.

Cố gắng biên soạn lớp này:

public class HelloWorld { 
    public int int_value = 42; 

    public static void main(String args[]) { 
     System.out.println("Hello, " + int_value); 
    } 
} 

này không biên dịch vì không có đối tượng dụ từ HelloWorld lớp. Đối với chương trình này để biên dịch (và chạy) thì nó sẽ phải được thay đổi:

public class HelloWorld { 
    public int int_value = 42; 

    public HelloWorld() { } 

    public static void main(String args[]) { 
     HelloWorld hw = new HelloWorld(); 
     System.out.println("Hello, " + hw.int_value); 
    } 
} 
14

này không tạo ra một thể hiện của HelloWorldmain là một phương pháp tĩnh . Các phương thức tĩnh (và các trường tĩnh) có liên quan đến loại thay vì cho một cá thể cụ thể cụ thể.

Xem Java Tutorial page on static/instance members để biết thêm chi tiết, cùng với this Stack Overflow question (trong số những người khác).

+0

Làm thế nào bạn có thể gửi câu trả lời chỉ trong vài giây? – rahul

+0

Chỉ cần xảy ra để xem nó, đó là tất cả. –

+1

Có câu hỏi nào mà bạn không thể trả lời? – rahul

4

Các phương pháp tĩnh như main() có thể được sử dụng mà không cần đối tượng.

-1

Hệ thống xây dựng của bạn sẽ ràng buộc điểm vào của chương trình với thói quen "chính" của lớp học. Chỉ có một lớp học có thể có một thói quen "chính".

"chính" là tĩnh. điều này có nghĩa rằng đó là một "phương pháp lớp". Nó hoạt động mà không có một ví dụ.

+0

Tôi nghi ngờ bạn đang nghĩ về C#. Trong Java, bất kỳ số lớp nào cũng có thể có các phương thức "chính". Tâm trí bạn, đó là sự thật trong C# quá - bạn chỉ cần nói với trình biên dịch mà lớp nên được coi là điểm vào. –

0

Sau đó, nếu bạn muốn sử dụng bất kỳ phương thức HelloWorld nào không tĩnh, bạn phải tạo một thể hiện HelloWorld trong phương thức chính (chính sẽ không được thực hiện lại vì nó không phải là hàm tạo).

9

Một phiên bản OO hơn sẽ trông giống như:

public class HelloWorld { 
    public void sayHello() { 
     System.out.println("Hello World"); 
    } 
    public static void main(String[] argv) { 
    HelloWorld hw = new HelloWorld(); 
    hw.sayHello(); 
    } 
} 

mà tôi nghi ngờ là giống như những gì bạn đang mong đợi. Nó khởi tạo một thể hiện lớp HelloWord mới, và sau đó yêu cầu nó làm điều gì đó. Đối với việc học OO tôi thấy điều này trực quan hơn, và (vì lý do tôi sẽ không đi vào đây) Tôi có xu hướng né tránh các phương pháp tĩnh khi viết các lớp của riêng tôi (ngắn gọn - vấn đề luồng/trạng thái chia sẻ, v.v.)

+1

Không ... một phiên bản OO sẽ giống như 'ServiceLocator.getService (GreeterFactory.class) .getGreeter(). Greet (WORLD) .on (System.out);'. ;) –

Các vấn đề liên quan