Java基础-常用类之String、Date(Calendar)、File

--------------------------------------------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

 

posted @ 2016-05-05 21:00  已注销账户  阅读(327)  评论(0编辑  收藏  举报