这篇是常用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. 带着萌新看springboot源码04

    继续开头说些废话,我也不知道什么鬼,每次写着写着经常会写到其他地方去了,太容易分神了. 这次说一下springboot对于springmvc的大概整个流程,以请求动态网页为例 . 1.梳理一下spri ...

  2. java.lang.OutOfMemoryError: unable to create new native thread问题排查以及当前系统最大进程数量

    1. 问题描述 线上某应用出问题,查看日志 这一组服务器是2台,每台都有.配置为64G,使用7G,空余内存非常多 2. 问题排查 环境变化:程序迁移到新机器,新机器是CentOS 7,程序运行账号由原 ...

  3. JVM(二)Java虚拟机组成详解

    导读:详细而深入的总结,是对知识"豁然开朗"之后的"刻骨铭心",想忘记都难. Java虚拟机(Java Virtual Machine)下文简称jvm,上一篇我 ...

  4. Linux之部署前后端分离项目

    首先得看我前两个博客,把python3,虚拟环境,mariadb数据库,redis数据库,nginx安装好. 一.创建一个虚拟环境 1,创建虚拟环境 mkvirtualenv zijin #创建了一个 ...

  5. Asp.Net路由重写为用户名或者ID

    有一个需求如下:指定某个Area的路由(Area:Wx)在其后面添加用户名或者ID作为URL参数,即像下面的样子: /Wx/xiaoming/ /Wx/xiaoming/photo /Wx/xiaom ...

  6. .Net Framework 4.5.1 ASP.NET MVC 5 下新建视图报“错误 运行所选代码生成器时出错 无法检索元数据 没有为该对象定义无参数构造函数”

    当在控制器中新建视图的时候,选择的视图界面如下: 执行添加后报如下错误: 错误的内容为: 错误运行所选代码生成器时出错 无法检索"XXX"的元数据没有为该对象定义无参数构造函数 U ...

  7. Windows系统 应用或游戏 打开出现0xc000007b错误 解决方法

    1.使用directX修复工具(推荐) 标准版 增强版 标准版备用地址 增强版备用地址 2. 重新安装DirectX 9.0 安装包(安装包体积大) 微软官方离线安装包 摘录CSDN博客 运行游戏时出 ...

  8. 博弈论进阶之Every-SG

    Every-SG 给定一张无向图,上面有一些棋子,两个顶尖聪明的人在做游戏,每人每次必须将可以移动的棋子进行移动,不能移动的人输 博弈分析 题目中的要求实际是"不论前面输与否,只要最后一个棋 ...

  9. java新知识系列 一

    内联函数: 所谓内联函数就是指函数在被调用的地方直接展开,编译器在调用时不用像一般函数那样,参数压栈,返回时参数出栈以及资源释放等,这样提高了程序执行速度. 对应Java语言中也有一个关键字final ...

  10. angular反向代理配置

    Angular-cli 是基于webpack 的一套针对提升angular开发体验的命令行工具. 开发vue的时候,基于webpack的时候当时配置一个反向代理以完全实现前后端分离的体验,既然webp ...