(一)StringBuilder类
笔试题目:
StringBuffer 与StringBuilder的区别?
相同点:都是字符串缓冲类,底层都是维护了一个字符数组用于存储数据。
不同点:
1.StringBuffer是线程安全的,操作效率低;StringBuilder是线程不安全的,操作效率高。
线程安全:线程安全的代码在一个时间段里只能由一个线程去操作代码。
线程不安全:允许在同一个时间片中多个线程操作代码。
2.StringBuffer是jdk1.0时出现的,StringBuilder是jdk1.5时出现的。
推荐使用:StringBuilder.
(二)System类
System系统类:主要的作用是用于获取系统的一个参数。
System类需要掌握的方法:
arraycopy(Object src,int srcPos,Object dest,int destPos,int length) 拷贝数组
currentTimeMillis() 获取当前系统时间,从1970.1.1到当前时间的毫秒数
exit(int status) 退出jvm,0正常退出 ;非0异常退出
gc() 不一定立即启动,只是建议jvm尽快启动垃圾回收器回收垃圾
getenv() 获取环境变量
getProperties() 获取系统属性
例如:
class Person{
String name;
public Person(String name) {
this.name=name;
}
@SuppressWarnings("deprecation")
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println(this.name+"被回收");
}
}
public class demo2 {
public static void main(String[] args) {
int[] srcArr= {10,9,8,7};//源数组
int[] destArr=new int[4];//目标数组,初始化元素均为0
//拷贝数组
System.arraycopy(srcArr, 1, destArr, 2, 2);
System.out.println(Arrays.toString(destArr));
//获取当前系统时间,从1970.1.1到当前时间的毫秒数
System.out.println("当前时间:"+System.currentTimeMillis());
//退出jvm
System.exit(0);//退出jvm之后的话是废话,编译应报错,
System.out.println("haha");
//匿名对象,运行完就变成垃圾,有四个垃圾对象
//任何垃圾对象被回收之前,都会调用对象的finalize方法,可以此判断是否被回收
for(int i=0;i<4;i++) {
new Person("仙女"+i+"号");
System.gc();//回收垃圾,之前会调用finalize函数
}
//获取环境变量
String path=System.getenv("Path");
System.out.println(path);
//获取系统属性
Properties pro=System.getProperties();//获取所有的系统属性
pro.list(System.out);//out是一个常量,标准输出流
//获取系统名称属性
String osName=System.getProperty("os.name");
if("Windows 10".equals(osName)) {
System.out.println("真棒!");
}else {
System.out.println("快换");
}
}
(三)Runtime类
Runtime类:代表了当前程序的运行环境。
每个java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。
Runtime对象需要掌握的方法:
exec(String command) 执行指定路径下的可执行文件
maxMemory() 试图使用的最大内存量
totalMemory() java虚拟机中的内存总量
freeMemory() 当前空闲的内存
例如:
public class demo4 {
public static void main(String[] args)throws IOException, InterruptedException {
Runtime runtime=Runtime.getRuntime();//获取Runtime对象
//运行一个记事本,pro对象表示启动的进程
Process pro=runtime.exec("C:\\Windows\\notepad.exe");//编译时IO异常,抛出处理
Thread.sleep(3000);//程序暂停3秒,编译时有中断异常,抛出
pro.destroy();//杀死进程
System.out.println("试图使用的最大内存量:"+runtime.maxMemory()/1024/1024);//2024M
System.out.println("java虚拟机中的内存总量"+runtime.totalMemory()/1024/1024);//128M
System.out.println("当前空闲的内存:"+runtime.freeMemory()/1024/1024);//127M
}
}
(四)Date日期类
Date日期类:
Calendar 日期类
SimpleDateFormat 日期格式化类:
作用:
1.可以将时间对象转成指定格式的字符串。
2.可以把字符串转成时间对象。字符串的格式比需要与SimpleDateFormat指定模式一致,否则报错
例如:
public class date {
public static void main(String[] args) throws ParseException {
/*
Date date=new Date();//获取当前系统时间的对象
System.out.println();
*/
Calendar cal=Calendar.getInstance();//获取当前的系统时间
System.out.println("年份:"+cal.get(Calendar.YEAR));
System.out.println("月份:"+(cal.get(Calendar.MONTH)+1));//外国人计月0-11,所以加1
System.out.println("日:"+cal.get(Calendar.DATE));
System.out.println("时:"+cal.get(Calendar.HOUR_OF_DAY));
System.out.println("分:"+cal.get(Calendar.MINUTE));//外国人计月0-11,所以加1
System.out.println("秒:"+cal.get(Calendar.SECOND));
//创建日期格式化类的对象
SimpleDateFormat dateFormat=new SimpleDateFormat();
//把日期对象转换成默认格式的字符串
String text=dateFormat.format(new Date());
System.out.println("当前系统时间是:"+text);
//创建日期格式化类的对象,指定格式
SimpleDateFormat dateFormat1=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//没有特殊含义的字符可以原样输出
//把日期对象转换成指定格式的字符串 format
String text1=dateFormat1.format(new Date());
System.out.println("当前系统时间是:"+text1);
//字符串--时间对象
String text2="1998年10月23日 05:21:21";
Date date=dateFormat.parse(text2);
System.out.println(date);
}
}
(五)Math类
Math类:
常用的方法:
abs() 绝对值
ceil() 向上取整
floor() 向下取整
round() 四舍五入
random()随机数 范围[0.0,1.0)
Random类可以随机产生很多类型数据
例如:
public class math {
public static void main(String[] args) {
double a=-11.55;
System.out.println(Math.abs(a));//11.11
System.out.println(Math.ceil(a));//-11
System.out.println(Math.floor(a));//-12
System.out.println(Math.round(a));//-12
a=3.88;
System.out.println(Math.ceil(a));//4
System.out.println(Math.floor(a));//3
System.out.println(Math.round(a));//4
System.out.println(Math.random());
//Random类
Random ran=new Random();
System.out.println("随机数:"+ran.nextInt(11));//随机数范围[0,10]
}
}
(六)集合
先导知识:
数组的特点:
1.只能存储同一种类型的元素。除了Object类型的数组以外。
2.数组一旦初始化长度固定。
3.数组中元素与元素之间的内存地址是连接的。
面向接口的多态:
使用接口声明一个变量,然后该变量指向接口实现类的对象。
集合:集合是存储任意对象数据的容器。
集合的特点:
1.集合可以存储任意类型的对象数据。
2.集合的长度会发生改变。
集合体系:
Collection:单列集合类的根接口
(两个子接口) List: (增加规范)如果实现了List接口的集合类,那么该集合类具备的特点是:有序、可重复
Set: (增加规范)如果实现了Set接口的集合类,那么该集合类具备的特点是:无序、不可重复
Collection要掌握的方法:
增:
add() 返回布尔值
addAll(Collection c) 将一个集合元素全部(分开)添加到另一个集合中
删:
clear() 清除
remove() 删除指定的元素,返回布尔值
removeAll(Collection c) 删除两个集合的交集元素,返回布尔值
retainAll(Collection c) 保留两个集合的交集元素
查:
contains()
containsAll(Collection c) 包含集合c中所有元素,返回true
isEmpty()
size()
迭代:
iterator() 获取集合中的迭代器,迭代器的作用是抓取集合中的元素。
toArray() 把集合中的元素存储到数组中返回
当获取到集合中的迭代器时,迭代器对象会有一个游标指向集合中的第一个元素。
迭代器常用方法:
hasNext() 问当前游标有没有指向一个元素
next() 抓取当前游标指向的元素,游标下移一个位置
remove() 删除迭代器最后一次返回的元素,先用迭代器抓取元素才能删除
例如:
class Person{
int id;
String name;
//快捷键生成构造元素
public Person(int id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "{身份证:"+this.id+" 姓名:"+this.name+"}";
}//重写
@Override
public boolean equals(Object obj) {
Person per=(Person)obj;//强制转换,才可以访问子类特有成员
return this.id==per.id;
}//重写 身份证号一样即可判定是一个人
}
public class gather {
public static void main(String[] args) {
//创建一个集合对象
Collection col=new ArrayList();//接口关系下的多态,方法都是引用了接口实现类的方法。接口的引用类型变量指向接口的实现类
/*----------添加任意类型元素,且长度可变化----------*/
col.add(15);
col.add("小心女");
col.add(3.14);
col.add(true);
//System.out.println("添加成功么?"+col.add("你好"));
//创建一个集合对象
Collection col1=new ArrayList();
col1.add("峰峰");
col1.add("好帅");
col1.add("最帅");
col1.add("小心女");
col1.add(3.14);
//将col1元素添加到col中
//col.addAll(col1);
/*------------------------删除----------------------*/
//col.clear();
//col.remove("小心女");//删除某个元素
//col.removeAll(col1);
col.retainAll(col1);
col.clear();
col1.clear();
/*--------------------查看-----------------------*/
col.add(new Person(101,"小米"));
col.add(new Person(102,"大米"));
col.add(new Person(103,"黑米"));//直接输出是包名.类名@内存地址
Person p=new Person(101,"小米");//new,不是一个对象,因为内存地址
//contains()底层是依赖了equals()进行比较的,比较内存地址。
//这里要进行重写,比较成员变量id
System.out.println("包含该元素嘛?"+col.contains(p));
col1.add(new Person(101,"小米"));
col1.add(new Person(102,"大米"));
//col1.add(new Person(105,"红米"));
System.out.println("包含所有元素么?"+col.containsAll(col1));
System.out.println("集合元素:"+col);//调用了toString方法,进行重写显示具体信息
col1.clear();
col1.add(null);//集合中添加一个空元素null,集合也是非空的,长度为1。
System.out.println("空么?"+col1.isEmpty());
/*--------------------迭代-------------------*/
col.add("小花");
col.add("端木");
col.add("上官");
col.add("慕容");
/*
遍历集合元素的方法一,转存到数组中,遍历数组
Object[] arr=col.toArray();//把集合中的元素存储到一个Object数组中返回
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
*/
//接口的引用类型变量指向接口实现类的对象(多态)
//获取迭代器
Iterator it=col.iterator();//iterator()返回Iterator接口实现类的对象
it.next();//返回第一个小米
it.remove();//删除小米
while(it.hasNext()) {
System.out.println("元素:"+it.next());
it.remove();//清空元素
}
}
}