包装类
什么是包装类?
*基本数据类型所对应的应用数据类型。
*Object可统一所有的数据,包装类的默认值都为null。
包装类(引用类型,包装类都位于java.lang包下)
基本类型 包装类
byte Byte
short Short
int Integer
long long
float Float
double Double
char Character
boonlean Boolean
装箱和拆箱:
自动装箱:基本类型--->包装类型
举例:
Integer i=new Integer(4); //实例对象的方式
Integer i1=Integer.valueOf(4); //调用静态方法
自动拆箱:包装类型--->基本类型
int num=i1.intValue();
.8中包装类提供不同类型间的转换方式:
*Number父类提供的6种方法。
*parseXXX()静态方法(除Character)。
*valueOf()静态方法。
注意:需保证类型的兼容,否则抛出NumberFormatException异常.
整数缓冲区:
.Java预先创建了256个常用的整数包装类型对象。
.在实际应用中,对创建的对象进行复用,所以装箱和拆箱可自动进行。
自动装箱与自动拆箱:基本数据的数据类型和包装类之间的相互转换。
自动装箱:直接把基本数据类型的整数值赋值给包装类。
自动拆箱:包装类无法进行运算,可以转换为基本数据类型,再进行计算。
String类
.Java程序种的所有字符串文本(例如“abc”)都是此类的实例。
.字符串字面值是常量,创建后长度不可改变,因为String的底层为final修饰的字符数组.
创建方式:
String str1=“字符串”; //赋值方式
String str2=new String(“字符串”); //实例对象
常用方法:
- equals方法
public boolean equals(object obj):提示其他某个对象是否相等。
调用成员方法equals并指向参数为另一个对象,则可以判断这两个对向是否相等。整理的相同有两种方式。
默认地址比较:
如果没有覆盖重写equals方法,那么Object类中默认进行==运算符的对象地址比较,只要不是同一个对象,结果为false。
对象内容比较:
如过希望对象进行内容的比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。
Objects类当中的equals方法:对两个对象进行比较,防止出现空指针异常。
public boolean equals(object a,object b){
return (a==b)||(a!=null&&a.equals(b));
}
可变字符串:
概念:可在内存种创建可变的缓冲空间,存储频繁改变的字符串。
- StringBuilder类(字符串缓冲区)
.StringBuilder可以提高字符串的操作效率(可看成一个可以改变长度的字符串)底层也是一个数组,但没有被final修饰。
.StringBuilder在内存中始终是一个数组,占用空间少,效率高。如果超出容量会进行自动扩容。
StringBuilder常用的方法有两个:
public StringBuilder-append(..):添加任意类型数据的字符串形式,并返回当前对象自身。
public String toString():将当前StringBuilder对象转换为String对象。
append方法:
具有多种重载形式,可以接受任意类型的参数,任何数据作为参数都会将对应的字符串类容添加到StringBuilder中。
String、StiringBuilder和StringBuffer的区别:
String类型的字符串长度不可发生改变,底层为被final修饰的字符数组。
StiringBuilder和StringBuffer可改变变字符串的长度,底层也为字符数组,但没有被final修饰。
StiringBuilder和StringBuffer的区别:
相同点:二者都可改变字符串的长度,且静态方法基本一致;
不同点:
前者:运行效率快,线程不安全,一般用于多线程环境中;
后者:运行效率慢, 线程安全,因为底层加了锁机制(synchronized),一般用于单线程环境下。
BigDecimal
位置:Java.math包中。
作用:精确计算浮点数。
创建方式:BigDecimal bd=new BigDecimal(“99.9”);
常用方法:
*BigDecimal add(BigDecimal bd) 加
*BigDecimal subtract(BigDecimal bd) 减
*BigDecimal multiply(BigDecimal bd) 乘
*BigDecimal divide(BigDecimal bd) 除
注意点:
.除法:divide(BigDecimal bd,int scal,RoundingMode mode);
.参数scale:指定精确到小数点后几位;
.参数mode:
*指定小数部分的取舍模式,通常采用四舍五入的模式;
*取值为:BigDecimal.ROUND_HALF_UP;
日期类
日期时间类
- Date类
Java.util.Date类:表示特定的时间,精确到毫秒,
.public Date():分配Date对象并初始化此对象,以表示分配它的时间。
使用无参构造,可以自动设置当前系统时间的毫秒时刻,指定long类型的构造参数,可以自定义毫秒时刻。
获取当前日期格式:
Date date=new Date();
- SimpleDateFormat类
java.text.DateFormat:是日期时间格式化子类的抽象类,可以完成Data对象与String对象进行来回转换。
.格式化:按照指定的格式,从Date对象转换为String对象.
由于DateFormat为抽象类,不能直接创建对象,所以需要常用的子类java.text.SimpleDateFormat来指定格式化或解析标准。
.public SimpleDateFormat(String-pattern):用给定的模式和默认语言环境的日期格式符号构造.
参数pattern是一个字符串,代表日期时间的自定义格式。
常用的规则为:
标识字符(区分大小写) 含义
y 年
M 月
d 日
H 时
m 分
S 秒
使用DateFormat类当中的方法format,可以将日期格式化为文本。
使用步骤:
1.创建SimpleDateFormat对象,构造方法中传递指定格式
2.调用SimpleDateFormat对象中的format方法,按照构造方法指定的格式,把Date日期格式化为符合模式的字符串(文本)
日期时间格式:"yyyy-MM-dd HH:mm:ss"(其中字母不能更改,连接符号可以改)
使用DateFormat类当中的方法parse,把文本格式化为文本
使用步骤:
1.创建SimpleDateFormat对象,构造方法中传递指定格式
2.调用SimpleDateFormat对象中的parse方法,把符合构造方法中模式的字符串,解析为Date日期
- Colendar日历类
.Calendar提供了获取或设置各种日历的方法。
.protected Calendar()构造方法为protected修饰,无法直接创建对象;
Colendar为一个抽象类里面提供了许多操作日历字段的方法(YEAR、MONTH、DAY_OF_MONTH、HOUR)。
Colendar类无法直接创建对象使用,里面有一个静态方法叫getInaatance();
public Date getTime();返回一个表示此Colendar时间值的Date对象,把日历对象转换为日期对象。
- System类
java.lang.System:类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。常用的方法有:
currentTimeMills();:返回以毫秒为单位的当前时间;
arraycopy();:将数组指定的元素拷贝到另外一个元素;
currentTimeMills方法:(用于测试程序的效率)
实际上,currentTimeMills方法指的是当前系统时间与1970年01月01日0点之间的毫秒差值。
System:
.System系统类,主要用于获取系统的属性数据和其他操作。
java.lang.System:类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。常用的方法有:
currentTimeMills();:返回以毫秒为单位的当前时间;
arraycopy();:将数组指定的元素拷贝到另外一个元素;
currentTimeMills方法:(用于测试程序的效率);
static void gc();触发jvm启动垃圾回收机制回收垃圾;
实际上,currentTimeMills方法指的是当前系统时间与1970年01月01日0点之间的毫秒差值。
程序效率测试案例:
/**
* 使用匿名内部类的方式测试执行效率
*/
//测试遍历for循环执行效率
interface Timeable{
public abstract void testTime();
}
//测试工具
class Tool{
public static long getTime(Timeable timeable){ //接口回调,接口作为参数
long start=System.currentTimeMillis();
timeable.testTime();
long end=System.currentTimeMillis();
return end-start;
}
}
public class GetTime {
public static void main(String[] args) {
//匿名内部类实现
long time = Tool.getTime(new Timeable() {
@Override
public void testTime() {
int sum=0;
for (int i = 0; i < 10; i++) {
sum+=i;
System.out.print(sum+" ");
}
}
});
System.out.println(" ");
System.out.println("for循环的执行效率为:"+time+"毫秒");
}
}