Sự giống và khác nhau giữa constructor, instance, class là gì?

Chào mọi người. Em mới học java và có thắc mắc. Em thấy công dụng của hàm instance, constructor, hàm class khá giống nhau(mấy cái tiểu tiết như constructor tên giống class, k cần return,… thì bỏ qua ạ). Hơn nữa constructor không cần dùng đến set. chỉ cần cần get là xong. và cho em hỏi constructor không tham số có ý nghĩa, lợi ích gì ạ?

Welcome to DNH, @system1 :smiley:

Tớ có thấy câu hỏi của cậu đã có trên diễn đàn. Cậu có thể tham khảo ở dưới đây:

Góp ý nhỏ nhé, những thắc mắc của cậu tương đối phổ thông, nên tớ nghĩ cậu có thể tự tìm kiếm câu trả lời bằng các chức năng search trên diễn đàn, hoặc google. Cậu nên thử làm việc đó trước khi hỏi, và điều đó sẽ giúp cậu rất nhiều trong tương lai.

Hi vọng nó giúp cậu!

5 Likes

dạ cảm ơn bạn, post đó giúp mình hiểu sâu hơn về class, constructor nhưng đáp án mình vẫn k tìm đc ở đó, mình có tìm được 1 số điểm khác biệt như: constructor khởi tạo giá trị cho biến, còn hàm class nó dùng chung cho mọi đối tượng, k cần tạo đối tượng để gọi hàm, hàm instance thì mình chưa rõ điểm khác của nó

hàm instance thì ngược lại với hàm class thôi. Hàm class không phải tạo đối tượng để gọi hàm thì ngược lại hàm instance cần phải tạo đối tượng để gọi hàm, nhưng chính vì cần tạo đối tượng để gọi hàm nên hàm instance có thể truy cập các thuộc tính của chính instance gọi hàm (hay còn gọi là this) ngược lại hàm class không có đặc điểm này
Đôi khi đọc cần suy luận 1 chút chứ không phải không thấy viết đến nữa thì coi như không biết

5 Likes

OOP: Ở đây, chúng tôi không gọi chúng là hàm, chúng tôi gọi chúng là phương thức.


Phương thức tĩnh (phương thức của lớp): Dùng thực hiện các thao tác chung của lớp mà không cần đến một thực thể (instance) của lớp.
Phương thức không tĩnh (non-static, phương thức của thực thể): Dùng thao tác trực tiếp lên thực thể.

Hàm dựng không tham số có thể dùng để khởi tạo các giá trị mặc định.

public class Human {

    private static int limb = 4;
    private static String sName = "Homo sapiens";

    public static int getLimbCount(){
        return limb;
    }

    public static int getAverageAge(){
        int aa = 0;
        // Calculating... 79 (2020)
        return aa;
    }

    public static long getEarthPopulation(){
        long total = 0;
        // Calculating... 7.8*10^9 (2020)
        return total;
    }

    public static String getScientificName(){
        return sName;
    }

    // ============
    private int weight, age, ...;

    public Human(){
       this(60, 18, ...);
    }
    public Human(int weight, int age, ...){
        setWeight(weight);
        setAge(age);
        //...
    }

    public int getWeight(){
        return weight;
    }

    public void setWeight(int weight){
        this.weight = weight;
    }

    public int getAge(){
        return age;
    }

    public void setAge(int age){
        this.age = age;
    }

    /...
}
6 Likes

Bên C# có constructor tĩnh hay ho mà bên C++ giờ vẫn chưa có nhỉ :slight_smile:

2 Likes

Bởi vì vốn dĩ C++ đã có “tính năng” đó rồi =]]

#include <iostream>

#define static_constructor(...) inline static auto ____some_temp_name = []{__VA_ARGS__; return 0;}();

struct X{
	static_constructor(
		std::cout << "Static constructor for X\n";
		int a=1, b=2, c=3;
		std::cout << "Can do almost anything, as sum of (" << a << ',' << b << ',' << c << ") is " << (a+b+c) << '\n';
	)
};

int main(){
	// Many Xs, but only one static_constructor is run
	X a, b, c, d, e;
}

4 Likes

Một pha xử lý hết sức cồng kềnh đấy nhỉ :smile:

2 Likes

https://repl.it/repls/BlankUtterProtocol

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?