雖然這個(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ì)你有所幫助,謝謝第焰!