java笔记类与对象3.7-3.10 2020.3.17
List,是個接口
ArrayList才是動態數組類
3.7垃圾回收機制
this的三種用法
this(1,2,3)會調用構造器
下圖三個對象都是垃圾對象
讓系統回收垃圾對象
回收的時候,會調用自己的finalize方法
加不加this都行,甚至可以加一個this.getName()
結果會略有不同,但都消失
3.8 static的使用
同時也是靜態的
this到底指什么
當前類的對象
類加載的時候就運行靜態代碼塊
之后程序調用構造函數時,構造函數里的才輸出,所以有先后順序
java靜態代碼塊在什么時候會執行
未調用的時候未執行
創建新對象就要加載類,執行了
類加載的時機
對于初始化階段,虛擬機規范規定了有且只有 5 種情況必須立即對類進行“初始化”(而加載、驗證、準備自然需要在此之前開始):
遇到new、getstatic 和 putstatic 或 invokestatic 這4條字節碼指令時,如果類沒有進行過初始化,則需要先觸發其初始化。對應場景是:使用 new 實例化對象、讀取或設置一個類的靜態字段(被 final 修飾、已在編譯期把結果放入常量池的靜態字段除外)、以及調用一個類的靜態方法。
對類進行反射調用的時候,如果類沒有進行過初始化,則需要先觸發其初始化。
當初始化類的父類還沒有進行過初始化,則需要先觸發其父類的初始化。(而一個接口在初始化時,并不要求其父接口全部都完成了初始化)
虛擬機啟動時,用戶需要指定一個要執行的主類(包含 main() 方法的那個類),
虛擬機會先初始化這個主類。
當使用 JDK 1.7 的動態語言支持時,如果一個 java.lang.invoke.MethodHandle 實例最后的解析結果 REF_getStatic、REF_putStatic、REF_invokeStatic 的方法句柄,并且這個方法句柄所對應的類沒有進行過初始化,則需要先觸發其初始化。
第5種情況,我暫時看不懂。
以上這 5 種場景中的行為稱為對一個類進行主動引用。除此之外,所有引用類的方式都不會觸發初始化,稱為被動引用,例如:
通過子類引用父類的靜態字段,不會導致子類初始化。
通過數組定義來引用類,不會觸發此類的初始化。MyClass[] cs = new MyClass[10];
常量在編譯階段會存入調用類的常量池中,本質上并沒有直接引用到定義常量的類,因此不會觸發定義常量的類的初始化。
3.9類的組合
3.10summary
作業
1.輸出?
20 40
2.輸出?
package com.example;class Book {int width;int length; }public class javahello_2 {static int j = 20;public static void main(String args[]) {int i = 10;javahello_2 p = new javahello_2();p.amethod(i);System.out.println(i + " and " + j);}public void amethod(int x) {x = x * 2;j = j * 2;}}定義一個表示學生的student類,包括的域有學號、姓名、性別、年齡,包括的方法有獲得學號、姓名、性別、年齡及修改年齡。編寫Java程序創建student類的對象及測試其方法的功能。
package com.example; import javax.swing.*; class Student{int number=0;String name="aas";char sex='f';int age=0;public int getAge() {return age;}public int getNumber() {return number;}public String getName() {return name;}public char getSex() {return sex;}public void setAge(int age) {this.age = age;} } public class javahello_2 {public static void main(String[] args) {Student student=new Student();System.out.println(student.getSex());student.setAge(12);System.out.println(student.getAge());System.out.println(student.getName());System.out.println(student.getNumber());System.out.println(student.toString());} }定義一個計算矩形面積、立方體和球體體積的類。該類完成計算的方法用靜態方法實現。
package com.example;class Jisuanqi{static double jisuan(double a){return 4/3*a*a*a*Math.PI;}static double jisuan(double a,double b){return a*b;}static double jisuan(double a,double b,double c){return a*b*c;} } public class javahello_2 {public static void main(String[] args) {///用缺省處理///不用了Jisuanqi jisuanqi = new Jisuanqi();System.out.println(Jisuanqi.jisuan(9));System.out.println(Jisuanqi.jisuan(1,2));System.out.println(Jisuanqi.jisuan(4,5,6));} }定義一個Company類,成員變量有公司名稱、雇員列表、公司每年的總收入。該類的構造方法可能有如下形式: public Company(String name) { } 也可以有更多其它形式的構造方法。或許還應該有如下方法: public void setName(String name){ } public String getName() { } 必須提供一個公共的dump方法來打印有關Company的信息,如公司名稱、雇員和公司總收入。最后為Company類編寫一個測試客戶程序。
List不是一個類,是個接口
ArrayList才是動態數組類
總結
以上是生活随笔為你收集整理的java笔记类与对象3.7-3.10 2020.3.17的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬虫笔记12完结篇实例:股票
- 下一篇: Python模块进阶、标准库、扩展库