--------------------------------------------String类--------------------------------------------
//主要内容:String、StringBuffer、StringBuilder、String.format()
//StringBuffer是线程安全的,StringBuilder不是,但StringBuilder效率高,所以更常用
//StringBuilder 功能与StringBufer一样
StringBuilder vs=new StringBuilder();
vs.append(7).append("个小矮人"); //7个小矮人
vs.delete(0,2); //小矮人
vs.reverse();//人矮小
vs.delete(0,vs.length()); //清空
vs.toString();//转为不可变字符串String
//String.format() 返回一个字符串,功能与printf()一样
//格式 String.format("[信息]<格式控制符>", 数据列表);Java1.5开始
//格式控制符:
%d 十进制
%f 浮点数 String.format("%8.2f",123456.789); //123456.78
%c 字符
%s 字符串
n.m 表示整数和小数一共占n位 小数占m位
0 空位补齐 String.format("%012.2f",123456.789); //000123456.78
- 左对齐
n$ 表示第n个数据 String.format("%1$8.2",123456.789); //123456.78
%tF 日期
%tT 时间 String.format("%tT",new date()); //20:25:32
%tA 星期
%tY 年份
%tm 月份
--------------------------------------------Date类-------------------------------------------
//主要内容:Date、DateFormat(抽象类)、SimpleDateFormat(DateFormat的子类)
//Date来源于java.util.Date ; DateFormat来源于java.text.DateFormat
//它们管理的时间是一个时刻,一个瞬间,一个用long值表示的数字
//时间的起始点 1970年1月1日 0时0分0秒
Date d1=new Date();
Date d2=new Date();
boolean flg=flase;
long t1=d1.getTime();//获取long值
flg=d1.equals(d2);//时间是否相同
int x=d1.compareTo(d2);//d1是否在d2后面
flg=d1.after(d2);//同上
flg=d1.before(d2);//d1是否在d2之前
扩展:Date d3=new Date(365L*24*60*60*1000); //int转long 把L放在最前面
//格式化 日期(Date→String)
Date d=new Date();
String str1=DateFormat.getDateInstance().format(d); //2016-05-05
String str2=DateFormat.getTimeInstance().format(d);//20:49:50
String str3=DateFormat.getDateTimeInstance().format(d);//2016-05-05 20:49:50
//自定义 格式,注意异常的处理(String→Date)
str="2016/05/05";
d=DateFormat.getDateInstace().parse(str1);//格式必须是yyyy-mm-dd,否则异常
d=new SimpleDateFormat("yyyy+MM+dd").parse(str);//str格式不固定,甚至可以是“2016年啊3月哦2日呀..”
扩展:
Scanner sc=new Scanner(System.in);
String s1=sc.next(); //空格
String s2=sc.nextLine(); //回车
--------------------------------------------Calendar类-------------------------------------------
//日历是动态的,而Date是静态的
//Calendar 是抽象类,GregorianCalendar是Calender的子类,源自java.util.*包
//GregorianCalender();获取当前时间的日式
//GregorianCalendar(year,month,day); 指定日期
//日历的常用方法、知识
Date getTime(); 将日历中的日期转化为一个Date对象
set()、get() 设定器、访问器
add() 增量
在日历中 月份:0-11表示1-12 星期:1-7表示7-6
public class CalendarTest{
public static void main(String[] args){
Calendar dt=new GregorianCalendar();
int y=dt.get(Calendar.YEAR);
int m=dt.get(Calendar.MONTH)+1;
int d=dt.get(Calendar.DAY_OF_MONTH);
int w=de.get(Calender.DAY_OF_WEEK)-1;
System.out.println("年"+y+"...其它略过");
Date d1=dt.getTime();
System.out.printf("%1$tF %<tT %<tA",d1);//<表示和上一个参数一样
//设定器
dt.set(Calendar.YEAR,2008);//年份设为2008
//访问器
dt.get(Calendar.YEAR);
//增量
//再过20年
dt.add(Calendar.YEAR,20);
}
}
此节我写了一个练习题,有兴趣的可以找找~
--------------------------------------------File类-------------------------------------------
//File类是用来管理计算机资源的类,包括对资源的增删改查,源自java.io.*;
//byte→kb→mb→gb→tb 之间进制是1024
//(但商业上往往使用的进制是1000,如您的移动U盘的容量的计算方法)
//举例:显示硬盘的使用情况
public class FileTest{
public static void main(String[] args){
File[] roots=File.listRoots();//java1.6开始,用来获取电脑的硬盘有多少分区
System.out.println(磁盘名\t总空间\t已用空间\t剩余空间);
for(File f:roots){
long total=f.getTotalSpace()/1024/1024/1024;
long free=f.getFreeSpace()/1024/1024/1024;
long use=total-free;
System.out.println(f+"\t"+total+"GB\t"+use+"GB\t"+free+"GB");
}
}
}类代码结束
--------------------------------------------扩展-------------------------------------------
自动装箱:Integer i1=9527;// 将9527封装成对象new Integer(9527);后,把对象的引用地址给i1
自动拆箱:int i2=i1;//将对象i1的值取出,再赋值给i2
享元模式:在自动装箱时,若值在byte类型的值域内[-128,127],JVM自动优化,只在内存中创建一个实例
Integer i3=127;
Integer i4=127;
System.out.print(i3==i4);//true
Integer i5=128;
Integer i6=128;
System.out.print(i5==i6);//false
再说两句:
创建一个Student类,里面有个name属性,我们创建一个学生对象,name的值是"刘德华",那么这个值存在哪里呢?
当然是常量池里啦~(常量池是JVM在堆里搞出来的一片空间,在Java中新建的对象是存在堆里的)
学生对象的name属性里的值是一个指向"刘德华"的引用(地址),你清楚了吗?
(还不清楚的人,请一定要搞懂常量池的用法啦~)
我再举两例,简单说明一下:
//s1、s2、s3和s4都是局部变量哈~
String s1="刘德华";
//在栈里新建一个变量s1,在常量池里新建一个"刘德华",s1的值是一个地址,指向堆里的常量池里的"刘德华"
String s2="刘德华";
//在栈里新建一个变量s2,s2的值也是一个地址,也指向堆里的常量池里的"刘德华",堆里不再新建"刘德华",因为已经有了
String s3=new String("刘德华");
//在栈里新建一个对象变量s3,在堆里新建一个String类的对象,s3的值还是一个地址,指向堆里的String类的对象的地址
//String类对象的值指向常量池里的"刘德华"
String s4=new String("刘德华");
//s4和s3类似,不再说明
那么:(== 是地址比较哈~)
System.out.println(s1==s2); //ture
System.out.println(s3==s4); //false
System.out.println(s1==s2); //false