1、System类不能实例化,也就是说不对外提供构造方法,System里面的方法也都是静态的,不需要对象就能调用方法。out本身就是一个对象。Properties是Map的子类。
LINE_SEPARATOR是得到当前系统的换行符的表示方法,不同系统下具体表示方法不同,但是java用了一个变量LINE_SEPARATOR就表示了,体现了java的跨平台特性。
左边是键,右边是值
当然为了简洁,也可以直接把System.getProperty("....")事先定义为常量,方便使用。
2、如果一个类不提供构造函数,也就是说这个类不能创建对象,理论上讲类内部的方法都应该是静态的,但如果方法不是静态的,那一定有一个静态方法返回本类对象,只有这样才能调用那个非静态的方法,只有这一个返回本类对象的方法,说明是单例模式
先在当前路径下找notepad.exe,没有找到就去path路径指定的目录下去找这个exe,要是还找不到就抛异常。注意下图中c:\\Run双反斜杠才表示一个的分隔符的作用,\a单个是转义的意思。
3、Math类中的方法和成员都是静态的。Random()是随机器对象
Date类中,11代表十二月。
5、获取日期格式对象DateFormat也是类,但是不能直接new对象,只能通过方法返回getDataInstance()方法来返回对象
工厂也是设计模式的一种,专门用来生产对象的。
使用DateFormat的子类SimpleDateFormat可以解决自定义日期显示风格的问题。
常用的日期(包含时间)显示格式如下图:
6、DateFormat.getDateInstance()是得到日期对象的默认格式2012-4-19,DateFormat.getDateInstance(DateFormat.Long)是得到日期对象2012年4月19日着种类型的格式,至于自定义的格式就用SimpleDateFormat(“格式”),得到相应的格式后直接把字符串扔进相应格式对象dateFormat.parse()方法,就能转换为Date类型的对象。
7、计算两个字符串日期之间隔了多少天
8、Calendar()类的运用,基本替代了Date()类。
int类型变量,调用get(Calendar.YEAR)返回当前时间的int类型的年分,别的类似道理
同时需注意Calendar的月和打印出来的月份差1,如下图所示
9、练习:利用Calendar类的方法,求出任一年的2月有几天
思路:把日子Calendar设为那一年的3月一号,再向前减1天得到2月的最后一天就是2月有几天,相当于Calendar是有万年历功能的,只需查找就ok。
1、IO流
2、IO流之字节流和字符流
3、什么是覆盖?覆盖就是干掉原来的,再重新建一个新的。
就像之前马士兵讲的,FileWriter就相当于一个输出的管子,对准文件将数据写入里面,上图中默认是在当前目录下的demo.txt(没有的话,自动创建),fw.write("ads")write方法就是一支笔,将要写的数据写在txt文件内部,但是并没有保存,相当于要写入的数据还在管子的缓冲器,并没有真正存入txt中,flush()的作用就相当于保存,也即把管子缓存器里的数据立马保存到txt文件内部,fw.close()的作用就相当于先点了次保存,再关掉txt文件,类似先把数据管子缓存区的数据立即全弄到目标文件上,并关掉管子,也即即close()方法中先调用了flush()刷新缓冲区,然后才关闭了系统资源管子。
之所以会抛异常,是因为写的地址有可能是K盘这种不存在的地址,此时就会抛异常。
4、之前说过windows下换行是\r\n,但是Linux下是\n,为了统一使用,方便程序跨平台,用
private static final String LINE_SEPARATOR = System.getProperty("line.separator");查键值。
每执行一次那个就是重新生成一个txt,覆盖以前的txt,以前txt里面的内容也全都没了,如果想在以前的基础上添加新内容,就在构造函数里加true
5、输入输出流一定会抛IoException,一般都是在try外面定义FileWriter类对象,然后在内部初始化赋值,但是如果上面路径挂了抛异常,下面的fw就是空指针,没法调用fw.close()方法,所以上面要加一个if()判断语句。由于close()是必须的所以都定义在finally内部
fr.read()每次读取一个字符,想读出全部内容就要用循环,数据读完返回-1
7、字符流FileReader,fr.read(buf字符串数组),把读到的数据都装到长度为3的数组中去。当读不到新数据,num=-1时就不在读取了。用字符串数组的方式是每次取一个字符转进字符数组中,等装满或数据读完后一次性输出,效率更高。