这篇是常用API的结束了,写完的话可以继续往后复习了。

1.基本类型包装类的介绍与相关代码实现

对于数据包装类的特点就是可以将基本数据类型与字符串来回切换,接下来我会通过介绍Integer类的形式,来代表大部分的基本类型包装类的知识点,原因是其余的包装类的使用与Integer类有90%的形式都是一样的。

public class Demo1 {
public static void main(String[] args) {
function();
}
public static void function() {
int i=Integer.parseInt("233"); //该方法用于将字符串转换为int型!!!
//字符串必须为数字格式的
System.out.println(i);
}
}
结果:233
public class Demo1 {
public static void main(String[] args) {
function1();
}
public static void function1() {
int i=Integer.parseInt("123",4); //该方法用于将指定进制数转换为十进制数
System.out.println(i);
}
}
结果:27
public class Demo1 {
public static void main(String[] args) {
function2();
}
public static void function2() {
String s=Integer.toString(5); //通过调用静态方法将基本数据类型转换为字符串
System.out.println(s+1);
int i=5;
String a=i+" "; //这种方式更为简单粗暴,但似乎和我们的Integer类没啥关系
System.out.println(a);
}
结果:51
5
public class Demo1 {
public static void main(String[] args) {
function3();
}
public static void function3() {
String s=Integer.toString(155,2); //将int型数转换为指定进制并返回字符串
System.out.println(s);
}
}
结果:10011011

这里我对于这些方法的总结看起来或许会因为没有文字介绍而显得令人很难受,但其实我都是将具体文字写在代码中的,由于这些方法的调用都极为简单,所以我就不一一详细介绍了。。。。。

2.  JAVA的自动装箱与自动拆箱

java的自动拆箱与自动装箱功能是在jdk 1.5之后才引入的新的功能。

何为自动拆箱与自动装箱嘞?

我还是现将概念扔在最开始的地方吧,总觉得在讲解中穿插概念,会造成一些重要概念的遗漏。。。

自动装箱:基本数据类型,直接转变为引用数据类型。

自动拆箱:引用数据类型转变为基本数据类型。

下面我将通过一些代码以及文字来对其进行解释。

自动装箱:

 Integer  in=1;

我想问一下,我们平常是否见过这种直接可以给对象赋值的操作,或者在我们的印象中这种情况是否合理.我们都知道对象中存储的是堆内存中的地址,所以这其中一定有什么步骤被隐藏了。

     Integer  in=1;
Integer in=Integer.valueOf(1);

下面一行代码便是这个过程的完整代码.也就是说并不存在所谓的给对象赋值这种神仙操作,因为valueOf()方法最终返回的还是一个Integer类的对象。

这便是实现了自动装箱的概念:将基本数据类型直接转换为引用数据类型.

自动拆箱:

public class Demo2 {
public static void main(String[] args) {
Integer in=1;
int i=in+1;
System.out.print(i+“ ”); System.out.println(in);
} } 结果:2    1

这里又出现了一些有违我们以往的所学,一个引用数据类型怎么可能与一个基本数据类型进行加减法的运算嘞,并且我们输出的in不是一个对象吗?所以说这里边就又有门道啦。

        System.out.println(in);
System.out.println(in.intValue()); //这两句话是等价的 int i=in+1; //这两句话是等价的
int i=in.intValue()+1;

若是看代码还是有些模糊的话,那我就再说一下intValue()方法的一些特点吧。

这是API中的介绍很明显通过这个方法就实现了自动拆箱:将引用数据类型直接转为基本数据类型.

再通过比较的方法来加深理解吧!!!

public class Demo2 {
public static void main(String[] args) {
Integer in=500;
Integer in1=500; //这两行边都是自动装箱啦
System.out.println(in==in1);
System.out.println(in.equals(in1)); //这里是自动拆箱
}
}
结果:false
true

首先我们应该清楚equals方法是可以重写的,恰巧在Integer类中又重写了这个方法,所里这里比较的是值而不是地址,那么“==”号嘞?

一定要记住两个对象比较的是地址.

public class Demo2 {
public static void main(String[] args) {
Integer in2=127;
Integer in3=127;
System.out.println(in2==in3);
System.out.println(in2.equals(in3));
}
}
结果:true
true

这里还有个比较奇特的东西,感觉考试会出所以就分析一下吧。

在包装类创建的过程中,若是数值小于128JVM便会认为不需要创建对象,所以这里比较的都是数值的大小。

         感觉很清楚了,哈哈。

3.System类的相关方法及使用

这里我就不用代码来介绍了总感觉不是太过重要,若是加代码的话,有种凑字数的感觉。。

1.exit(int )退出当前虚拟机,所有程序停止,并且非0表示异常终止。

2.gc()命令JVM在内存中回收对象的垃圾,多用于匿名类之类的,这种用一次就不用了,但它还存在与堆内存中的。

3.getProperties()获取当前系统的信息。

4.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)复制一个数组,可以从指定索引处开始,指定索引出结束。

src:源数组    srcPos:从原数组复制的起始索引     dest:目标数组

destPos:目标数组的起始索引    length:复制的长度

4.BigInteger类的介绍

该类主要用于大数运算,即通过将那些我们无法以long型存入的数据,以String等类型存入,帮助我们完成计算。

对于该类,我会简要介绍一下如何通过该类的一些方法来做到四则运算。

1.加法    通过对象.add的方式实现。返回值为BigInteger类型。

2.减法    通过对象.subtract的方式实现。返回值为BigInteger类型。

3.乘法    通过对象.multiply的方式实现。返回值为BigInteger类型。

4.除法     通过对象.divide的方式实现。返回值为BigInteger类型。    注意方法参数列表均为Integer类型对象.

5.BigDecimal类的介绍

首先我们先介绍一下为什么要使用这个类。

通过代码来介绍吧。。

public class Demo1 {
public static void main(String[] args) {
function();
}
public static void function() {
System.out.println(0.01+0.09);
System.out.println(0.99-0.91);
System.out.println(0.5*0.01);
}
}
结果:

0.09999999999999999
      0.07999999999999996
      0.005

这个答案是不是有违常理呀!!

我来解释一下吧。。    其实我们都知道数据在计算机中都是需要先转换为二进制的,并且float类型以及double类型在转换时使用正常转换方式不一样的。

正常的转换方式:  我们以9为例子来说明吧。

9/2余1    4/2余0    2/2余0    1/2余1   所以最后转成的二进制数是1001

那若是0.9嘞?   算法如下:

0.9*2=1.8  取出0.8   1

0.8*2=1.6  取出0.6   1

0.6*2=1.2 取出0.2    1

0.2*2=0.4 取出0.4    0

。。。。。。一直这样算直到没有小数位置。

但是除非你取出的是0.5否则很难就保证精度准确地,这也是为啥第三个输出的是正确的。并且还应该了解计算机对于float类型数据的有效数位是24,对于double类型数据的有效数位是52,因为计算机忽略掉了24位或者是52位之后的数所以误差也就来了。。。

所以我们需要通过BigDecimal类来解决掉这些问题. 好现在来介绍BigDecimal完成四则运算的方法吧。

我会将加法,减法,乘法的代码写到一起,然后将除法的代码隔离出来,作为一个特例。

import java.math.BigDecimal;

public class Demo1 {
public static void main(String[] args) {
function1();
function2();
function3();
}
public static void function1() {
BigDecimal b1=new BigDecimal("0.01");
BigDecimal b2=new BigDecimal("0.09");
BigDecimal b3=b1.add(b2);
System.out.println(b3); //加法
}
public static void function2() {
BigDecimal b1=new BigDecimal("0.01");
BigDecimal b2=new BigDecimal("0.09");
BigDecimal b3=b1.multiply(b2); //乘法
System.out.println(b3);
}
public static void function3() {
BigDecimal b1=new BigDecimal("0.01");
BigDecimal b2=new BigDecimal("0.09");
BigDecimal b3=b1.subtract(b2); //减法
System.out.println(b3);
}
}
结果:    0.01
0.009
-0.08

对于除法的总结:

import java.math.BigDecimal;

public class Demo1 {
public static void main(String[] args) {
function1();
function();
}
public static void function1() {
BigDecimal b1=new BigDecimal("0.58");
BigDecimal b2=new BigDecimal("0.2");
BigDecimal b3=b1.divide(b2);
System.out.println(b3);
}
public static void function() {
BigDecimal b1=new BigDecimal("0.5832");
BigDecimal b2=new BigDecimal("0.2333");
BigDecimal b3=b1.divide(b2,6,BigDecimal.ROUND_HALF_UP );
System.out.println(b3);
}
}
结果: 2.9
2.499876

着重对function()进行介绍

divide(BigDecimal divisor, int scale, RoundingMode roundingMode)

BigDecimal   divisor:  指的是被除数

int scale:  指的是保留几位小数

RoundingMode  roundingMode:  指的是保留模式。。。。。。

其实到最后还有一些东西,就是对于BigDecimal类是否存在自动装箱与拆箱的思考,我没有写出来,我会自己把它搞懂得(哈哈)。。

6.结束

在做总结的过程中,其实也不算很枯燥,只是一直会不断发现新的问题,我对于某些地方的总结真的是还不够,但是仅仅通过本篇我便清楚的了解了自动装箱与自动拆箱以及数据精度受损的真正原因。。。在解决问题的过程中我是享受其中的。

JAVA常用API的总结(2)的更多相关文章

  1. Java 常用API(二)

    目录 Java 常用API(二) 1. Object类 2. Date类 概述 构造方法和成员方法 3. DateFormat类 概述 SimpleDateFormat类 练习 4. Calendar ...

  2. Java 常用API(一)

    目录 Java 常用API(一) 1. Scanner类 引用类型的一般使用步骤 Scanner的使用步骤 例题 2. 匿名对象 概述 匿名对象作为方法的参数 匿名对象作为方法的返回值 3. Rand ...

  3. Java常用API(Math类)

    Java常用API(Math类) Math类的作用 java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数.类似这样的工具 类,其所有方法均为静态方法,并且 ...

  4. Java常用API(Arrays类)

    Java常用API(Arrays类) 什么是Arrays类? java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等.其所有方法均为静态方法,调用起来 非常简单. 这里我们 ...

  5. Java常用API(String类)

    Java常用API(String类) 概述: java.lang.String 类代表字符串.Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例 1. ...

  6. Java常用API(ArrayList类)

    Java常用API(ArrayList类) 我们为什么要使用ArrayList类? 为了更加方便的储存对象,因为使用普通的数组来存储对象太过麻烦了,因为数组的一个很大的弱点就是长度从一开始就固定了,所 ...

  7. Java常用API(Random类)

    Java常用API(Random类) Random:是一个用于生成随机数的类 构造方法 public Random() :创建一个新的随机数生成器. 返回随机数的方法 public int nextI ...

  8. Java常用API(Scanner类)

    Java常用API( Scanner类)1 1.Scanner类 首先给大家介绍一下什么是JavaAPI API(Application Programming Interface),应用程序编程接口 ...

  9. java基础3.0:Java常用API

    本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...

  10. java常用API的总结(1)

    本篇是对于这一段时间以来接触到的常用api的一些总结,便于以后的查阅.... 一.正则表达式 对于正则表达式,我的感觉就是当我们在做某些题的时候正则表达式会省去我们很多的时间,并且正则表达式的使用格式 ...

随机推荐

  1. redis 系列7 数据结构之跳跃表

    一.概述 跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的.在大部分情况下,跳跃表的效率可以和平衡树(关系型数据库的索引就是平衡树 ...

  2. C#版 - 226. Invert Binary Tree(剑指offer 面试题19) - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - 2 ...

  3. 一条命令解决mac版本python IDLE无法输入中文问题

    安装完Python通常自动就有了一个简易的集成环境IDLE,但在mac上,无法在IDLE中使用中文. 通常故障有两种情况: 在IDLE中,中文输入法根本无法工作,不会弹出输入框,所有的输入都被当做英文 ...

  4. Python进阶:自定义对象实现切片功能

    2018-12-31 更新声明:切片系列文章本是分三篇写成,现已合并成一篇.合并后,修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔接做了大量改动.原系列的单篇就不删除了,毕竟也是 ...

  5. angr进阶(4)从任意位置开始

    从程序的任意位置开始可以大大的减少测试的时间,使用的方法是控制程序运行到某时刻的寄存器的值来进行的.asisctffinals2015_fake p = angr.Project("fake ...

  6. selenium和webdriver区别

    接触selenium大概半年时间了.从开始的预研,简单的写个流程到后期的自动化框架的开发,因为本人不属于代码方面的大牛,一直的边研究边做.逐步深入学习.近期发现自己对本身selenium的发展还存在困 ...

  7. 关于跨DB增量(增、改)同步两张表的数据小技巧

    有些场景下,需要隔离不同的DB,彼此DB之间不能互相访问,但实际的业务场景又需要从A DB访问B DB的情形,这时怎么办?我认为有如下常规的三种方案: 1.双方提供RESET API,需要访问不同DB ...

  8. vb.net MakeWParam

    Private Function MakeWParam(loWord As Integer, hiWord As Integer) As Integer ) End Function

  9. WPF TextBox/TextBlock 文本超出显示时,文本靠右显示

    文本框显示 文本框正常显示: 文本框超出区域显示: 实现方案 判断文本框是否超出区域 请见<TextBlock IsTextTrimmed 判断文本是否超出> 设置文本布局显示 1. Fl ...

  10. WEB项目挂载到IIS session过期

    莫名丢失问题: 1.可能是因为系统内部连续的抛出了5次以上的异常 导致进程重启(当前所有在线用户) 2.IIS6 以上默认配置进程,session存在进程内其实是在W3wp.exe中这个进程不稳定,在 ...