2012-09-26 34 views
5

Tôi đã sử dụng các bộ định vị thay vì đặt đối số vào hàm tạo mặc định vì nó giúp tôi tổ chức mã của mình tốt hơnLàm thế nào để bạn khởi tạo một chuỗi trong java?

Vấn đề là biến duy nhất trên dự án tôi đang thực hiện là Chuỗi và tôi không chắc chắn Tôi nên khởi tạo nó trong khai báo (như là một biến toàn cầu?), Trong một phương thức setter instance hoặc có khởi tạo nó trong constructor class hay không.

Tôi tự hỏi nếu có thể có bất cứ điều gì có vấn đề về điều này thiết lập cho dù các trường hợp không được khởi tạo cho đến khi nó là setter được sử dụng:

class MyClass{ 

    private String myString; 

    public MyClass(){ 

    } 
    public void setStuff(String s){ 

    this.myString=s; 
    } 
} 
+2

Tôi không chắc chắn chính xác những gì bạn có nghĩa là bằng cách "biến toàn cầu" vì Java không có các biến toàn cầu. – Ivan

+2

Những gì bạn đang gọi một biến toàn cầu trong được gọi là 'biến dụ' trong Java .. Và biến thể hiện được khởi tạo giá trị mặc định của họ .. (Ở đây biến String của bạn sẽ được khởi tạo thành null) –

+0

Bạn nên đọc [Sun/Oracle Java hướng dẫn] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html), cụ thể là hướng dẫn này về các kiểu dữ liệu nguyên thủy. –

Trả lời

1

Bạn không chắc chắn ý nghĩa của biến số toàn cục là gì? Có đúng là một biến không giống với đối tượng được tạo ra không? Nếu vậy nó phải được tĩnh

private static String myString = "str"; 

Nếu nó không bao giờ thay đổi sau đó nó phải là cuối cùng và sau đó một thế giới liên tục

public static final String MY_STRING = "str"; 

Điều này sau đó có thể được công khai và truy cập thông qua

MyClass.MY_STRING 

Nếu nó chỉ áp dụng cho từng đối tượng của lớp được tạo sau đó khởi tạo nó trong hàm tạo hoặc trong khai báo

+0

Cảm ơn, điều này không trả lời câu hỏi nhưng đó là điểm thông tin thực sự tốt. Bạn có phiền nếu tôi nối thêm câu trả lời của bạn một chút để hoàn thành nó? – Magpie

+1

yep go for it :) @Magpie – RNJ

7

Tại sao không chỉ khởi tạo như:

private String myString = "My string"; 

Các cách dễ nhất có thể.

+0

Hoặc 'myString = null;', nếu ban đầu nó là null hoặc 'myString =" ";', nếu bạn muốn khởi tạo một chuỗi rỗng (trống). (Nhưng tất cả các biến lớp và thể hiện được khởi tạo thành 'null' hoàn toàn, vì vậy' myString = null; 'là dư thừa ngoại trừ các biến cục bộ.) –

+2

@HotLicks. Nó sẽ không được khởi tạo để null tự động .. Vì nó là biến dụ ?? –

+0

@RohitJain - Vâng, tôi vừa mới bắt đầu thêm điểm đó. Nhưng đôi khi nó là tốt đẹp để nhà nước khởi tạo để null như là một hình thức. –

3

Vâng, nó thực sự phụ thuộc vào biến đó là gì và nó sẽ làm gì.

Đây có phải là hằng số không? Nếu có, bạn có thể khởi tạo nó như sau:

private final String myString = "foo"; 

Có phải đó là biến thể hiện không? Nếu vậy, bạn nên đi cho một cái gì đó như thế này:

public MyClass(string myString) 
{ 
    this.myString = myString; 
} 

Nếu đó là một loại tài sản tùy chọn, cách bạn có bây giờ cũng có thể không sao. Cuối cùng, nó thực sự tất cả phụ thuộc vào những gì bạn sẽ làm với biến đó.

+0

Nếu nó không đổi, nó phải là _be_ hằng số: private static final. –

+0

Tôi muốn sử dụng setters là lý do tại sao không. – Magpie

+0

Ý bạn là "bạn muốn sử dụng người định cư"? Chúng tôi không có ý tưởng những gì bạn đang cố gắng để làm, vì vậy nó không thể cho chúng tôi để nói cách tốt nhất cho bạn để làm điều đó. Có một thời gian và một nơi để sử dụng mutators; bạn không nên "muốn sử dụng một setter" bạn nên sử dụng những gì là tốt nhất cho từng tình huống, mà đôi khi sẽ là một setter và đôi khi sẽ không. –

0

Nó thực sự phụ thuộc vào những gì MyClass sẽ được thực hiện. Hầu hết thời gian, tốt nhất là nên có một hàm khởi tạo để khởi tạo biến riêng và cũng có một hàm getter và setter cho nó.

Một lý do là nếu MyClass có phương thức foo cần myString để được khởi tạo và bạn quên gọi setStuff?

1

Cũng giống như bạn có nó có vẻ tốt với tôi. BTW, "toàn cầu varible" có thể gây hiểu lầm gây ra nó có thể ngụ ý rằng var là công khai trong khi nó là tư nhân nhưng có thể truy cập bên ngoài thông qua một getter/setter công cộng.

Nhưng để khởi tạo một String, cách đơn giản nhất là:

private String foo = "some string"; 
+1

"foo" này là gì? – Magpie

+0

bạn có nghiêm túc không? nó là tên của biến String – amphibient

+2

@Magpie - "foo" (cùng với "bar") là tên truyền thống cho một biến trong một chương trình mẫu. Xuất hiện khá gián tiếp từ từ viết tắt tiếng lóng quân sự FUBAR - F (ouled) Up Beyond All Recognition. –

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