Java笔记-Object,String,Math,BigInteger类

一 项目的jar包的导入与导出

    jar包是一个可以包含许多.class文件的压缩文件。我们可以将一个jar包加入到项目的依赖中,从而该项目可以使用该jar下的所有类;也可以把项目中所有的类打包到指定的jar包,提供给其他项目使用。

1.1导出jar包

    即把项目中所有类,打包到指定的jar包中,步骤如下图:

    Java笔记-Object,String,Math,BigInteger类

1.2导入jar包

    即把指定的jar包,加入到指项目中,提供给项目使用。

    导入jar包的过程是将jar包加入到项目的.classpath文件中去,让项目识别,便可以使用jar包中所有的.class文件类。以下是加入步骤:

         1:项目根文件夹下创建lib文件夹,用于统一管理所有的jar文件

         2:把jar文件复制到lib文件夹目录中

         3:右键点击jar文件,点击Build Path,选择Add to Build Path,此时查看项目根文件夹下的.classpath文件,发现新加入的jar包路径被配置到了该文件中。说明可以使用jar包中所有类了。

    Java笔记-Object,String,Math,BigInteger类

二 Java的API及Object类

2.1Java的API

    Java 的API(API: Application(应用) Programming(程序) Interface(接口))

    Java API就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。

    在JDK安装目录下有个src.zip文件,这个文件解压缩后里面的内容是所有Java类的源文件。可以在其中查看相对应的类的源码。

    我们在每次查看类中的方法时,都打开源代码进行查看,这种方式过于麻烦。其实,我们可以通过查帮助文档的方式,来了解Java提供的API如何使用。如下图操作:查找Object类

    Java笔记-Object,String,Math,BigInteger类

2.2 Object类

    Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是Object。在Object类众多方法中,我们先学习equals方法与toString方法。

2.3 equals方法

    equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。

    在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较。如下代码演示:

        Java笔记-Object,String,Math,BigInteger类

注意:在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。

2.4 toString方法

    toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型[email protected]+内存地址值

    由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。

         Java笔记-Object,String,Math,BigInteger类

三 String类

3.1 String类的概述

    查阅API中的String类的描述,发现String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

    字符串是常量;它们的值在创建之后不能更改,这是什么意思呢?其实就是说一旦这个字符串确定了,那么就会在内存区域中就生成了这个字符串。字符串本身不能改变,但str变量中记录的地址值是可以改变的

    字符串有大量的重载的构造方法。通过String类的构造方法可以完成字符串对象的创建,那么,通过使用双引号的方式创建对象与new的方式创建对象,有什么不同呢?看如下程序与图解:

        Java笔记-Object,String,Math,BigInteger类

    上图中s3和s4的创建方式有什么不同呢?

        s3创建,在内存中只有一个对象。这个对象在堆的一小部分区域叫字符串常量池中

        s4创建,在内存中有两个对象。一个new的对象在堆中,一个字符串本身对象,在字符串常量池中

    再举一个例子:

    Java笔记-Object,String,Math,BigInteger类

    注意:String类的equals()方法已经重写了,比较两个字符串内容是否一样;若用==则比较的是对象的地址。

3.2 String类方法

    String类中有很多的常用的方法,我们在学习一个类的时候,不要盲目的把所有的方法尝试去使用一遍,这时我们应该根据这个对象的特点分析这个对象应该具备那些功能,这样大家应用起来更方便。

    1)字符串长度:length()

    2)获取部分字符串:subString(int beginIndex);    subString(int beginIndex);

    3)部分其他常见方法:

 char
charAt(int index)
          返回指定索引处的 char 值。
int
compareTo(String anotherString)
          按字典顺序比较两个字符串。
 int compareToIgnoreCase(String str)
          按字典顺序比较两个字符串,不考虑大小写。
 String concat(String str)
          将指定字符串连接到此字符串的结尾。
 boolean
contains(CharSequence s)
          当且仅当此字符串包含指定的 char 值序列时,返回 true。
boolean endsWith(String suffix)
          测试此字符串是否以指定的后缀结束。
 boolean equals(Object anObject)
          将此字符串与指定的对象比较。
 boolean
equalsIgnoreCase(String anotherString)
          将此 String 与另一个 String 比较,不考虑大小写。
int hashCode()
          返回此字符串的哈希码。
 int indexOf(int ch)
          返回指定字符在此字符串中第一次出现处的索引。
 int
indexOf(int ch, int fromIndex)
          返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
 int indexOf(String str)
          返回指定子字符串在此字符串中第一次出现处的索引。
 int indexOf(String str, int fromIndex)
          返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
boolean
isEmpty()
          当且仅当 length()0 时返回 true
boolean
matches(String regex)
          告知此字符串是否匹配给定的正则表达式
String
replace(char oldChar, char newChar)
          返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
 String[]
split(String regex)
          根据给定正则表达式的匹配拆分此字符串。
 String[] split(String regex, int limit)
          根据匹配给定的正则表达式来拆分此字符串。
 boolean startsWith(String prefix)
          测试此字符串是否以指定的前缀开始。
 boolean startsWith(String prefix, int toffset)
          测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
char[] toCharArray()
          将此字符串转换为一个新的字符数组。
 String
toLowerCase()
          使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
 String toLowerCase(Locale locale)
          使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。
 String toString()
          返回此对象本身(它已经是一个字符串!)。
 String toUpperCase()
          使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
 String toUpperCase(Locale locale)
          使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。
 String trim()
          返回字符串的副本,忽略前导空白和尾部空白。

 3.3例子:查询长字符串中,某个单词出现的次数

思路:1.在大串中,查找小串出现的位置,出现了就次数+1

          2.在上次小串出现位置的后面继续查找,需要更改大串的内容为上次未查询到的字符串。

          3.回到第一步,继续查找小串出现的位置,直到大串中查询不到小串为止

    Java笔记-Object,String,Math,BigInteger类    

四 字符串缓冲区

4.1 StringBuffer类

    在学习String类时,API中说字符串缓冲区支持可变的字符串,什么是字符串缓冲区呢?接下来我们来研究下字符串缓冲区。

    查阅StringBuffer的API,StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。

    原来StringBuffer是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。

4.2 StringBuffer类常用方法

    注意:append、delete、insert、replace、reverse方法调用后,返回值都是当前对象自己,所以说,StringBuffer它可以改变字符序列的长度和内容。

    Java中的(start,end),获取一部分数组或字符串内容时,范围都是start到end-1

    toString()是将可变的字符串缓冲区对象变成不可变的String对象。

    Java笔记-Object,String,Math,BigInteger类

    Java笔记-Object,String,Math,BigInteger类

4.3 StringBuilder类

    还有一个StringBuilder类,它也是字符串缓冲区,StringBuilder与它和StringBuffer的有什么不同呢?

    我们阅读StringBuilder的API说明发现,它也是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快

    在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的。

 如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

4.4 总结

    String:适用于少量的字符串操作的情况

    StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

    StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

五 基本类型包装类

    在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的。而程序开发中,我们需要把字符串数据,根据需求转换成指定的基本数据类型,如年龄需要转换成int类型,考试成绩需要转换成double类型等。那么,想实现字符串与基本数据之间转换怎么办呢?

    Java中提供了相应的对象来解决该问题,基本数据类型对象包装类:java将基本数据类型值封装成了对象。封装成对象有什么好处?可以提供更多的操作基本数值的功能。

8种基本类型对应的包装类:

    Java笔记-Object,String,Math,BigInteger类

自动装箱、自动拆箱:

    自动装箱:基本数值转成对象(int à Integer)

    自动拆箱:对象转成基本数值(Integer à int)

常用方法:

    public int parseInt(String str):把字符串转成基本类型int

    public static String toString(int x):把基本类型int转成字符串

    public static Integer valueOf(int x):把基本类型字符串转成Integer对象

    public int intValue():以int类型返回该包装类对象的值

六  System类,Arrays类与Math类

6.1 System类

    System类: 系统属性信息工具类。System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象。System类中的都是static方法,类名访问即可。以下是常见方法:   

    public static long currentTimeMillis():获取当前系统时间与1970年01月01日00:00点之间的毫秒差值

    public staticvoid exit(int status):用来结束正在运行的Java程序。参数传入一个数字即可。通常传入0记为正常状态,其他为异常状态

    public static void gc():用来运行JVM中的垃圾回收器,完成内存中垃圾的清除。

    public static StringgetProperties():用来获取指系统属性信息

6.2 Arrays类

    Arrays类:数组操作工具类。

    public staticvoid sort方法,用来对指定数组中的元素进行排序(元素值从小到大进行排序)

    public staticString toString方法,用来返回指定数组元素内容的字符串形式

    public staticvoid binarySearch方法,在指定数组中,查找给定元素值出现的位置。若没有查询到,返回位置为-插入点-1。要求该数组必须是个有序的数组

6.3 Math类

    Math类:数学运算工具类。

    abs方法,结果都为正数

    ceil方法,结果为比参数值大的最小整数的double值

    floor方法,结果为比参数值小的最大整数的double值

    max方法,返回两个参数值中较大的值

    min方法,返回两个参数值中较小的值

    pow方法,返回第一个参数的第二个参数次幂的值

    round方法,返回参数值四舍五入的结果

    random方法,产生一个大于等于0.0且小于1.0的double小数

七 大数据运算

7.1 BigInteger

     Java中long型为最大整数类型,对于超过long型的数据如何去表示呢?

    在Java的世界中,超过long型的整数已经不能被称为整数了,它们被封装成BigInteger对象在BigInteger类中,实现四则运算都是方法来实现,并不是采用运算符

    Java笔记-Object,String,Math,BigInteger类

7.2 BigDecimal

    在程序中执行下列代码,会出现什么问题?

    Java笔记-Object,String,Math,BigInteger类       

     double和float类型在运算中很容易丢失精度,造成数据的不准确性,Java提供BigDecimal类可以实现浮点数据的高精度运算

          Java笔记-Object,String,Math,BigInteger类

    对于浮点数据的除法运算,和整数不同,可能出现无限不循环小数,因此需要对所需要的位数进行保留和选择舍入模式。

        Java笔记-Object,String,Math,BigInteger类

          Java笔记-Object,String,Math,BigInteger类