java API(1)
什么是 API ?
百度百科:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
lang包
- lang包中提供了几乎每个应用程序都会用的基本类,例如:包装类,Object,Math,System,String等。
- lang包在使用时会自动导入,因此不需要手动使用import进行导入。
System类
这个类中提供了很多类属性和类方法,用于实现每个程序最基本的操作
- System.out: 标准输出流
- System.err:错误信息输出流
- System.in:标准输入流
- System.exit(0):退出java虚拟机
- System.currentTimeMillis:获得当前时间的毫秒值
- System.arrayCopy():复制数组元素的方法
包装类
- java为每个基本数据类型都提供了一个对应的包装类;Integer,Short,Byte,Long,Float,Double,Boolean,Character;
- 每个包装类都提供了用于处理此类型的多个方法
- 基本数据类型和包装类可以直接转换,这个过程叫自动拆装包
Integer常用方法
- valueOf()
- toString()
- parsetInt()
- floatValue()
- byteValue()
- shortValue()
引用数据类型之间的转换
- 向上转型:有继承关系,直接赋值即可
- 向下转型: 有继承关系,需要强转,可能造成ClassCastException
- 利用方法:可以无继承关系,如Integer.valueOf()
Math
这个类有包含了很多关系数学操作的方法(三角函数,指数,对象,基本);
这个类不能实例化,所有方法都有静态的
Object
所有类的父类,定义了所有类都实现的方法;
class Animal{
}
等价于下面这种写法:
class Animal extends Object{
}
Object中的方法共有11个:
- clone():克隆
- equals():比较是否相等
- toString():转换成String
- hashcode():生成哈希码
- fanalize():垃圾回收前执行的代码
- getClass():获得当前对象的类对象
- wait()
- notify()
- notifyAll()
toString方法
将对象转成字符串,通常的写法是将所有属性值都连成一个完整的字符串。
当使用System.out.println(对象);会自动调用对象的toString()方法
hashcode
hash算法是将长度不一的数值转成长度相等的数值的一种算法
hashCode 的常规协定是:
- 在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
- 如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
- 如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。
equals方法
指示其他某个对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:
- 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
- 对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
- 传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
- 一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
- 对于任何非空引用值 x,x.equals(null) 都应返回 false。
String
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。 字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
如何创建一个字符串:
最常用的 :字面值 String str=“hello world”;
构造方法。
字符串的方法
- charAt():根据索引获得字符
- length():获得字符数
- getBytes():获得字节数组
- compareTo():与另外一个字符串比较大小
- contains(): 判断是否包含另一个子串
- equals():判断两个字符串的值是否相等
- startsWith():是否以某个字符串开头
- endsWith():是否以某个字符串结尾
- replace():替换原有字符串,并返回新的
- replaceAll():替换原有字符串,并返回新的(可以用正则表达式)
- replaceFirst():替换第一次出现的原有字符串,并返回新的
- isEmpty():判断是否是空串
- substring():根据索引获得子串
- split():根据字符进行拆分子符串
- trim():去除左右空格
- valueOf():将其它类型的数据转成String
字符串池
因为字符串是不可变的,为了提升性能;java对字符串做了特殊的处理,如果使用"字符串"形式定义一个字符串,那么将会在字符串池(String Pool)定义字符串(若字符串池中已经存在该字符串,返回引用实例,不存在,实例化该字符串并放入池中),而不是在堆中每次创建新的字符串;
字符串是方法区的一个组成部分。
StringBuffer
线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
特点:支持链式编程;适合做CURD操作
方法:
- append()
- insert()
- delete()
- replace()
- substring
String与StringBuffer的转换:
- String->StringBuffer : new StringBuffer(String);
- StringBuffer->String : StringBuffer.toString();
StringBuilder
与StringBuffer作用相同,只是它是线程不安全的