1:Scanner类

主要作用:

  获取输入,Scanner是一个基于正则的文本扫描器;

  Scanner有多个构造方法,用于实现从输入流、文件、字符串中解析数据;

  Scanner是1.5有了的,1.5之前使用的是BufferedReader

主要方法:

  hasNext():是否还有下一项输入;

  hasNextXxx():是否有下一个输入项(Xxx->int,long等基本类型的String形式);

  nextXxx():获取下一个Xxx类型的数据;

  /**默认情况下每一项输入按照空格、tab、回车分割;

demo_1:键盘数据源

1 package scanner;
 2 import java.util.Scanner;
 3 public class demo_1 {
 4     public static void main(String[] args) {
 5         Scanner sc = new Scanner(System.in);    //指定数据源为:键盘输入
 6         sc.useDelimiter("\n");      //指定(Delimiter-定界符)为:回车
 7         while(sc.hasNext()){  
 8             String inStr = sc.next();
 9             System.out.println("inStr");
10         }
11     }
12 }

demo_2:文件数据源

1 package scanner;
 2 import java.io.File;
 3 import java.io.FileNotFoundException;
 4 import java.util.Scanner;
 5 public class demo_2 {
 6     public static void main(String[] args) throws FileNotFoundException {
 7         Scanner sc = new Scanner(new File("a.txt"));    //指定数据源:文件
 8         while(sc.hasNextLine()){    //是否有下一行
 9             String inStr = sc.nextLine();    //获取下一行
10             System.out.println("inStr");
11         }
12     }
13 }

 

System类:

 作用:

    java 是跨品台语言,在程序中可以使用System类和Runtime类和特定的平台交互;

    System类代表当前运行的平台,System提供了不少类属性和类方法。

    System类提供了:标准输入、标准输出、错误输出的类属性,提供了用于获取系统属性的类方法,提供了加载文件和动态链接库的方法;

             垃圾回收方法gc()系统当前时间currentTimeMillis()和nanoTime();

             获取某个对象的精确哈希值identityHashCode(Object x),这个哈希值是按照类的地址计算出来的。(hashCode()方法可以重写但是这个方法不能)

demo_1:

package scanner;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;
import java.util.Properties;

public class demo_1 {
    public static void main(String[] args) throws FileNotFoundException, IOException{
        Map<String,String> env = System.getenv();    //获取系统所有的环境变量
        for(String name : env.keySet()){
            System.out.println(name+"->"+env.get(name));
        }
        System.out.println("JAVA_HOME="+System.getenv("JAVA_HOME"));    //获取指定环境变量
        Properties propts = System.getProperties();    //获取所有的系统属性
        propts.store(new FileOutputStream("propts.txt"),"System properties");    //将系统属性输出到文件中
        System.out.println(System.getProperty("os.name"));    //获取指定系统属性
    }
}

 demo_2:

package scanner;

public class demo_1 {
    public static void main(String[] args){
        //String类自定义了hashCode方法为:根据字符序列计算hashCode;(字符串相同hashCode就是相同)
        String s1 = new String("hello");
        String s2 = new String("hello");
        boolean b1 = s1.hashCode() == s2.hashCode();  //返回true
        boolean b2 = System.identityHashCode(s1) != System.identityHashCode(s2);  //放回true
    }
}

 

Runtime类

Runtime类表示java程序运行吃的环境,每一个java程序都有一个与之对应的Runtime实例通过getRuntime()方法获得;
作用:
  1: 获取jvm信息:处理器数量、内存信息等。也提供了垃圾回收、清理系统资源、加载动态链接库。
  2: 单独启动一条进程来运行操作系统的命令。

demo_1:

1 package demo;
 2 import java.io.IOException;
 3 public class Demo {
 4     public static void main(String[] args) throws IOException{
 5         Runtime runtime = Runtime.getRuntime();
 6         System.out.println("处理器数量:"+runtime.availableProcessors());
 7         System.out.println("空闲内存:"+runtime.freeMemory());
 8         System.out.println("总内存:"+runtime.totalMemory());
 9         System.out.println("最大可用内存:"+runtime.maxMemory());
10         //启动一个线程来执行操作系统命令
11         runtime.exec("notepad.exe");
12     }
13 }

 

BigDecimal类:
  java中的long,double类会引起精度的丢失,BigDecimal类解决了这个问题。(其他语言也会出现精度丢失的问题)

  例如:0.05 + 0.01 = 0.060000000000000005

  BigDecimal类有大量的构造器来方便构造各种类型的大小数。

  包括:将各种数字类型->BigDecimal。String类型的数字->BigDecimal

  new BigDecimal(Doublce dou)会造成精度流失,推荐使用new BigDecimal(String num)来构造。

  如果非要用double可以使用BigDecimal.valueOf(Double dou)方法。

1 package demo;
 2 import java.math.BigDecimal;
 3 public class Demo {
 4     public void mian(String[] args){
 5         //String构造
 6         BigDecimal b1 = new BigDecimal("0.05");
 7         BigDecimal b2 = new BigDecimal("0.01");
 8         //加,减,乘,除
 9         b1.add(b2);         //0.06
10         b1.subtract(b2);    //.0.4
11         b1.multiply(b2);    //0.0005
12         b1.divide(b2);      //5
13         //使用double构造
14         BigDecimal b3 = BigDecimal.valueOf(0.05);
15         BigDecimal b4 = BigDecimal.valueOf(0.01);
16         //加,减,乘,除
17         b3.add(b4);         //0.06000000000.......
18         b3.subtract(b4);
19         b3.multiply(b4);
20         b3.divide(b4);
21         //*****以后还是用 new BigDecimal(String str) 吧
22         //#####上面运算结果都是BigDecimao类型的。(double->BigDecimal->double)
23         //double->BigDeciaml  new BigDecimal(""+double);
24         //BigDecimal->double  bigDecimal.doubleValue();
25     }
26 }

Date类:
  Date类的历史悠久,很多方法过时了,不推荐使用。
  剩下的几个有用的方法如下:
  构造方法:
    Date():生成当前时间对应的Date对象。底层调用了System.currentTimeMillis()方法获取的时间long值
    Date(Long date):根据时间long值生成Date对象。
  普通方法:
    Boolean after(Date date)该日期是否在指定日期之后
    Boolean before(Date date)改日期是否在指定日期之前
    int compareTo(Date date)比较两个日期的大小。返回-1,1
    long getTime():返回对应时间的Long值,1970.1.1到现在的毫秒值
    void setTime(long time):设置Date对象的时间

 

Calendar类:
Calendar类是一个抽象类,表示日历,提供了日历相关的公用方法。其子类实现了各种日历(GregorianCalendar类就是我们说的公历,网上也有农历的实现)
getInstance方法:
  Calendar抽象类提供了几个getInstance方法,会根据TimeZone,Locale构造Calendar,不指定时按照默认的。
  Calendar类和Date类都是日期类型的工具类,他们可以自由的互相转换:
  //Calendar -> Date
    Calendar calendar = new Calendar.getInstance();
    Date date = calendar.getTime();
  //Date -> Calendar
    Date date = new Date();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
Calendar提供了大量日期访问修改的方法例如:
  void add(int field , int amount):根据日期规则给日期加减指定时间。
  void roll(int fidld , int amount):和add方法类似,但是这个方法是有上限的。
  int get(int field): 获取指定日历字段的值。(获取年,月,日...)
  void set(int field , int value):将给定的日历字段设置为指定的值
  void set(int year, int month ,int day):设置年月日,还有个重载的方法可以设置年月日时分秒
  上面的int类型的参数都是Calendar类定义的Int类型的常量:例如:Calendar.YEAR,Calendar.MONTH等,(注意:Calendar.MONTH是0-11)
add(int faild , int amount)和roll(int faild , int amount)的区别:
  add方法就是我们想象中的加日期,减日期,某天(2017-12-25)加10天就是十天后的日期(2018-01-04)。
  roll方法则不同,某天(2017-12-25)加10天则不会进位到月,而是将月循环增加(2017-12-04)
Calendar类的容错性:
  Calendar类默认提供了比较好的容错性,例如:calendar.set(Calendar.MONTh,13) 月是不存在13的,这会使年加一。
  但是在校验严格的情况下不允许这种容错的存在:可以通过Calendar.setLenient(false)方法关掉容错。
set()方法的延迟修改:
  set方法修改了某一日历对象的值后,改日历对象不会立即将其代表的时间修改,而是等到下一下调用get,add,等等方法时计算。

package demo;
import java.util.Calendar;
public class Demo {
    public void mian(String[] args){
        //Calendar类常用方法
        Calendar calendar = Calendar.getInstance();
        calendar.get(Calendar.YEAR);
        calendar.get(Calendar.MONTH);
        calendar.get(Calendar.DAY_OF_MONTH);
        calendar.add(Calendar.YEAR,1);
        calendar.roll(Calendar.YEAR,-8);
        //Calendar类容错性:
        Calendar calendar1 = Calendar.getInstance();
        calendar.set(Calendar.MONTH,12);   //不报错:月份超出后进位到年上
        calendar.setLenient(false);
        calendar.set(Calendar.MONTH,12);    //报错:关闭容错后不再进位,超出就报错。
    }
}

 

 格式化器:

NumberFormat抽象类:
     描述:
        NumberFormat类是Format抽象类的子类,其作用是:实现字符串和数值的互相转换。
     构造:
        通过工厂方法获取NumbeFormat的实例:(这些构造方法可以指定Local,不同地区格式化结果不同)
             NumberFormat.getInstance()
             NumberFormat.getIntegerInstance()
             NumberFormat.getPercentInstance()
             NumberFormat.getCurrencyInstance()
    方法:
         String format(数字类型)        数字类型  -->  字符串
         Number parse(String)            字符串    -->  数字类型

 DateFormat抽象类:
    描述:
        DateFormat类也是Format类的子类,其作用是:实现字符串和日期的互相转换
    构造:(重载方法的一般形式:DateFormat getXXXInstance(int style)   DateFormat getXXXInstance(int style, Locale locale)
                        格式style               Date格式化                  Time格式化
             //        DateFormat.SHORT         07-12-20                    上午12:24
             //        DateFormat.MEDIUM        2017-12-20                   0:24:33
             //        DateFormat.FULL          2017年-12月-20日            上午12时24分33秒
             //        DateFormat.LONG          2017年-12月-20日 星期三     上午12时24分33秒  SCT
            )
         //格式化为日期
         DateFormat.getDateInstance();
         //格式化为时间
         DateFormat.getTimeInstance();
         //格式化为日期加时间
         DateFormat.getDateTimeInstance();
    方法:
         String format(Date)
         Date parse(String)

 SimpleDateFormat类:
    描述:SimpleDateFormat类比SimpleDateFormat易于使用。
    构造:
        在创建SimpleDateFormat时需要传入一个pattern的字段,该字段不是需要格式化的字符串的一个日期模板。

格式化器Demo:
1 package com.vtstar.sct.desktop.clients.FeedingLine21.swingUI;
 2 import java.text.DateFormat;
 3 import java.text.NumberFormat;
 4 import java.text.ParseException;
 5 import java.text.SimpleDateFormat;
 6 import java.util.Date;
 7 public class Demo {
 8     public static void main(String[] args) throws ParseException {
 9     //格式化数字
10         //获取一个普通的数字格式器
11         String numberFormat01 =  NumberFormat.getInstance().format(12.345);      //12.345
12         //获取一个整数类型的数字格式化器
13         String numberFormat02 =  NumberFormat.getIntegerInstance().format(12.345);  //12
14         //获取一个百分比格类型的格式化器
15         String numberFormat03 =  NumberFormat.getPercentInstance().format(0.345);   //34%
16         //获取一个货币类型的格式化器
17         String numberFormat04 =  NumberFormat.getCurrencyInstance().format(12.345);  //¥12.35
18 
19     //格式化为日期
20         String dateShort =  DateFormat.getDateInstance(DateFormat.SHORT).format(new Date());    //18-1-10
21         //格式化为时间
22         String dateMedium = DateFormat.getDateInstance(DateFormat.MEDIUM).format(new Date());   //2018-1-10
23         //格式化为日期加时间
24         String dateLong = DateFormat.getDateInstance(DateFormat.LONG).format(new Date());   //2018年-1月-10日
25         //日期时间和时间的格式化器
26         DateFormat.getDateTimeInstance();
27         DateFormat.getDateTimeInstance();
28 
29     //SimpleDateFormat
30         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
31         Date date = simpleDateFormat.parse("2018-09-22");      //Sat Sep 22 00:00:00 CST 2018
32         String dateStr = simpleDateFormat.format(new Date());       //2018-01-10
33     }
34 }