2010-01-09 45 views
5

trong php bạn có thể khai báo một hàm trong phạm vi toàn cục với hàm.không có chức năng "bình thường" nào trong java?

điều này là không thể trong java? có vẻ như mọi hàm đều nằm trong một lớp như một phương thức. vậy mọi thứ đều là OOP trong java? không có mã thủ tục?

+5

Bạn hỏi một câu hỏi về trung bình một lần mỗi giờ. Tôi nghĩ bạn nên đầu tư vào một số sách hoặc khả năng google ... – Pod

Trả lời

18

Điều gần nhất bạn có thể có với chức năng "thả nổi" là một hàm tĩnh mà bạn có thể gọi là đủ điều kiện với tên lớp, ví dụ:

public class Foo { 
    public static void bar(){} 
} 

... nơi khác

Foo.bar(); 

Bạn có thể thêm một chút đường cú pháp này để làm cho nó trông giống như những gì bạn đang nghĩ đến việc:

import static Foo.bar; 

... ở nơi khác

bar(); 
+0

Bạn cũng có thể tự nhập hàm: 'import static packagename.Foo.bar;' Nhưng nếu bạn làm điều này quá nhiều có thể gây nhầm lẫn. – MatrixFrog

+0

ahh, đó là ý tôi, cảm ơn. –

3

Đúng. Nhưng bạn có thể định nghĩa các phương thức tĩnh, mà cuối cùng có thể hoạt động như các phương thức chứa trong một lớp nhưng được gọi ra mà không tạo ra một cá thể của lớp. Tức là, nếu bạn định nghĩa phương thức barstatic trong lớp Foo thì nó có thể được gọi là Foo.bar().

1

Có, đó là chính xác. Java hoàn toàn là OOP.

3

Đúng vậy, không có mã thủ tục, mọi thứ là đối tượng được định nghĩa bởi một lớp (ngoại trừ một vài kiểu dữ liệu nguyên thủy). Bạn có thể, tuy nhiên, sử dụng phương pháp tĩnh:

public class MyClass { 
    public static void callMe() { 
     System.out.println("HEY"); 
    } 
} 

public class MyOtherClass { 
    public void someMethod() { 
     MyClass.callMe(); 
    } 
} 

Ngôn ngữ JVM dựa trên Scala không cho phép bạn tạo higher-order functions, mà bạn có thể vượt qua xung quanh như các giá trị.

+0

Tuyệt vời, vì thế Scala gen sẽ dọn rác cho bạn. Tôi thực sự cần phải ngồi xuống và đọc * cuốn sách Scala đẫm máu của tôi để xem có bao nhiêu phần đóng cửa, "cà ri" và những thứ khác có chức năng mà nó cuộn vào. – Roboprog

+0

Tôi đã đọc và đọc nó, và nó khá mạnh mẽ ngôn ngữ. Tuy nhiên, tôi đã tìm thấy hàng tá nhà điều hành phím tắt đại diện cho các tính năng mới này hơi khó hiểu và khó nhớ. Ruby dường như dễ dàng hơn để bắt đầu (quá tệ, nó năng động và chậm hơn 50 lần so với Java, LOL). –

+0

Tôi tiếp tục nghe rằng Java nhanh hơn N-lần nhanh hơn Ruby. Điều đó có thể đúng với x + = y các loại công cụ toán-y/nguyên thủy, nhưng nó KHÔNG phải là cái tôi đã đo cho một số chuỗi cơ bản jiggering: http://roboprogs.com/devel/2009.12.html (tất nhiên, những " điểm chuẩn "chỉ sử dụng một vài phương pháp tĩnh, các trường hợp duy nhất đập xung quanh GC của một trong hai ngôn ngữ được xây dựng trong chuỗi) – Roboprog

3

Ồ vâng, OO indeed. Bạn có thể mã các công cụ thủ tục giả trong một phương thức tĩnh mặc dù.

3

Bạn có thể tạo ra một phương pháp tĩnh một gọi nó mà không cần tạo một Object

public class MyClass{ 
    public static void m(){ 
     ... 
    } 
} 


MyClass.m(); 
3

Mở rộng trên những gì người khác đang nói, nếu bạn có rất nhiều chức năng như vậy, người ta thường nhóm chúng lại với nhau trong lớp học không có gì ngoài các phương pháp tĩnh, thường được gọi là "các lớp tiện ích". Ví dụ đầu tiên xuất hiện trong đầu là java.lang.Math nhưng có rất nhiều người khác. Bất kỳ lớp học nào với "Util" trong tên của nó có khả năng theo mẫu này.

-1

Không được sống tốt OOP. Bạn vẫn có thể định nghĩa một phương thức tĩnh công cộng và gọi nó từ bất cứ nơi nào như những người khác đã đề cập.

0

Trong thế giới java, tất cả các hàm phải được khai báo trong một lớp, bất kể là gì. Chào mừng bạn đến với OO world =)

0

Có, bạn có thể thực hiện các chức năng tĩnh, er, phương pháp, nhưng sau đó bạn phải thực hiện các cuộc gọi mã hóa với chúng. Để chọn một cuộc gọi lại trong thời gian chạy, bạn phải tạo một giao diện (không phải là một con trỏ hàm, kiểu thủ tục, hoặc ủy nhiệm), và sau đó tạo một lớp không có thật (mặc dù có thể ẩn danh) để "thực hiện" nó. Tận hưởng công việc!

Hoặc, thưởng thức satirazation hài hước: http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html

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