on java 8学习笔记
2022.2.15
第三章
new 關鍵字創建出來的對象位于堆中,而基本數據類型則會被創建在棧中
這種寫法在java中是錯的,但在c++里是允許的
字段(有時叫作“數據成員”)和方法(有時叫作“成員函數”)
如果變量作為類成員而沒被初始化過就會被java默認初始化,但是如果變量是類的方法中的,那么就不會被默認初始化
進行強轉就不會報錯了
有關于improt,我想看書的應該沒幾個是正常用記事本寫java的把,應該都是用的ide吧,我試著用記事本的import寫法發現不太行,然后我找到了這篇文章https://blog.csdn.net/weixin_40268421/article/details/111593086
為什么要有static
第一種情況是,有時候我們需要一小塊共享空間來保存某個特定的字段,而并不關心創建多少個對象,甚至有沒有創建對象。第二種情況是,你需要使用一個類的某個方法,而該方法和具體的對象無關;換句話說,你希望即便沒有生成任何該類的對象,依然可以調用其方法。
由于所有的 Java 代碼文件都默認導入了java.lang,所以列表中的類我們都可以直接調用。
main()的參數是一個String對象的數組,雖然目前我們并不會使用args參數,但 Java 編譯器會強制你傳遞該參數,因為它用于獲取控制臺的輸入。
第四章 操作符
牢記一點吧,都是引用,而在java中引用實際上就是值
出于效率原因,Integer會通過享元模式來緩存范圍在-128~127內的對象,因此多次調用Integer.valueOf(127)生成的其實是同一個對象。而在此范圍之外的值則不會這樣,比如每次調用Integer.valueOf(128)返回的都是不同的對象。因此需要特別注意,在進行==和!=的比較時,范圍不同的值生成對象的方式并不一樣,這會影響到比較的行為,從而產生不同的結果。另外,通過new Interger()生成的對象都是新創建的,無論其值處于什么范圍。所以通過不同方式創建的Integer對象,也會影響到比較的結果。——譯者注
在Java 9及更新版本中已經棄用new Integer(),因為它的效率遠遠低于Integer.valueOf()。
.equal()的默認方法是只比較對象的引用,所以.equal()方法最好自己重寫一下
在Java中,把int類型當作boolean類型并不合法
基本浮點型轉化位整型,小數點后無論多大都不會被四舍五入,除非round方法
基本數據類型在java算術中依舊存在溢出風險且不會報錯
注意Java不允許將數字當作布爾值使用,雖然這在C和C++里是允許的
第五章 控制流
for循環的步進部分都是出了循環然后步進再進行布爾表達式判定
字符串1就是main中的參數
關于0.0-1.0開區間閉區間那個,按作者的意思,因為可能性太小,所以不一定會出來0.0,即便它包括了0.0.
第六章 初始化和清理
之所以使用構造器方法這種形式創建和初始化對象,是為了避免對象的創建和初始化分離開導致的錯誤
方法重載中基本數據類型的所占字節數如果小于了重載方法中占最小字節數的基本數據類型,則被傳入的基本數據類型會被轉化為這個重載方法中占最小字節數的類型,比如傳入的是int,最小最小字節數為long ,則會被轉化為long類型;如果傳入的數據類型比重載方法的參數類型更大,那么必須強制轉化成小的,不然報錯
你可能會想:“為什么只通過參數列表來區分重載方法?為什么不根據方法的返回值來區分?”比如下面定義的兩個方法雖然具有相同的名字和參數,但很容易就能通過返回值區分開來:
void f() {} int f() { return 1; }只有編譯器能從上下文中明確地判斷出語句的含義,這種方式才是可行的。比如在int x = f()中,x的類型能夠告訴編譯器,我們想要調用哪個版本的f(),但還可以調用f()并忽略它的返回值。這被稱為調用方法的副作用,此時我們不關心返回值,而只是想要方法調用的其他效果。因此,如果這樣調用方法:
我想從另一個角度說一下吧,因為這本身就存在歧義,因為java中方法其實就是c語言中的函數,那么你見過哪個函數一個x值可以對應兩種不同的y值還有行為的,這又不是賭命
f();此時Java如何確定應該調用哪個f()?閱讀代碼的人又該如何理解它呢?由于存在這些問題,我們不能使用返回值類型來區分重載方法。
this關鍵字只能在非靜態方法中使用。
其實感覺吧構造器除外
this的使用
this可以讓你得到當前對象的引用
盡量在本類調用方法時不用this.方法名()
return this 在方法中可以實現同一個對象不斷使用一個方法,例如
person.方法名().方法名().方法名()將自身引用傳給外部類或者方法
這里第三點指的應該時構造器方法
靜態方法也可以創建自己的對象
public class test {public static void f(){class a {public a(){System.out.println("hello");}}new a();}public static void main(String[] args){test.f();} }這么做是合法的
其他
有關于內存泄漏的概念https://zh.wikipedia.org/wiki/%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F
簡單來說就是已經不用的內存沒有還給系統
有關于析構函數,雖然我還沒看https://docs.microsoft.com/zh-cn/cpp/cpp/destructors-cpp?view=msvc-170
總結
以上是生活随笔為你收集整理的on java 8学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022.2.13java学习笔记
- 下一篇: on java 8 学习笔记 2022.