API是应用程序的编程接口,就想电脑的的USB口一样,而电脑作为工具执行的是电脑能做的事情。API也是帮助程序员达到一些目的的工具。
*常用API:
部分的API可以当做工具
工具的设计思想:
①构造方法用private修饰
②成员用public static 修饰
一、Math:
概述:
lang包下不需要导包,被final修饰没有子类
其包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数
拥有私有无参构造,防止外界创建对象,以强制你用类名调用它的其它方法
注意:没有公共修饰构造方法,且成员方法和成员变量都被static修饰,可通过
类名直接调用,这就不需要创建对象后再调用方法。
常用方法:
①public static int abs(int a):
返回参数的绝对值
②public static double ceil(double a):
返回大于或等于参数的最小double值,等于一个整数
③public static double floor(double a):
返回小于或等于参数的最大double值,等于一个整数
④public static int round(float a):
按照四舍五入安徽最接近参数的int
⑤public static int max(int a,int b):
返回两个int值中的较大值
⑥public static int min(int a,int b):
返回两个int值中的较小值
⑦public static double pow(double a,double b):
返回a和b次幂的值
⑧public static double random():
返回值为double的正值,[0.0,1.0)
二、System:
概述:
lang包下不需要导包,有final修饰没有子类
System的成员变量和方法都被static修饰,不能被实例化,但可以用类名调用
拥有私有无参构造,防止外界创建对象,以强制你用类名调用它的其它方法
常用方法:
①public static void exit(int status):
终止当前运行的Java虚拟机(JVM)。
该参数(status)作为状态代码;按照惯例,非零状态码表示异常
终止。
该方法在类Runtime调用exit方法。此方法从不正常返回。
呼叫System.exit(n)有效地等效于呼啸:
Rumtime.getRuntime().exit(n)
②public static long currentTimeMillis():
返回当前时间(以毫秒为单位)。
注意:虽然返回值的时间单位为毫秒,但该值的粒度取决于底层操作系统,并且可能较大。
结果:
在1970年1月1日UTC之间的当前时间和午夜之间的差异,以毫秒为单位
就是当前时间于1970年1月1日的毫秒值
三、Object(不是工具类):
概述:
lang包下不需要导包,没有final修饰,有子类
类Object是类层次结构的根。每个类都有Object作为超类。所有对象(包括数组)都实现了这个类的方法(无参构造)。
有一个无参构造方法(就是为什么所有的类的构造方法第一行有一个默认的super()代码)
常用方法:
①print(s),和public String toString()方法:
s如果是一个对象名,该方法默认调用了toString方法,结果会出现一个让人能阅读的字符串(重写后的)
注意:因为Object类自带toString,同时所有类都继承,
建议所有子类都覆盖(重写)toString方法,可以用All + insert键
②public boolean equals(Object obj)方法:
比较输出内容是否相等,可以搭配toString()使用(即在定义类里面重写toString方法)
同时又因为Object类里面比较的是输出地址是否相等,就需要在定义类里面重写equals()方法。
Object类里面equals方法的定义:
public boolean equals(Object obj){
return(this == obj)
}
注意:String类里面已经重写了toString和equals()方法的,所以它们输出结果是字符串本身内容而不是地址
同时比较的是内容,而不是地址。
四、Arrays:
冒泡排序:
原理:一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据
放在后面,一次对所有数据进行操作,直至所有数据按要求完成排序。
(每一次比较都有一个数不参与比较)
注意: 如果有n个数据进行排序,总共需要比较n-1次
每一次比较完毕,下一次的比较就会少一个数据参与
概述:
*utill包下要导包,成员方法都有static修饰所以可以用类名直接调用
*该类包含用于操作 数组 的各种方法(如排序和搜索)。
*该类还包含一个静态工厂,可以将数组视为列表。
*拥有私有无参构造,防止外界创建对象,以强制你用类名调用它的其它方法
常用方法:
①public static String toString(int[] a):
返回指定数组的内容的字符串表示形式
②public static void sort(int[] a):
按照数字顺序排列指定的数组
五、基本类型包装类:
概述:
lang包下不需要导包,有final修饰,没有子类
由于java中的数据类型int,double等不是对象,所以无法通过向上转型得到Object提供的方法,
而像String却可以,原因是String是一个对象而不是一个类型。
java提供包装类就是为了解决,基本数据类型因为上述的特性,
导致无法参与转型,泛型,反射等过程的问题。
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作
该数据,常用操作之一:用于基本数据类型与字符串之间的转换。
方法:
①public static final int MIN_VALUE
持有最小值的常数为 int可以为-2 31次方 。
②public static final int MAX_VALUE
持有最大值的常数为 int可以为2 31次方 -1。
分类:
基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
Integer:
概述:包装一个对象中的原始类型int的值
方法:
构造方法:
①public Integer(int value):
根据int值创建Integer对象(过时)
②public Integer(String s):
根据String值创建Integer对象(过时)
静态方法获取对象:
③public static Integer valueOf(int i):
返回表示指定的int值的Integer实例
④public static Integer valueOf(String s):
返回一个保存指定值的Integer对象String
注意:
①Integer重写了toString,输出结果不会是地址
②上述两个过时的构造方法和静态方法获取对象的方法的参数必须是数字
(包括int类型的数字和String类型的数字)
int和String的相互转换:
int转为String:
①空字符与int值相加等于字符串数字
②public static String valueOf(int i):
返回int参数的字符串表示形式。
String转为int:
①String -> Integer -> int
先用Integer.valueOf(String s),再用
public int intValue():
返回 Integer的值作为 int 。
②String -> int
方法:
public static int parseInt(String s):
将字符串参数解析为带符号的十进制整数。 字符串中的字符都必须是十进制数字
(Integer里面的)
案例:字符串中数据排序
tips:
①public String[] split(String regex):
regex指的是要剥离的成分,其余成分分个成为String[]的元素
②public static int parseInt(String s):
定义一个int数组,把String[]数组中的每一个元素存储到int数组中
③要用到StringBuilder
自动装箱和拆箱:
装箱:
概述:把基本数据类型转换为对应的包装类类型
方法:
Integer i1 = Integer.valueOf(100);
基本类型变为包装类型
自动装箱:
方法:
Integer i2 = 100;
jdk5之后底层也做了Integer.valueOf(100);
拆箱:
概述:把包装类类型转换为对应的基本数据类型
方法:
i2.intValue() ;
自动拆箱:
方法:
i2 += 200; (i2 = i2.invalue() +200;)
底层也做了i2.intValue() ;和Integer.valueOf(i2.invalue() +200);
*注意:如果Integer类型的数据是null则用invalueOf()方法
会报空指针异常,所以要加上一个判断,判断是否为null空指针
开发中,引用类型(包装类类型)的变量,使用之前最好先判断其是否为空指针null
六、日期类:
Date:
概述:
主要学习util包下的,其没有final修饰,有子类。
代表了一个特定的时间,以毫秒为精度。
构造方法:
①public Date():
分配一个 Date对象,并初始化它,
以便它代表它被分配的时间,测量到最接近的毫秒。
②public Date(long date):
分配一个 Date对象,并将其初始化为表示从标准基准时间(称为“时代”)
即1970年1月1日00:00:00 GMT起的指定毫秒数。
注意:
Date .utill包下重写了toString方法
CST:表示中国标准时间
它的1970年是对方的时区的时间,与中国东八区时间不同
常用方法:
①public long getTime():
获取的是日期对象从1970年1月1日00:00:00到现在
的毫秒值
②public void setTime(long time):
设置时间,给的是毫秒值
SimpleDateFormat类:
概述:
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。
SimpleDateFormat允许您从选择日期时间格式化的任何用户定义的模式开始。
tips:
y :年
M :月
d :日
H :时
m :分
s :秒
构造方法:
①public SimpleDateFormat():
构造一个SimpleDateFormat,使用默认模式和默认日期格式符号
②public SimpleDateFormat(String pattern):
构造一个SimpleDateFormat使用给定的模式和默认的日期格式符号
格式化和解析日期:
①格式化(从Date到String):
public final String format(Date date):
将日期格式化成日期/时间字符串
②解析(从String 到 Date):
public Date parse(String source):
从给定字符串的开始解析文本以生成日期
注意:①parse在最新的语法里面方法定义被改,需要两个参数传入
第二个参数是(ParsePostion pos),即new ParsePostion(0)
或者用All + Enter键抛出异常
②用parse之前先看看String的模式和SimpleDateFormat的模式是否匹配,它两要相互匹配才行
案例:日期工具类(记得工具类和测试类都要抛异常,同时格式化能获得你想要的样子)
Calendar(日历)类:
概述:
java.utill包下要导包,且有abstract修饰,是抽象类
日历字段都是static修饰的,成员方法没有
类方法是静态方法
为某一时刻和一组默认字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
构造方法:
Calendar提供了一个类方法, getInstance ,用于获取这种类型的一般有用的对象。
且其日历字段使用当前日期和时间初始化(用了多态的形式获得对象的)
输出结果要看时区
常用成员方法:
①public int get(int field):
返回给定日历字段的值。里面填的值就是日历字段,调用日历字段用类名
月份是从0开始的,所以系统会默认知道已经额外+1来达到人们所平常见的日历年份而选择-1
②public abstract void add(int field,int amount):
根据日历的规则(系统的规则),将指定的时间量添加或减去给定的日历字段
③public final void set(int year,int month,int date):
设置当前日历的年月日
注意:
因为外国都是0-11月的,在编译器里面set多少月输出get的结果就是多少月,
但是系统内部默认+1,对日是在set的月份再+1里面有多少日来表示的
即系统的月需要+1,自己set的月不需要,同时当set(year,2,1)时
add方法减了一天此时月份会变为系统月份则会是(set-1)结果在系统下+1,因为2等于外国的3月份
直接输出Calendar.MONTH是指当前电脑所显示的时间的,而不是自己所设置的时间
因此set和get要搭配使用
①如果是没有set,直接输出对象名是减了1的月份结果,或者用get方法也是减了1的月份结果,Calendar.Month只会输出和电脑显示上一样的结果
②如果用了set,直接输出对象名是输出set的参数上的数字,get也是输出set参数上的数字