static優先於對象存在,因爲static的成員隨着類的加載就已經存在了。
靜態代碼塊:隨着類的加載而執行,優先級最高
內存分爲堆內存(存放new出來的對象),棧內存(存放局部變量),數據區(存放靜態變量和字符串常量),代碼區(存放JAVA中方法的代碼)。
37.在靜態方法裏面不能調用動態的方法 在類的構造方法裏面可以this調用方法,可以省略this
你main方法是靜態方法,
靜態方法是不能調用非靜態方法。
因爲靜態方法是提前加載的。這個時候可能非靜態方法根本就還沒加載。所以,是不允許在靜態方法裏面調用非靜態方法的。(靜態方法變量優先與對象加載)
可以在靜態方法中,獲得非靜態方法所在的類的對象實例(new一個對象)。
在靜態方法中,用這個實例去調用非靜態方法。
靜態的是共享的(類名,對象名都可以調用) 非靜態的是特有的,靜態方法不再是針對於某個對象調用,所以不能訪問非靜態的成員
局部變量不能是靜態的,全局變量可以是靜態的(在外面定義)
局部變量前不能放置任何訪問修飾符 (private,public,和protected)。
靜態方法變量,不能使用this,super (靜態變量優先於對象加載)
類有2種訪問控制權限: 公有的(可被所有類共享) 缺省的(可被當前包中的類訪問)
類中成員有4種訪問控制權限:
私有成員(private):該成員僅能被當前類的成員訪問。
沒有修飾符表示缺省權限(當前包可見):說明該成員能被當前類以及包中的其他類所訪問,稱在當前包可見
protected聲明保護成員:該成員能被當前類及其子類、或當前包中的其他類訪問,稱在子類中可見
public聲明公有成員:該成員可被所有類訪問
(在一個java文件裏面不能寫兩個public的class 只能寫一個 mian函數只能寫在public的class文件裏)
import java.util.ArrayList;
import java.util.List;
public class bb
{
public TTT tt;
// public bb bb1 ;
public void getname(bb bb1)
{
bb1.setTt(tt);
}
public TTT getTt()
{
return tt;
}
public void setTt(TTT tt)
{
this.tt = tt;
}
public static void main(String[] args)
{
// System.out.println(thi);
//靜態方法不再是針對於某個對象調用,靜態變量屬於類,所以不能訪問非靜態成員(super,this代表當前對象)
//靜態變量優先於對象存在
// bb1.
// System.out.println(super.getClass().getName());
bb bb2 = new bb();
bb2.getname(bb2);
System.out.println(bb2.getClass());
TTT tt = new TTT();
String str[] = {};
String s[] = new String[0];
System.out.println(new String[0]);
}
}