一、static關(guān)鍵字
1. 靜態(tài)變量
- 在類中,用static聲明的成員變量為靜態(tài)成員變量。
- 它為該類的公用變量,屬于類,被該類的所有實(shí)例共享,在類被載入時(shí)被顯式初始化,
- 對于該類的所有對象來說,static成員變量只有一份。被該類的所有對象共享!!
- 可以使用”對象.類屬性”來調(diào)用。不過,一般都是用“類名.類屬性”。
public static int count;
2. 靜態(tài)方法
- 不需要對象,就可以調(diào)用(類名.方法名)
- 在調(diào)用該方法時(shí),不會(huì)將對象的引用傳遞給它,所以在static方法中不可訪問非static的成員。
public static void count(){
System.out.println("tt");
}
二、this關(guān)鍵字
this 關(guān)鍵字用來表示當(dāng)前對象本身,或當(dāng)前類的一個(gè)實(shí)例,通過 this 可以調(diào)用本對象的所有方法和屬性。
1.使用this區(qū)分同名變量
public class Student {
public String name;
public int age;
public String numid;
public String major;
public Student() {
System.out.println("空構(gòu)造器");
}
public Student(String name, int age, String numid, String major) {
this.name = name;
this.age = age;
this.numid = numid;
this.major = major;
}
}
2.作為構(gòu)造方法初始化對象
相當(dāng)于調(diào)用本類的其它構(gòu)造方法,它必須作為構(gòu)造方法的第一句。
public class Student {
public String name;
public int age;
public Student() {
this("小王",18);
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
注意:
- 在構(gòu)造方法中調(diào)用另一個(gè)構(gòu)造方法,調(diào)用動(dòng)作必須置于最起始的位置(首行)。
- 不能在構(gòu)造方法以外的任何方法內(nèi)調(diào)用構(gòu)造方法。
- 在一個(gè)構(gòu)造方法內(nèi)只能調(diào)用一個(gè)構(gòu)造方法。
3.作為參數(shù)傳遞
public class Demo{
public static void main(String[] args){
B b = new B(new A());
}
}
class A{
public A(){
new B(this).print(); // 匿名對象
}
public void print(){
System.out.println("Hello from A!");
}
}
class B{
A a;
public B(A a){
this.a = a;
}
public void print() {
a.print();
System.out.println("Hello from B!");
}
}
三、代碼塊block
通過{ }自稱作用域
1.普通代碼塊
它是最常見的代碼塊,是類中方法的方法體或在方法名后面。
public class CommonBlock {
private int count;
public void counting(){
count = 5;
{
count++;
}
System.out.println(count);
}
}
2.構(gòu)造代碼塊
它是用來初始化成員變量,是初始化一個(gè)類的所有構(gòu)造方法共用的特征,且僅運(yùn)行一次。
public class CommonBlock {
private int count;
{
count++;
System.out.println("構(gòu)造代碼塊執(zhí)行了。。。");
}
public void counting(){
{
System.out.println("普通代碼塊執(zhí)行了。。。");
}
System.out.println(count);
}
public static void main(String[] args) {
CommonBlock c = new CommonBlock();
c.counting();
}
}
3.靜態(tài)代碼塊
(經(jīng)常用來初始化類,加載類信息時(shí)執(zhí)行?。?br> 如果希望加載后,對整個(gè)類進(jìn)行某些初始化操作,可以使用static初始化塊。
- 是在類初始化時(shí)執(zhí)行,不是在創(chuàng)建對象時(shí)執(zhí)行。
- 靜態(tài)初始化塊中不能訪問非static成員。
執(zhí)行順序:上溯到Object類,先執(zhí)行Object的靜態(tài)初始化塊,再向下執(zhí)行子類的靜態(tài)初始化塊,直到我們的類的靜態(tài)初始化塊為止。(到繼承再看)
public class TestStaticBlock {
static {
System.out.println("此處,可執(zhí)行類的初始化工作!");
}
public static void main(String[] args) {
System.out.println("main方法中的第一句");
}
}