2012-05-18 19 views
6

Tôi muốn biết điều này có nghĩa là gì?java this (null)

public Settings() { 
    this(null); 
} 

Mã trên là bộ tạo của lớp "Cài đặt". Điều này (null) có nghĩa là gì ở đây?

+0

Cần thêm ngữ cảnh. Đó có phải là định nghĩa lớp không? –

+1

có thể trùng lặp của [loại nhà xây dựng java này là gì? Constructor chaining?] (Http://stackoverflow.com/questions/9204560/what-type-of-java-constructors-are-these-constructor-chaining) –

+0

có thể trùng lặp của [Làm cách nào để gọi một hàm tạo từ một hàm khác trong Java ?] (http://stackoverflow.com/questions/285177/how-do-i-call-one-constructor-from-another-in-java) –

Trả lời

12
public Settings() { 
    this(null); //this is calling the next constructor 
} 
public Settings(Object o) { 
// this one 
} 

này thường được sử dụng để vượt qua các giá trị mặc định, do đó bạn có thể quyết định sử dụng một constructor này hay cách khác ..

public Person() { 
    this("Name"); 
} 
public Person(String name) { 
    this(name,20) 
} 
public Person(String name, int age) { 
    //... 
} 
+0

cảm ơn bạn. Ví dụ thực sự đã giúp! –

+0

bạn được chào đón (: – porfiriopartida

4

Đó là một hàm tạo đang gọi một hàm tạo khác trong cùng một lớp.

Bạn có lẽ có một cái gì đó như thế này:

public class Settings { 
    public Settings() { 
     this(null); // <-- This is calling the constructor below 
    } 

    public Settings(object someValue) { 
    } 
} 

Thông thường mô hình này được sử dụng để bạn có thể đưa ra một constructor với các thông số ít (để dễ sử dụng bởi người gọi) nhưng vẫn giữ logic chứa trong một nơi (các nhà xây dựng được gọi là).

4

Gọi một hàm tạo khác trong lớp Cài đặt. Tìm một hàm tạo khác chấp nhận một tham số đơn.

10

Điều đó có nghĩa là bạn đang gọi một nhà xây dựng quá tải phải mất một số Object của một số loại nhưng bạn không vượt qua một đối tượng, nhưng đồng bằng null.

+0

Có thể gọi cho một nhà xây dựng kế thừa, hoặc trông khác ? – ametren

+2

Không, nó không thể @ametren, nếu bạn muốn làm điều đó bạn phải làm điều đó với 'super (this)' –

+0

, bạn có thể gọi hàm khởi tạo cha với siêu, nếu Settings mở rộng một lớp nhận String như một đối số, bạn có thể sử dụng siêu ("somestring") – porfiriopartida

1

Nó gọi constructor mặc định đi qua null như lập luận ...

1

Cố gắng đọc hàm dựng Quá tải trong java và bạn gọi hàm tạo chỉ có một tham số ..

.

public Settings() { 
     this(null); 
    } 

    public Settings(Object obj){ 

} 
1

Đây được gọi là Constructor Chaining trong Java. Bởi cuộc gọi này, bạn thực sự gọi hàm tạo quá tải của đối tượng lớp của bạn. Ví dụ:

class Employee extends Person { 
    public Employee() { 
     this("2") //Invoke Employee's overloaded constructor"; 
    } 

    public Employee(String s) { 
     System.out.println(s); 
    } 
} 
0

Điều này về cơ bản gọi một hàm tạo tham số khác trong cùng một lớp như mọi người đã đề cập.

Một điều cần lưu ý ở đây, nó sẽ tạo ra lỗi, nếu không có hàm tạo tham số có sẵn.

Tôi không có bất kỳ việc sử dụng chuyển giá trị này() với giá trị null. Nhưng có thể là một câu hỏi khó để hỏi một số câu hỏi. :)