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