【Java】day14--StringBuilder类、System类、Runtime类、Date类、Math类、集合部分知识点总结

(一)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();//清空元素
		}	
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值