API
1、概念
API:(Application Programming Interface),引用程序接口,是一种计算机接口,它定义多种软件中介之间的交互,以及可以进行的调用(call)或请求(request)的种类,如何进行调用或发出请求,应使用的数据格式,应村寻的惯例等。它还可以提供扩展机制,以便用户可以通过各种方法对现有功能进行不同程度的扩展。一个API可以是完全定制的,针对某个组件的,也可以是基于行业标准设计的以确保互操作性。通过信息隐藏,API实现模块化编程,从而允许用户独立地使用接口。
简要的说:你写一个demo,想要加入某些功能,可能是数组、集合、字符串甚至是文件,又想通过某些方法对这些数据进行操作,又不想一步一步的把这些方法的底层代码写一遍,这时候你就需要去了解对应的API,以便于解决对应的问题。
2、JAVA常用API
2.1、java.lang.Object
2.2.1 概念
所有对象的顶级父类,存在于java.lang包中,这个包不需要我们手动导包。
2.2.2 常用方法
1. boolean equals(Object obj) 指示其他某个对象是否和此对象“相等”
2. int hashcode(); 返回该对象的哈希码值
什么是hash code
hash code是一种编码方式,在Java中,每个对象都会有一个hashcode,Java可以通过这个hashcode来识别一个对象。至于hashcode的具体编码方式,比较复杂(事实上这个编码是可以由程序员通过继承和接口的实现重写的),可以参考数据结构书籍。而hashtable等结构,就是通过这个哈希实现快速查找键对象。这是他们的内部联系,但一般编程时无需了解这些,只要知道hashtable实现了一种无顺序的元素排列就可以了。.
hash code/哈希值/散列值
两个对象值相同(x.equals(y) == true),不一定相等。
对象相同hash值一定相同,hash值相同对象不一定相同
3. String toString(); 返回该对象的字符串表示;
4. protected void finalize();当垃圾回收器确定不存在对该对象更多的引用时,由对象的垃圾回收器调用此方法
2.2、String
字符串对象
2.2.1 概念
string是C++、java、VB等编程语言中的字符串,字符串是一个特殊的对象,属于引用类型。 在java、C#中,String类对象创建后,字符串一旦初始化就不能更改,因为string类中所有字符串都是常量,数据是无法更改,由于string对象的不可变,所以可以共享。对String类的任何改变,都是返回一个新的String类对象。 C++标准库中string类以类型的形式对字符串进行封装,且包含了字符序列的处理操作。
String字符串是一个对象,不是对象你怎么使用”.meshtod();“ 显然基本类型无法直接调用方法,因为它不是一个对象
因为String时引用类型,实际上是一个对象,因此不能仅仅使用"=="比较,而是需要使用equals();方法比较String的类容
2.2.2 String对象创建
- 如果时第一次使用字符串,java会在字符串常量池创建一个对象
- 再次使用相同类容时,会直接访问常量池中的存在
- 创建方式一:new String(char[])
字符串底层维护了一个char[]
char[] c={'a','学','习','b'}
String d=new String(c);
System.out.println(d);
//结果为a学习b
- 创建方式二:直接创建
常量池里直接常见对象(本质还是char[]),再次使用相同类容,会去常量池中找到已经存在的对象,不会新建
String a="学习使我快乐";
2.2.3 字符串的直接拼接
- 利用String类,在做字符串拼接的过程效率极其低下
- 每一次的拼接都会产生新的对象,而不是拼接完之后产生对象
public class test1111 {
public static void main(String[] args) {
String a="aaa";
String b="bbb";
String c="ccc";
String d=a+b+c;
System.out.println(d);
//输出结果是--aaabbbccc
}
}
2.2.4 String常用的方法
- char charAt(int index)—返回指定索引出的char值(字符串底层是char[],所以存在索引)
- int length()—返回此字符串的长度
- boolean equals()–将此字符串和指定的对象比较。当且仅当该对象不为null,并且是与此对象表示相同字符序列的String对象时,结果才是true
- boolean startsWith()----测试此字符串是否以指定的前缀开始
- boolean endsWith()-----测试此字符串是否以指定的后缀结束
- String[] split()-----根据给定的正则表达式的匹配拆分此字符串,返回的时一个数组
- String trim()-----返回字符串的副本,忽略签到空白和尾部空白
- boolean isEmpty()—当且仅当length()为0时返回true
- byte[] getBytes()—使用平台的默认字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中
- int indexof()—返回指定字符串中第一次出现字符或者字符串的索引
- int lastIndexOf()–返回指定字符串最后一次出现字符或者字符串的索引
- String substring()—根据条件返回一个子字符串,也就是原先字符串的一部分,根据这个方法结合indexof和lastindexof犯法,可以进行文件类型的判断
了解正则表达式
概述:正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
详情:正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
2.3 StringBuilder和StringBuffer
transient关键字只能修饰变量,不能修饰类和方法,被transient
关键字修饰的变量都不能被序列化,静态变量无论是否被transient修饰
都不能序列化
关于transient和序列化有一个非常好的博客点击查看
2.3.1 StringBuffer和StringBuilder的特点
- 封装了char[]数组
- 是可变的字符序列
- 提供了一组可以对字符内容修改的方法
- 常用append()方法完成字符串的链接
- 内部字符数组默认初始容量是16;initial capacity of characters
- 如果大于16会尝试扩容,新数组的大小,原来的2倍+2,容量如果还不够,直接扩容到需要的容量大小–newCapacity=value.length*2+2;
- StringBuffer1.0出道,线程安全,StringBuilder1.5出道,线程不安全
2.3.2 StringBuffer
- StringBuffer对象代表一个字符序列,当一个SringBuffer对象被创建后,通过StringBuffer提供的append(),insert(),reverse(),setCharAt(),setLength()等方法可以改变这个字符串的序列。一旦通过StringBuilder生成一个最终想要的字符串就可以调用它的toString()方法将其转换为一个String对象
- StringBuffer线程安全的原因就是方法上sychronized同步锁,加锁实现了线程安全,但是同样的会降低效率
2.3.3 StringBuilder
- StringBuilder也代表可变字符串对象,实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法基本也相同。不同的是StringBuffer是线程安全的,StringBuilder则没有实现线程安全功能,所以StringBuilder性能略高。
2.3.4 StringBuffer和StringBuilder常用的函数
StringBuffer和StringBuilder和有许多方法和String一样,这是因为最后会执行toString()方法,变为字符串
- Stringbuffer append();将参数追加到序列
- String toString()—返回此序列中数据的字符串表示形式
- StringBuffer insert()-----在此序列中插入参数
- char charAt(int index)返回此序列中指定索引出的char值
- StringBuilder reverse() 将此字符序列用其反转形式取代(这个和序列化无关,只是把数组的排序完全反转)
2.3.4 StringBuffer和StringBuilder的拓展
区别:
1、 在线程安全上,
–StringBuffer是旧版本就提供的,线程安全的。@since JDK1.0
–StringBuilder是jdk1.5后产生,线程不安全的。@since 1.5
2、 在执行效率上,StringBuilder > StringBuffer > String
3、 源码体现:本质上都是在调用父类抽象类AbstractStringBuilder来干活,只不过Buffer把代码加了同步关键字,使得程序可以保证线程安全问题。
2.4、包装类
2.4.1 与基本类型的对应关系
基本类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
2.4.2 java.lang.Number的方法
- byte byteValue()—以byte形式返回指定数值
- abstract double doubleValue()–以double形式返回指定的数值
- abstract float floatValue()–以float的形式返回指定的数值
- abstract short shortValue()—以short形式返回指定的数值
- abstract long longvalue()—以long形式返回指定的数值
- Number提供个各种获取值的方式,完成了强转,把包装类转换为了基本类型的数据
2.4.3 Integer
- 创建对象(包装类是一个对象,因为是对象才有方法可调用)
new Integer(5);创建新对象
Integer.valueOf(5);没有创建新对象
- 注:
在Integer类中,包含256个Interger缓存对象,范围是-128到127.
在使用valueOf()时,如果时指定范围内的值,访问缓存对象,而不是新建对象,如果时指定范围外的值,直接新建对象。
public class test1112 {
public static void main(String[] args) {
Integer a=new Integer(5);
Integer b = Integer.valueOf(5);
Integer c = Integer.valueOf(5);
System.out.println(a==b);//false
System.out.println(b==c);//true
System.out.println(a.equals(b));//true
}
}
2.4.4 Double
- 创建对象
- new DOuble(3.14)与Double.valueOf(3.14)没有区别,因为没有缓存对象
2.4.5 包装类常用方法
- boolean equals() 比较对象的内容,而非对象本身
- int hashCode() 返回此对象的hash码
- static int paeseInt() j将字符串转换为基本数据类型,Integer.parsh("-9")
- static String toBinaryString(基本数据类型) 以二进制整数形式返回一个整数字符串
- static String toOctalString(基本数据类型),以八进制整数形式返回一个整数字符串
- static String toHexString(基本数据类型),以十六进制整数形式返回一个整数字符串
- int compareTo(Integer antherInteger) 如果该等于返回0,如果大于返回大于零的值,如果小于返回小于零的值
- static Integre decode(string) 将String解码为包装类
- String toString() 返回一个表示该Interger值的String值
2.4.6 包装类的自动装箱和自动拆箱
- 自动装箱:把基本类型包装成一包装类的对象
Integer a = 5;//a时引用类型,引用了包装对象的地址
编译器会完成对象的自动装箱:Interger a=integer.valueOf(5); - 自动拆箱:从包装对象中自动取出基本类型值
int i=a;//a现在时包装类型,没法给变量赋值,需要把5取出来
编译器会完成自动拆箱:int i=a.intValueof();
2.5 日期类Date
2.5.1 概述
存在于java.util.Date包
用来封装一个毫秒值,表示一个精确的时间点
从1970-1-1日0点开时的毫秒值
2.5.2 创建对象
- new Date();封装的时系统当前时间的毫秒值
- new Date(80000000L);封装指定的时间点
public class test1112 {
public static void main(String[] args) {
Date a = new Date();
System.out.println(a);//Thu Nov 12 09:47:03 CST 2020
Date b = new Date(8000000000000000L);
System.out.println(b);//Fri Nov 28 22:13:20 CST 255479
String c = a.toLocaleString();
System.out.println(c);//2020-11-12 9:47:03
}
}
2.5.3 常用方法
- 常用方法
- boolean euqals() 比较两个日期的相等性
- int getDate() 返回此Date对象标识的月份中的某一天
- int getDay() 表示返回日期对象一周中的某一天
- int getHours() 表示返回日期对象一天中的某小时
- int getMinutes()表示此对象表示当前小时过去的分钟
- int getSeconds()表示当前分钟过去的秒数
- int getTime() 返回1970年1月1日零点到现在所经历的秒数
- boolean before(Date) 测试此日期是否在指定日期之前
- boolean after(Date)测试此日期是否在指定日期之后
- int compareTo() 如果参数 Date 等于此 Date,则返回值 0;如果此 Date 在 Date 参数之前,则返回小于 0 的值;如果此 Date 在 Date 参数之后,则返回大于 0 的值。
2.6 日期类工具SimoleDateFormat
2.6.1 概述
日期格式化工具,可以把Date对象格式化为字符串,也可以把日期字符串解析为Date对象
2.6.2 创建对象
- new SimpleDateFormat(格式)
格式:yyyy-MM-dd HH;mm:ss
MM/dd/yyyy
2.6.3 常见方法
- Date parse(String text,ParsePosition pos)
解析字符串的文字,生成Date- StringBuffer format() 将给定的Date格式化为日期/时间字符串,并将结果添加到给定的StringBuffer
2.6.4 SimpleDateFormat的作用
- 可以自定义设定输入字符串的格式,并且能让这个字符串格式化为日期对象
public class test1112 {
public static void main(String[] args) throws ParseException {
System.out.println("输入日期");
String s = new Scanner(System.in).nextLine();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd");
Date parse = simpleDateFormat.parse(s);
String string = parse.toLocaleString();
System.out.println(string);
}
}
//输出结果
输入日期
2020.11.11
2020-11-11 0:00:00