2012-09-19 27 views
19

bên trong một hoạt động đơn lẻ, khi xác định các thành phần được sử dụng chỉ trong vòng hoạt động đó, sự khác biệt thực sự giữa các định nghĩa sau đây là những gì các quy ước "dưới mui xe" nên được suy nghĩ về (dọn dẹp rác, bộ nhớ, vv) sẽ đề xuất luôn sử dụng riêng tư trước công chúng, nếu thực thể chính nó chỉ được sử dụng bên trong lớp mà nó được viết?công cộng hay tư nhân, nó thực sự quan trọng với các biến Android

+1

Đối với hầu hết các phần, đặc biệt là trong kịch bản bạn mô tả mọi thứ chỉ nằm trong một lớp/hoạt động, nó được coi là dạng tốt để giới hạn phạm vi bất kỳ biến nào bạn sử dụng. –

Trả lời

20

Private lĩnh vực thúc đẩy encapsulation

Đó là một quy ước chung được chấp nhận để sử dụng private trừ khi bạn cần để lộ một lĩnh vực hoặc phương pháp để các lớp khác. Nhận được trong này như là một thói quen sẽ giúp bạn tiết kiệm rất nhiều đau đớn trong thời gian dài.

Tuy nhiên, không có bất kỳ điều gì sai trái với trường hoặc phương pháp public. Nó không gây ra sự khác biệt cho việc thu gom rác thải.

Trong một số trường hợp, một số loại quyền truy cập sẽ ảnh hưởng đến hiệu suất, nhưng chúng có thể cao hơn một chút so với chủ đề của câu hỏi này.

Một trường hợp như vậy phải làm với các lớp bên trong truy cập các trường lớp ngoài.

class MyOuterClass 
{ 
    private String h = "hello"; 

    // because no access modifier is specified here 
    // the default level of "package" is used 
    String w = "world"; 

    class MyInnerClass 
    { 
     MyInnerClass() 
     { 
      // this works and is legal but the compiler creates a hidden method, 
      // those $access200() methods you sometimes see in a stack trace 
      System.out.println(h); 

      // this needs no extra method to access the parent class "w" field 
      // because "w" is accessible from any class in the package 
      // this results in cleaner code and improved performance 
      // but opens the "w" field up to accidental modification 
      System.out.println(w); 
     } 
    } 
} 
+2

Tôi không bao giờ biết về những phương pháp ẩn vì vậy tôi upvote –

0

Nếu khai báo biến của bạn nằm trong phạm vi hoạt động, nó hoạt động bình thường như một biến phạm vi bình thường.

Tuy nhiên, thực hành lập trình kém để sử dụng các biến từ một phương pháp theo phương pháp khác khi chúng không phải là tham số.

Ví dụ:

Xấu:

void Foo() 
{ 
    int foo = 5; 
    System.out.println(Bar()); 
} 

int Bar() 
{ 
    return foo + 5; 
} 

Điều này sẽ thực sự ném một lỗi cú pháp vì foo được khai báo bên ngoài phạm vi cho Bar()

Tốt:

int foo; 

void Foo() 
{ 
    foo = 5; 
    System.out.println(Bar(foo)); //prints 10 
} 

int Bar(int foo) 
{ 
    return foo + 5; 
} 
+0

Tại sao 'Tốt' lại tốt? –

+0

@ Alex vì bạn muốn tránh (như một nguyên tắc thiết kế) các tác dụng phụ không cần thiết. Một tác dụng phụ được định nghĩa là một cái gì đó ảnh hưởng đến thông tin bên ngoài ngữ cảnh hiện tại của bạn. – Codeman

+2

'Bad' của bạn không biên dịch do đó nó không tệ, thay vào đó nó không tồn tại. Vì vậy tốt không được so sánh với bất cứ điều gì vì vậy tôi tự hỏi tại sao nó tốt. –

1

privatepublic là cả hai từ khóa của Java có mục đích của Object Orientated Design. Tôi khuyên bạn nên đọc về điều này: http://docs.oracle.com/javase/tutorial/java/concepts/

Nếu bạn chỉ sử dụng các biến (đối tượng) đó trong hoạt động của mình, thì tôi khuyên bạn nên đặt các biến đó ở chế độ riêng tư.

Tôi hy vọng điều này sẽ hữu ích.

Edit:

Tôi không chắc chắn nếu sử dụng các từ khóa riêng, công cộng hay không sẽ tối ưu hóa ứng dụng bạn từ một điểm ký ức về quan điểm. Theo như tôi có thể nói tôi nghĩ rằng nó không và bạn nên sử dụng những gì làm cho mã của bạn dễ đọc nhất, trực quan và duy trì.

+0

Cảm ơn, tôi biết họ làm gì, và tôi biết họ KHÔNG CẦN phải làm việc trong trường hợp của tôi, nhưng tôi tự hỏi liệu có bất kỳ loại Quản lý bộ nhớ voodoo hay Bộ sưu tập rác nào bị ảnh hưởng hay không. công khai hoặc riêng tư. – Octoth0rpe

2

Phạm vi tầm nhìn không có gì để làm với các nhà sưu tập rác hoặc quản lý bộ nhớ

Bạn sẽ muốn giảm bớt phạm vi tầm nhìn càng nhiều càng tốt để mã của bạn có thể được dễ dàng hơn để duy trì.

+0

Cảm ơn người đàn ông, Đào xung quanh một số chi tiết và có vẻ như đây là quy ước: Không có sự khác biệt trong bộ sưu tập rác hoặc quản lý bộ nhớ. riêng tư. – Octoth0rpe

4

well, một điểm quan trọng là xác định các biến là riêng tư là tiêu chuẩn trong lập trình java. Vì vậy, việc gọi trực tiếp các biến trên các đối tượng ít nhất sẽ xuất hiện lạ đối với những người khác có thể đọc mã của bạn. Một điều nữa tôi muốn nói là nếu bạn không đơn độc mã hóa trên một dự án luôn là một thực hành tốt để hạn chế khả năng hiển thị của các thuộc tính là chìa khóa trong việc triển khai lớp để tránh làm việc lạ quanh các nhà phát triển khác đi lên với.

Cá nhân tôi không biết liệu các công cụ sửa đổi đó có được sử dụng để biên dịch và tối ưu hóa mục đích hay không.

để kết luận là tôi nghĩ rằng mọi coder java có kinh nghiệm tôi mạnh mẽ sujest để sử dụng mẫu này trong định nghĩa thuộc tính.

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