一 项目的jar包的导入与导出
jar包是一个可以包含许多.class文件的压缩文件。我们可以将一个jar包加入到项目的依赖中,从而该项目可以使用该jar下的所有类;也可以把项目中所有的类打包到指定的jar包,提供给其他项目使用。
1.1导出jar包
即把项目中所有类,打包到指定的jar包中,步骤如下图:
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的API及Object类
2.1Java的API
Java 的API(API: Application(应用) Programming(程序) Interface(接口))
Java API就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。
在JDK安装目录下有个src.zip文件,这个文件解压缩后里面的内容是所有Java类的源文件。可以在其中查看相对应的类的源码。
我们在每次查看类中的方法时,都打开源代码进行查看,这种方式过于麻烦。其实,我们可以通过查帮助文档的方式,来了解Java提供的API如何使用。如下图操作:查找Object类
2.2 Object类
Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是Object。在Object类众多方法中,我们先学习equals方法与toString方法。
2.3 equals方法
equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。
子类重写equals方法根据对象的属性值进行比较。如下代码演示:
注意:在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。
2.4 toString方法
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。
三 String类
3.1 String类的概述
查阅API中的String类的描述,发现String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改,这是什么意思呢?其实就是说一旦这个字符串确定了,那么就会在内存区域中就生成了这个字符串。
字符串本身不能改变,但
str
变量中记录的地址值是可以改变的。
字符串有大量的重载的构造方法。通过String类的构造方法可以完成字符串对象的创建,那么,通过使用双引号的方式创建对象与new的方式创建对象,有什么不同呢?看如下程序与图解:
上图中s3和s4的创建方式有什么不同呢?
s3创建,在内存中只有一个对象。这个对象在堆的一小部分区域叫字符串常量池中
s4创建,在内存中有两个对象。一个new的对象在堆中,一个字符串本身对象,在字符串常量池中
再举一个例子:
注意:String类的equals()方法已经重写了,比较两个字符串内容是否一样;若用==则比较的是对象的地址。
3.2 String类方法
String类中有很多的常用的方法,我们在学习一个类的时候,不要盲目的把所有的方法尝试去使用一遍,这时我们应该根据这个对象的特点分析这个对象应该具备那些功能,这样大家应用起来更方便。
1)字符串长度:length()
2)获取部分字符串:subString(int beginIndex); subString(int beginIndex);
3)部分其他常见方法:
|
返回指定索引处的 |
|
按字典顺序比较两个字符串。 |
|
按字典顺序比较两个字符串,不考虑大小写。 |
|
将指定字符串连接到此字符串的结尾。 |
|
当且仅当此字符串包含指定的 char 值序列时,返回 true。 |
|
测试此字符串是否以指定的后缀结束。 |
|
将此字符串与指定的对象比较。 |
|
将此 |
|
返回此字符串的哈希码。 |
|
返回指定字符在此字符串中第一次出现处的索引。 |
|
返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。 |
|
返回指定子字符串在此字符串中第一次出现处的索引。 |
|
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 |
|
当且仅当 length() 为 0 时返回 true。 |
|
告知此字符串是否匹配给定的正则表达式。 |
|
返回一个新的字符串,它是通过用 |
|
根据给定正则表达式的匹配拆分此字符串。 |
|
根据匹配给定的正则表达式来拆分此字符串。 |
|
测试此字符串是否以指定的前缀开始。 |
|
测试此字符串从指定索引开始的子字符串是否以指定前缀开始。 |
|
将此字符串转换为一个新的字符数组。 |
|
使用默认语言环境的规则将此 |
|
使用给定 |
|
返回此对象本身(它已经是一个字符串!)。 |
|
使用默认语言环境的规则将此 |
|
使用给定 |
|
返回字符串的副本,忽略前导空白和尾部空白。 |
3.3例子:查询长字符串中,某个单词出现的次数
思路:1.在大串中,查找小串出现的位置,出现了就次数+1
2.在上次小串出现位置的后面继续查找,需要更改大串的内容为上次未查询到的字符串。
3.回到第一步,继续查找小串出现的位置,直到大串中查询不到小串为止
四 字符串缓冲区
4.1 StringBuffer类
字符串缓冲区支持可变的字符串,什么是字符串缓冲区呢?接下来我们来研究下字符串缓冲区。
StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
原来StringBuffer是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。
4.2 StringBuffer类常用方法
注意:append、delete、insert、replace、reverse方法调用后,返回值都是当前对象自己,所以说,StringBuffer它可以改变字符序列的长度和内容。
Java中的(start,end),获取一部分数组或字符串内容时,范围都是start到end-1
toString()是将可变的字符串缓冲区对象变成不可变的String对象。
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将基本数据类型值封装成了对象。封装成对象有什么好处?可以提供更多的操作基本数值的功能。
8种基本类型对应的包装类:
自动装箱、自动拆箱:
自动装箱:基本数值转成对象(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类中,实现四则运算都是方法来实现,并不是采用运算符。
7.2 BigDecimal
在程序中执行下列代码,会出现什么问题?
double和float类型在运算中很容易丢失精度,造成数据的不准确性,Java提供BigDecimal类可以实现浮点数据的高精度运算。
对于浮点数据的除法运算,和整数不同,可能出现无限不循环小数,因此需要对所需要的位数进行保留和选择舍入模式。