Java基礎(chǔ)拾遺(一)

雖然這個(gè)專欄系列旨在告訴大家如何快速的開(kāi)發(fā)一個(gè)Android原生的app,但是工欲善其事第煮,必先利其器撩炊。因此,在開(kāi)始這個(gè)專欄系列之前,我想先把平日里容易混淆和遺忘的部分Java基礎(chǔ)知識(shí)匙铡,我們一起復(fù)習(xí)下图甜。(小專欄地址:https://xiaozhuanlan.com/android_ls
1、基礎(chǔ)數(shù)據(jù)類型(int鳖眼、short黑毅、float、double等)的包裝類型的equals()和==钦讳,我們拿Integer做示例:

Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true

注意點(diǎn):在byte的值范圍以內(nèi)矿瘦,JVM不會(huì)重新new對(duì)象

Integer a = 127;// Integer a = new Integer(127);
Integer b = 127;// Integer b = a;
System.out.println(a == b); // true
System.out.println(a.equals(b)); // true

在大于byte的取值范圍

Integer a = 500;
Integer b = 500;
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true

2、超過(guò)long取值范圍的整數(shù)愿卒,使用BigInteger類型來(lái)表示其數(shù)據(jù)類型

// long類型已經(jīng)不能表示該數(shù)了
// long a = 26486278478278347824728647823648723647823746L; 
   BigInteger bigInteger = new BigInteger("26486278478278347824728647823648723647823746");
   System.out.println(bigInteger);

用BigInteger類型來(lái)聲明的變量的加減乘除運(yùn)算

BigInteger b1 = new BigInteger("1647678416487364761894271874687134687");
BigInteger b2 = new BigInteger("1647678416487364761894271874687134687");
BigInteger result = b1.add(b2); // 加法
BigInteger result = b1.subtract(b2); // 減法
BigInteger result = b1.multiply(b2); // 乘法
BigInteger result = b1.divide(b2); // 除法
System.out.println(result);

3缚去、BigDecimal類型,用于做精確計(jì)算琼开,因?yàn)楦↑c(diǎn)型的數(shù)據(jù)類型本身表示是不精確的易结,凡是涉及到錢的可以使用該類進(jìn)行計(jì)算。

BigDecimal bi1 = new BigDecimal("0.9");
BigDecimal bi2 = new BigDecimal("0.1");
BigDecimal result = bi1.add(bi2); // 加法
BigDecimal result = bi1.subtract(bi2); // 減法
BigDecimal result = bi1.multiply(bi2); // 乘法
BigDecimal result = bi1.divide(bi2); // 除法
System.out.println(result);

注意點(diǎn):
BigDecimal的除法運(yùn)算

BigDecimal bi1 = new BigDecimal("1.301");
BigDecimal bi2 = new BigDecimal("101");
BigDecimal result = bi1.divide(bi2); // 除法
System.out.println(result);

會(huì)報(bào)如下錯(cuò)誤:

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

解決辦法:

BigDecimal bi1 = new BigDecimal("1.301");
BigDecimal bi2 = new BigDecimal("100");

// BigDecimal.ROUND_UP: 0.01301-->0.014柜候,向上加1
// BigDecimal.ROUND_DOWN 0.01301-->0.013搞动,直接舍去
// BigDecimal.ROUND_HALF_UP 0.01301-->0.013,>= 0.5渣刷,向上加1
        
// BigDecimal result = bi1.divide(bi2, 3, BigDecimal.ROUND_HALF_DOWN); // 0.013鹦肿,直接舍去
// BigDecimal result = bi1.divide(bi2, 3, BigDecimal.ROUND_HALF_UP); // 0.013,>= 0.5飞主,向上加1
   BigDecimal result = bi1.divide(bi2, 3, BigDecimal.ROUND_UP); // 0.014狮惜,向上加1
   System.out.println(result);

4、Math類常用的方法
abs()求絕對(duì)值函數(shù)碌识,對(duì)各種數(shù)據(jù)類型求絕對(duì)值

System.out.println(Math.abs(-10));  //  輸出10

max(a,b)求最大值

System.out.println(Math.max(1, 2)); // 輸出2

min(a,b)求最小值

System.out.println(Math.min(1.9, -0.2)); // 輸出-0.2

隨機(jī)數(shù)random()返回[0.0,1.0)之間的double值碾篡,這個(gè)產(chǎn)生的隨機(jī)數(shù)其實(shí)可以通過(guò)x控制,比如(int)(random100)后可以得到[0,100)之間的整數(shù)筏餐。

System.out.println((int)(Math.random()*100)); // 輸出[0,100)間的隨機(jī)數(shù)

ceil(a) 返回大于a的第一個(gè)整數(shù)所對(duì)應(yīng)的浮點(diǎn)數(shù)(值是整的开泽,類型是浮點(diǎn)型),可以通過(guò)強(qiáng)制轉(zhuǎn)換將類型換成整型魁瞪。

System.out.println(Math.ceil(1.3443)); // 輸出2.0
System.out.println((int)Math.ceil(1.3443)); // 輸出2

floor(a) 返回小于a的第一個(gè)整數(shù)所對(duì)應(yīng)的浮點(diǎn)數(shù)(值是整的穆律,類型是浮點(diǎn)型)

System.out.println(Math.floor(1.3443)); // 輸出1.0

rint(a) 返回最接近a的整數(shù)的double值

System.out.println(Math.rint(1.2)); // 輸出1.0
System.out.println(Math.rint(1.8)); // 輸出2.0

5、Object的finalize()方法导俘,讓系統(tǒng)回收不再使用的對(duì)象峦耘,每個(gè)對(duì)象在被回收時(shí),系統(tǒng)都會(huì)調(diào)用其finalize()方法旅薄。

public class PresonInfo {
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("我被系統(tǒng)回收了");
     }
}
for (int i = 0; i < 1000000; i++) {
   new PresonInfo(); // new的對(duì)象辅髓,當(dāng)沒(méi)有任何其他對(duì)象引用時(shí),它就是垃圾
}
System.gc();

6、查看運(yùn)行環(huán)境的信息

String proStr = System.getProperties().toString();
System.out.println(proStr);

運(yùn)行之后的結(jié)果如下:

{java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib, java.vm.version=25.5-b02, gopherProxySet=false, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=:, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user.country=CN, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=unknown, java.vm.specification.name=Java Virtual Machine Specification, user.dir=/Users/android_ls/Documents/workspace_javaee/Test, java.runtime.version=1.8.0_05-b13, java.awt.graphicsenv=sun.awt.CGraphicsEnvironment, java.endorsed.dirs=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/endorsed, os.arch=x86_64, java.io.tmpdir=/var/folders/4m/3wr7c_xj7336fylxzrljv0qm0000gn/T/, line.separator=
, java.vm.specification.vendor=Oracle Corporation, os.name=Mac OS X, sun.jnu.encoding=UTF-8, java.library.path=/Users/android_ls/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:., java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, os.version=10.12.1, user.home=/Users/android_ls, user.timezone=Asia/Shanghai, java.awt.printerjob=sun.lwawt.macosx.CPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, java.class.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/htmlconverter.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/lib/tools.jar:/Users/android_ls/Documents/workspace_javaee/Test/out/production/Test, user.name=android_ls, java.vm.specification.version=1.8, sun.java.command=com.miliyo.test.Main, java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre, sun.arch.data.model=64, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.lwawt.macosx.LWCToolkit, java.vm.info=mixed mode, java.version=1.8.0_05, java.ext.dirs=/Users/android_ls/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java, sun.boot.class.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/classes, java.vendor=Oracle Corporation, file.separator=/, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, sun.io.unicode.encoding=UnicodeBig, sun.cpu.endian=little, sun.cpu.isalist=}
  這一篇洛口,我們就先復(fù)習(xí)到這里矫付,希望對(duì)你有所幫助,謝謝第焰!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末买优,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子挺举,更是在濱河造成了極大的恐慌杀赢,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豹悬,死亡現(xiàn)場(chǎng)離奇詭異葵陵,居然都是意外死亡液荸,警方通過(guò)查閱死者的電腦和手機(jī)瞻佛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)娇钱,“玉大人伤柄,你說(shuō)我怎么就攤上這事∥穆В” “怎么了适刀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)煤蹭。 經(jīng)常有香客問(wèn)我笔喉,道長(zhǎng),這世上最難降的妖魔是什么硝皂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任常挚,我火速辦了婚禮,結(jié)果婚禮上稽物,老公的妹妹穿的比我還像新娘奄毡。我一直安慰自己,他們只是感情好贝或,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布吼过。 她就那樣靜靜地躺著,像睡著了一般咪奖。 火紅的嫁衣襯著肌膚如雪盗忱。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天羊赵,我揣著相機(jī)與錄音趟佃,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛揖闸,可吹牛的內(nèi)容都是我干的揍堕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼汤纸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼衩茸!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起贮泞,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤楞慈,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后啃擦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體囊蓝,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年令蛉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了聚霜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡珠叔,死狀恐怖蝎宇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祷安,我是刑警寧澤姥芥,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布仍稀,位于F島的核電站翅楼,受9級(jí)特大地震影響旁涤,放射性物質(zhì)發(fā)生泄漏阀趴。R本人自食惡果不足惜摆霉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一淘邻、第九天 我趴在偏房一處隱蔽的房頂上張望讼昆。 院中可真熱鬧蒙袍,春花似錦腕巡、人聲如沸玄坦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)煎楣。三九已至,卻和暖如春车伞,著一層夾襖步出監(jiān)牢的瞬間择懂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工另玖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留困曙,地道東北人表伦。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像慷丽,于是被迫代替她去往敵國(guó)和親蹦哼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容