zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【BZOJ1858】序列操作(SCOI2010)-线段树
    【BZOJ1858】序列操作(SCOI2010)-线段树
    【SPOJ3267】D-query-莫队算法
    【BZOJ2038】小Z的袜子(2009国家集训队)-莫队算法
    【BZOJ2038】小Z的袜子(2009国家集训队)-莫队算法
    【HDU3966】Aragorn's Story-树链剖分或LCT维护路径
    BZOJ 4569 萌萌哒
    BZOJ 2460 元素
    BZOJ 2115 Xor
    BZOJ 2750 Road
  • 原文地址:https://www.cnblogs.com/qixiawentang/p/5463346.html
Copyright © 2011-2022 走看看