这篇是常用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. dotnet core 开发无缝兼容Http和Websocket协议的接口服务

    在应用接口开发中往往要针对不同协义开发相应的代理服务,但对于Websocket和http这两种协议来说就有些不同,从实现上来看Websocket可以说是Http的升级子协议, 两者在协议处理上基本一致 ...

  2. Too many authentication failures for xxxx_username

    解释 这个报错通常是因为多个ssh key 验证,key太多了导致服务器拒绝接受认证请求. 可以通过 -v 参数,输出详细的过程.你会发现你提供的认证key,服务器拒绝链接,并提示异常:"T ...

  3. centos7忘记root密码

    开机时狂点方向键下(Windows还原习惯了),或者狂点别的键.目的为了不让它进入系统. 方向键移动光标定位在第一行,按e编辑它. 在新界面找到linux16开头的行.→光标到  ro    改成rw ...

  4. ES6躬行记(19)——生成器

    根据ES6制订的标准自定义迭代器实现起来比较复杂,因此ES6又引入了生成器的概念,生成器(Generator)是一个能直接创建并返回迭代器的特殊函数,可将其赋给可迭代对象的Symbol.iterato ...

  5. [51nod1355] 斐波那契的最小公倍数

    Description 给定 \(n\) 个正整数 \(a_1,a_2,...,a_n\),求 \(\text{lcm}(f_{a_1},f_{a_2},...,f_{a_n})\).其中 \(f_i ...

  6. Perl IO:read()函数

    read()函数 read()函数用于从文件句柄中读取指定字节数的数据并写入到一个标量中.如果文件句柄是以Unicode方式打开的,则表示读取指定字符数而非字节数. 有两种read方式: read F ...

  7. 【.NET Core项目实战-统一认证平台】第十五章 网关篇-使用二级缓存提升性能

    [.NET Core项目实战-统一认证平台]开篇及目录索引 一.背景 首先说声抱歉,可能是因为假期综合症(其实就是因为懒哈)的原因,已经很长时间没更新博客了,现在也调整的差不多了,准备还是以每周1-2 ...

  8. C# 跨进程 设置窗口owner

    窗口间跨进程通信 1. 发送方 public const int WM_InsertChart_Completed = 0x00AA; //查找窗口 [DllImport("User32.d ...

  9. Java开发笔记(十二)布尔变量论道与或非

    在编程语言的设计之初,它们除了可以进行数学计算,还常常用于逻辑推理和条件判断.为了实现逻辑判断的功能,Java引入了一种布尔类型boolean,用来表示“真”和“假”.该类型的变量只允许两个取值,即t ...

  10. Hibernate框架笔记03表操作多对多配置

    目录 1. 数据库表与表之间的关系 1.1 一对多关系 1.2 多对多关系 1.3 一对一关系[了解] 2. Hibernate的一对多关联映射 2.1 创建一个项目,引入相关jar包 2.2. 创建 ...