意義:static修飾的變量叫靜態變量,修飾的方法叫靜態方法
重要概念:所謂的靜態在java中指隨着虛擬機的加載而加載的變量及方法,稱之為靜態變量或方法
(直白點講就是static修飾的變量和方法會隨着虛擬機的加載而加載)
編譯的過程:啟動虛擬機、加載java文件、驗證規則、生成class(字節碼)文件
注意點:雙親委托機制,ClassLoader加載class文件
例如:某某想要killXXX,奈何自身沒有這個本事,so,找了組織C,C接了任務后發現自己做不了就委托給組織B,B接了后發現自己也做不了就又委托給了組織A,A完成后將結果反饋給B,B在反饋給C,C在反饋給某某(每個節點也可能自己去完成任務)
非靜態的變量及方法的概念:未被static修飾的變量或方法稱為非靜態變量或方法,只有當創建對象的時候才會被加載進內存(如果未創建對象,那么非靜態的變量或方法就不能調用[不存在於虛擬機所運行的內存中]),非靜態的屬性和方法只能通過對象調用
和靜態之間的關系:不能靜態方法中調用非靜態的變量或方法,非靜態方法中可以調用靜態變量或方法
public class StaticDemo{
//無法從靜態上下文中引用非靜態 變量 count
int count = 2;
public static void main(String[] args){
int count = 1;
System.out.println(a);
}
}
static的作用:資源共享
public class ShareDemo{
public static void main(String[] args){
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
t1.sale();
t2.sale();
}
}
class Ticket{
//static修飾的方法或變量隨着類的加載而加載,程序每次運行時,類只加載一次,所以,靜態變量和方法也只會加載一次
public static int count = 20;
public void sale(){
count--;
System.out.println(count);
}
}
靜態方法和變量的調用形式:
1、通過類名直接調用--建議
2、通過對象進行調用
public class TakeType{
public static void main(String[] args){
//對於靜態的屬性和方法既可以通過類名.調用也可以通過對象.調用
TakeType.run();
Item.show();
Item item = new Item();
item.show();
}
public static void run(){
System.out.println("run");
}
}
class Item{
//商品名稱
public String itemName;
//商品價格
public double itemPrice;
//商品生產地
public String address;
//生產商
public String producter;
public void setItemName(String newItemName){
itemName = newItemName;
}
public String getItemName(){
return itemName;
}
public void setItemPrice(double newItemPrice){
itemPrice = newItemPrice;
}
public double getItemPrice(){
return itemPrice;
}
public void setAddress(String newAddress){
address = newAddress;
}
public String getAddress(){
return address;
}
public void setProducter(String newProducter){
producter = newProducter;
}
public String getProducter(){
return producter;
}
//被吃
public static void show(){
System.out.println("展示商品功能");
}
}
4 類的定義
概念:類就是用於描述某一類事物,相當於是一個模板
例如:印錢的那個母版,有一個版就可以印出好多錢
//銀行卡
public class Card{
//用戶的姓名
public String name;//null
//卡號
public long cardId;//0
//客服電話
public String phone;
//銀行名稱
public String bankName;
}
注意:自己創建的類叫自定義類,那么該類的類名就是一個數據類型,稱為引用數據類型
創建對象:數據類型(類名) 變量名 = new 數據類型();
public class Card{
//用戶的姓名
public String name;//null
//卡號
public long cardId;//0
//客服電話
public String phone;
//銀行名稱
public String bankName;
//創建方法的目的是為了給屬性進行賦值(每個對象的屬性值都不同)
//設置用戶名
public void setName(String newName){
name = newName;
}
//獲取用戶名
public String getName(){
return name;
}
public void setCardId(long newCardId){
cardId = newCardId;
}
public long getCardId(){
return cardId;
}
public void setPhone(String newPhone){
phone = newPhone;
}
public String getPhone(){
return phone;
}
public void setBankName(String newBankName){
bankName = newBankName;
}
public String getBankName(){
return bankName;
}
public static void main(String[] args){
/*System.out.println(new Card());//1
System.out.println(new Card());//1*/
//每個對象都有不同的值,值是通過用戶設置的
//1、創建對象 int count = 1;
Card card = new Card();
Card card2 = new Card();
System.out.println(card);
System.out.println(card2);
System.out.println(card == card2);
//2、通過對象調用方法設置值
card.setName("小代");
card.setCardId(123465789L);
card.setPhone("15731321239");
card.setBankName("中國銀行");
//3、獲取card對象設置的值
String name1 = card.getName();
long cardId1 = card.getCardId();
String phone1 = card.getPhone();
String bankName1 = card.getBankName();
System.out.println(name1+"--"+cardId1+"--"+phone1+"--"+bankName1);
//給card2對象設置值
card2.setName("小嘿");
card2.setCardId(987147258L);
card2.setPhone("134665465496");
card2.setBankName("中國農業銀行");
//獲取card2對象的值