30/09/2018, 17:56
Thắc mắc về public static trong java
package classmethod;
import java.util.Scanner;
public class Student
{
//khai báo thuộc tính (danh từ)
private String name = "Hải Dương";
private int age = 20;
//khai báo phương thức (động từ)
public void showStudent()
{
/*khai báo public thì có thể sử dụng thuộc tính name và age
khai báo static thì không */
System.out.println("name: " + name);
System.out.println("age: " + age);
}
static int AddNumbers(int a, int b)
{
int sum = a + b;
return sum;
}
public static void main(String[] args)
{
//gọi phương thức có kiểu khai báo public thì phải khởi tạo đối tượng
Student st = new Student(); //khởi tạo đối tượng
st.showStudent();
//gọi phương thức có kiểu khai báo static thì không
System.out.println("Sum of two numbers : " + AddNumbers(3, 4));
Student Array [] = new Student [5];
Scanner sc = new Scanner(System.in);
for(int i=0; i<Array.length; i++)
System.out.println(Array[i]);
}
}
Mình mới bắt đầu học java mọi người cho mình hỏi:
- public và static khác nhau chỗ nào
- Tại sao Student là tên class mà có thể khởi tạo đối tượng Student Array [] = new Student [5]; vậy ý nghĩa của việc khai báo này như thế nào
Bài liên quan
Những hàm hay class được khai báo là
public
thì có thể được truy cập từ bất cứ đâu trong code. Cùng với nó thì có cảprotected
,private
thì phạm vi truy cập nhỏ hơn, chỉ dùng được trong package chả hạn.https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
static
nghĩa là variable hay method đó được định nghĩa cho bản thân class đó, ngược lại vớiinstance variable
, cái này thì được định nghĩa cho các object, là thực thể của class. Class thì chỉ có 1 nhưng thực thể thì có thể có rất nhiều Mộtstatic method
thì có thể được gọi mà ko cần dùng tới object của class.Có thể có mảng các
string
, mảng các số, thì ko có lý do gì ko thể có mảng cácStudent
Java vẫn chấp nhận kiểu khai báo như của bạn (kiểu của C). Tuy nhiên, tốt nhất là bạn nên khai báo như sau: Student[] array = new Student[5];
Góp ý một chút: bạn nên chú ý đến các quy tắc đặt tên biến, phương thức.
For a brighter future! http://chingovan.blogspot.com
Mình bổ sung thêm tí, trong Java có một số loại modifier (tiếng việt là định danh thì phải), trong đó 2 cái ta hay gặp nhất là:
** Access modifiers:
Dùng để thiết lập các quyền hay mức độ được truy nhập tới các class, variable, method hay constructor. Trong đống này thì có default, public, private, protected. Một class có gán định danh public thì ở đâu trong chương trình ta cũng có thể truy cập được nó.
** Non Access modifiers:
Thực hiện một số chức năng khác ngoài cái Access modifiers. Static thuộc thể loại này, có một số người anh em nữa như abstract, final, synchronized. Cụ thể thì TTmagic nói khá chuẩn rồi.
Nhưng thế nào là định nghĩa cho instance, thế nào là cho class, tại sao phải làm vậy. Cái này thì để đơn giản ta mình họa luôn ví dụ về Student.
Student là class và mỗi học sinh A, B, C chính là instance (thể hiện) của nó.
Bình thường thì lúc kiểm tra Toán 3 đứa sẽ tự làm bài của mình, mỗi người sẽ có kết quả riêng, không ai chung ai cả, nên để lưu trữ điểm ta tạo một variable là score. Thì score chính là instance variable.
Nhưng một ngày cô giáo thấy chấm riêng thế này thì mệt quá, 3 đứa này lại còn hay nhìn bài nhau nữa, thôi thì làm chung rồi chấm một bài thôi, điểm thì điểm chung cho nó nhanh
Có thể hiểu là giờ tất cả Student A, B, C chỉ chung một score, không còn 3 score riêng nữa. Ta sửa đoạn code trên thành như sau:
Đây chính là ý nghĩa của static, khi mà các instance đều dùng chung một thuộc tính (variable).
Ngoài ra static nó còn một số ý nghĩa nữa, mình cứ học dần là sẽ ra.
Ví dụ của bạn rất chuẩn :d, like ^^
tui thích cái ex của chú
ví dụ có một class học sinh 5a
bọn họ học cùng một trường thì để thuộc tính trường static tức tất cả đối tượng trong cái class đó cùng có, ko phải khai bạn này học trường a, bạn này cũng học trường a.
còn // gọi phương thức có kiểu khai báo static thì không…
bạn thử tạo thêm đối tượng xem vẫn được nhé.