Android基础回顾:Java基础拾遗(一)

虽然这个专栏系列旨在告诉大家如何快速的开发一个Android原生的app,但是工欲善其事,必先利其器。因此,在开始这个专栏系列之前,我想先把平日里容易混淆和遗忘的部分Java基础知识,我们一起复习下。

1、基础数据类型(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

注意点:在byte的值范围以内,JVM不会重新new对象

*   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、超过long取值范围的整数,使用BigInteger类型来表示其数据类型

*   // long类型已经不能表示该数了
    
*   // long a = 26486278478278347824728647823648723647823746L; 
    
*      BigInteger bigInteger = new BigInteger("26486278478278347824728647823648723647823746");
    
*      System.out.println(bigInteger);

用BigInteger类型来声明的变量的加减乘除运算

*   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类型,用于做精确计算,因为浮点型的数据类型本身表示是不精确的,凡是涉及到钱的可以使用该类进行计算。

*   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);

注意点:
BigDecimal的除法运算

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

会报如下错误:

*   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()求绝对值函数,对各种数据类型求绝对值

扫描二维码关注公众号,回复: 15667699 查看本文章
*   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

随机数random()返回[0.0,1.0)之间的double值,这个产生的随机数其实可以通过_x控制,比如(int)(random_100)后可以得到[0,100)之间的整数。

*   System.out.println((int)(Math.random()*100)); // 输出[0,100)间的随机数

ceil(a) 返回大于a的第一个整数所对应的浮点数(值是整的,类型是浮点型),可以通过强制转换将类型换成整型。

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

floor(a) 返回小于a的第一个整数所对应的浮点数(值是整的,类型是浮点型)

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

rint(a) 返回最接近a的整数的double值

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

5、Object的finalize()方法,让系统回收不再使用的对象,每个对象在被回收时,系统都会调用其finalize()方法。

*   public class PresonInfo {
    
*       @Override
    
*       protected void finalize() throws Throwable {
    
*           super.finalize();
    
*           System.out.println("我被系统回收了");
    
*        }
    
*   }

*   for (int i = 0; i < 1000000; i++) {
    
*      new PresonInfo(); // new的对象,当没有任何其他对象引用时,它就是垃圾
    
*   }
    
*   System.gc();

6、查看运行环境的信息

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

运行之后的结果如下:

*   {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,...

这一篇,我们就先复习到这里,希望对你有所帮助,谢谢!

虽然这个专栏系列旨在告诉大家如何快速的开发一个Android原生的app,但是工欲善其事,必先利其器。因此,在开始这个专栏系列之前,我想先把平日里容易混淆和遗忘的部分Java基础知识,我们一起复习下。

1、基础数据类型(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

注意点:在byte的值范围以内,JVM不会重新new对象

*   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、超过long取值范围的整数,使用BigInteger类型来表示其数据类型

*   // long类型已经不能表示该数了
    
*   // long a = 26486278478278347824728647823648723647823746L; 
    
*      BigInteger bigInteger = new BigInteger("26486278478278347824728647823648723647823746");
    
*      System.out.println(bigInteger);

用BigInteger类型来声明的变量的加减乘除运算

*   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类型,用于做精确计算,因为浮点型的数据类型本身表示是不精确的,凡是涉及到钱的可以使用该类进行计算。

*   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);

注意点:
BigDecimal的除法运算

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

会报如下错误:

*   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()求绝对值函数,对各种数据类型求绝对值

*   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

随机数random()返回[0.0,1.0)之间的double值,这个产生的随机数其实可以通过_x控制,比如(int)(random_100)后可以得到[0,100)之间的整数。

*   System.out.println((int)(Math.random()*100)); // 输出[0,100)间的随机数

ceil(a) 返回大于a的第一个整数所对应的浮点数(值是整的,类型是浮点型),可以通过强制转换将类型换成整型。

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

floor(a) 返回小于a的第一个整数所对应的浮点数(值是整的,类型是浮点型)

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

rint(a) 返回最接近a的整数的double值

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

5、Object的finalize()方法,让系统回收不再使用的对象,每个对象在被回收时,系统都会调用其finalize()方法。

*   public class PresonInfo {
    
*       @Override
    
*       protected void finalize() throws Throwable {
    
*           super.finalize();
    
*           System.out.println("我被系统回收了");
    
*        }
    
*   }

*   for (int i = 0; i < 1000000; i++) {
    
*      new PresonInfo(); // new的对象,当没有任何其他对象引用时,它就是垃圾
    
*   }
    
*   System.gc();

6、查看运行环境的信息

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

运行之后的结果如下:

*   {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,...

这一篇,我们就先复习到这里,希望对你有所帮助,谢谢!

虽然这个专栏系列旨在告诉大家如何快速的开发一个Android原生的app,但是工欲善其事,必先利其器。因此,在开始这个专栏系列之前,我想先把平日里容易混淆和遗忘的部分Java基础知识,我们一起复习下。

1、基础数据类型(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

注意点:在byte的值范围以内,JVM不会重新new对象

*   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、超过long取值范围的整数,使用BigInteger类型来表示其数据类型

*   // long类型已经不能表示该数了
    
*   // long a = 26486278478278347824728647823648723647823746L; 
    
*      BigInteger bigInteger = new BigInteger("26486278478278347824728647823648723647823746");
    
*      System.out.println(bigInteger);

用BigInteger类型来声明的变量的加减乘除运算

*   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类型,用于做精确计算,因为浮点型的数据类型本身表示是不精确的,凡是涉及到钱的可以使用该类进行计算。

*   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);

注意点:
BigDecimal的除法运算

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

会报如下错误:

*   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()求绝对值函数,对各种数据类型求绝对值

*   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

随机数random()返回[0.0,1.0)之间的double值,这个产生的随机数其实可以通过_x控制,比如(int)(random_100)后可以得到[0,100)之间的整数。

*   System.out.println((int)(Math.random()*100)); // 输出[0,100)间的随机数

ceil(a) 返回大于a的第一个整数所对应的浮点数(值是整的,类型是浮点型),可以通过强制转换将类型换成整型。

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

floor(a) 返回小于a的第一个整数所对应的浮点数(值是整的,类型是浮点型)

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

rint(a) 返回最接近a的整数的double值

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

5、Object的finalize()方法,让系统回收不再使用的对象,每个对象在被回收时,系统都会调用其finalize()方法。

*   public class PresonInfo {
    
*       @Override
    
*       protected void finalize() throws Throwable {
    
*           super.finalize();
    
*           System.out.println("我被系统回收了");
    
*        }
    
*   }

*   for (int i = 0; i < 1000000; i++) {
    
*      new PresonInfo(); // new的对象,当没有任何其他对象引用时,它就是垃圾
    
*   }
    
*   System.gc();

6、查看运行环境的信息

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

运行之后的结果如下:

*   {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,...

这一篇,我们就先复习到这里,希望对你有所帮助,谢谢!

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
在这里插入图片描述
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

全套视频资料:

一、面试合集

在这里插入图片描述
二、源码解析合集
在这里插入图片描述

三、开源框架合集
在这里插入图片描述
欢迎大家一键三连支持,若需要文中资料,直接点击文末CSDN官方认证微信卡片免费领取↓↓↓

猜你喜欢

转载自blog.csdn.net/Code1994/article/details/130735679