excel表如何根據顏色排序(excel表如何按照顏色排序)
1132
2025-03-31
1.static方法(靜態方法)
static方法就是沒有this的方法,因為static方法不依賴于任何對象就可以進行調用了。
在static方法的內部不能調用非靜態方法,但是非靜態方法是可以調用static方法的。
(static方法的內部不能調用非靜態方法:這不是完全不可能。如果傳遞一個對象的引用到靜態方法里,然后通過這個引用(this效果相同),你就可以調用非靜態方法和訪問非靜態成員變量了,但通常要達到這樣的效果,只需寫一個非靜態方法即可。)
public class student{ ?? ?static String name ;//靜態成員變量(靜態屬性) ?? ?int age ;//非靜態成員變量(非靜態屬性) ?? ? ?? ?//static方法,程序的入口實質是一個靜態方法 ?? ?public static void main(String[] args) ?? ?{ ????????setName();? //靜態方法直接調用 ?? ??? ?new student().setAge(); //需傳遞一個對象的引用到靜態方法 ?? ?} ?? ? ?? ?//靜態方法 ?? ?public static void setName()? ?? ?{System.out.println("靜態方法!");?} ?? ? ?? ?//非靜態方法 ?? ?public void setAge()? ?? ?{System.out.println("非靜態方法!");?}}
2.static變量
static變量(靜態變量):
靜態變量可以被所有對象調用(所有對象所共享的),當且僅當在類初次加載時就被初始化。另外,static成員變量的初始化順序按照定義的順序進行初始化。所以靜態區里面存放的東西是唯一的。
非靜態變量:
非靜態變量是對象擁有的、私有的,在創建對象的時候才會初始化,各個對象所擁有的變量相互隔離、互不影響。
public class student{ ????static String name ; ?? ?int age ; ?? ?public static void setName()?{System.out.println("靜態方法!");?} ?? ?public void setAge()?{System.out.println("非靜態方法!");} ?? ?public static void main(String[] args) ?? ?{ ?? ??? ?student stu1 = new student(); ????????student stu2?= new student();}}
當運行程序時,靜態的屬性和方法會放進在靜態區。
而非靜態的屬性和方法,在運行程序時,它們是不會直接進入到內存的,當程序執行創建對象的時候,它們才會進入到堆內存中。即new student()被執行的時候,創建了一個新對象,非靜態的屬性和方法依附于創建的新對象進入到內存中。
3.static代碼塊
static關鍵字可以用來形成靜態代碼塊以優化程序性能,因為只會在類加載的時候執行一次。
import java.sql.Date; public class student{ ?? ?private Date birthday;? ?? ?public student() {} ?? ?public student(Date birthday)? ?? ?{?this.birthday = birthday ;} ?? ? ????public String judge() ?? ?{ ?? ??? ?Date startDate = java.sql.Date.valueOf("2000-1-1"); ?? ??? ?Date endDate = java.sql.Date.valueOf("2022-1-1"); ????????return????????(birthday.compareTo(startDate) >= 0 && ?????????????????????????birthday.compareTo(endDate) <=0)?"True":"Flase"; ?? ??? ?//三元運算符判斷是否生日在startDate到endDate之間 ?? ?}? ?? ?public static void main(String[] args) ?? ?{ ?? ??? ?Date studentbirthday = java.sql.Date.valueOf("2020-12-31"); ?? ??? ?student student = new student(studentbirthday); ?? ??? ?System.out.println(student.judge()); ?? ?}}
在每次judge被調用的時候,堆內存當中都會開辟空間,創建生成startDate和endDate兩個對象,造成了空間浪費。代碼只將startDate,endDate在judge()方法中移去,改成:
private static Date startDate,endDate; //定義為靜態變量 ?? ?static? ?? ?{ ?? ??? ?Date startDate = java.sql.Date.valueOf("2000-1-1"); ?? ??? ?Date endDate = java.sql.Date.valueOf("2022-1-1"); ?? ?}
這樣,效率會更高,startDate,endDate存在靜態區被對象所共享,進行多次操作的時候就不需要占更多的空間。
static 關鍵字誤區:
1.靜態成員變量雖然獨立于對象,但是不代表不可以通過對象去訪問,所有的靜態方法和靜態變量都可以通過對象訪問(只要訪問權限足夠)。非靜態方法中能否夠通過this訪問靜態成員變量?
public class student? { ?? ?static String name = "小黑"; //靜態變量 ?? ? ?? ?public static void main(String[] args){ ?? ??? ?new student().printname(); ?? ?} ?? ?public void printname() ?? ?{ ?? ??? ?String name = "小白"; //非靜態變量 ?? ??? ?System.out.println(this.name);? ?? ?} }
所以非靜態方法中能夠通過this訪問靜態成員變量。
2.Java中能夠影響到訪問權限的只有private、public、protected(包括包訪問權限)這幾個關鍵字,而static關鍵字不會影響到變量或者方法的作用域。
3.static是不允許用來修飾局部變量,Java語法的規定。
Java
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。