天天看点

Java知识复习(常用类)

运行Java程序的参数

public static void main(String[] args) {

    }
           
  • public修饰符:Java类由JVM调用,所以用public修饰符把main方法暴露出来,让JVM可以自由调用。
  • static修饰符:JVM直接通过类来调用main方法。
  • void返回值:JVM调用该方法,返回值传给JVM没有意义,所以用void返回值。

Scanner类

Scanner主要提供两个方法来扫描输入的内容。
           

- hasNextXxx,是否还有下一个输入项。

- nextXxx,获取下一个输入项。

import java.util.Scanner;

public class TestDemo03 {
    private static Scanner input;

    public static void main(String[] args) {
        input = new Scanner(System.in);
        while (input.hasNext()) {
            System.out.println("输入的内容是:" + input.next());
        }
    }
}
           

Scanner还可以读取文件输入

Scanner input = new Scanner(new File("abc.txt")); 
           

BufferedReader获取键盘输入

public class TestDemo03 {

    public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String string = null;
        try {
            while (null != (string = br.readLine())) {
                System.out.println("输入的是:" + string);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
           

正则表达式

  • 正则表达式是一个对字符串进行处理的工具。

正则表达式的特殊字符

字符 解释
x 字符x(x可以代表任何合法的内容)
\0mnn 八进制0mnn所表示的字符
\xhh 十六进制值0xhh所表示的字符
\uhhhh 十六进制值0xhhhh所表示的UNICODE字符
\t 制表符(’\u0009’)
\n 换行符(’\u000A’)
\r 回车符(’\u000D’)
\f 换页符(’\u000C’)
\a 报警符(’\u0007’)
\e Escape符(’\u001B’)
\cx x对应的控制符。x必须为a-z或A-Z之一,如:\cM匹配Ctrl-M。
$ 匹配一行的结尾,要匹配$本身,要用\$
^ 匹配一行的开头,要匹配^本身,要用\^
() 标记子表达式的开始和结束位置
[] 用于确定中括号表达式的开始和结束位置
{} 用于标记前面子表达式的出现频度
* 指定前面子表达式出现0次或多次
+ 指定前面子表达式出现1次或多次
? 指定前面子表达式出现0次或1次
. 匹配除了换行符\n之外的任何单字符
\ 用于转义下一个字符,或者指定八进制、十六进制符
| 指定两项之间任选一项

(要匹配以上字符本身,要用\连接需要匹配的字符)。

预定义字符

预定义字符 说明
. 可以匹配任何字符
\d 匹配0-9的所有数字
\D 匹配非数字
\s 匹配所有的空白字符,包括空格、制表符、回车符、换页符、换行符等
\S 匹配所有的非空白字符
\w 匹配所有的单词字符,包括0-9,所有字母和下划线_
\W 匹配所有非单词字符
使用Pattern和Matcher来使用正则表达式(Pattern是不可变类,可供多个并发线程安全使用)
           
package com.example.chapter;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestDemo01 {
    public static void main(String[] args) {
        String[] mails = { "[email protected]", "[email protected]", "[email protected]", "saas.com", "[email protected]" };
        String mailRegEx = "\\w{3,10}@\\d+\\.(com|cn|gov|org)";
        Pattern pattern = Pattern.compile(mailRegEx);
        Matcher matcher = null;
        for (String mail : mails) {
            if (matcher == null) {
                matcher = pattern.matcher(mail);
            } else {
                matcher.reset(mail);
            }
            String result = mail + (matcher.matches() ? " is" : " is not") + " email";
            System.out.println(result);
        }
    }
}
           

System类

  • System类代表的是当前Java程序的运行平台,程序不能创建System的对象
  • System类提供了两个方法可以获取系统当前的时间,currentTimeMillis()和nanoTime(),这两个方法的返回值为long.前者单位为毫秒,后者单位为纳秒。
public class Demo01 {
    public static void main(String[] args) {
        System.out.println(System.currentTimeMillis());//1506004702738
        System.out.println(System.nanoTime());//273159338426083

    }
}
           
  • System类的in、out、err分别代表系统的标准输入(一般为键盘)、标准输出(一般为显示器)、错误输出流。
  • System类提供了setIn(),setOut(),setErr()方法来改变系统的标准输入、标准输出和标准错误输出流。

Object类

Object类是所有类、数组、枚举类的父类。当定义一个类没有用extends关键字为它指定父类,则该类默认继承Object类。
           

几个常用的方法:

  • boolean equals(Object obj);判断指定对象与该对象是否相等,可以自己重写该方法定义判断相等的条件。
  • protected void finalize();当系统中没有引用变量引用该对象时,垃圾回收器调用此方法来清理该对象的资源。
  • Class< ?> getClass();返回该对象的运行时类。
  • int hashCode();返回该对象的hashCode值。
  • String toString();返回该对象的字符串表示。

Java7新增的Objects类

Objects是一个工具类,提供了一些工具方法来操作对象。

String ,StrinfBuffer ,StringBuilder 类

  • String类是不可变类。
  • StringBuffer 对象代表一个字符序列可变的字符串。
  • StringBuilder与StringBuffer基本相似,StringBuffer是线程安全的,StringBuilder不是线程安全,所以性能略高。(优先考虑使用StringBuilder类)
  • String类提供的大量构造方法和方法可以参考api文档。

Math类

Math类是一个工具类,构造器由private修饰,所以无法创建Math对象。

Math类提供的方法可参考api文档。

Calendar类

Calendar类可以更好的处理日期和时间。Calendar类是抽象类。
           
public class Demo01 {
    public static void main(String[] args) {
        // 创建一个默认的Calendar对象
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.get(Calendar.YEAR));// 取出年,2017
        // 月份的起始值为,所以得到当前月份要加
        System.out.println(calendar.get(Calendar.MONTH));// 取出月,8
        System.out.println(calendar.get(Calendar.DATE));// 取出日,22
        System.out.println(calendar.getTime());

        calendar.add(Calendar.YEAR, );
        System.out.println(calendar.getTime());

        calendar.roll(Calendar.MONTH, -);
        System.out.println(calendar.getTime());
    }
}
           

add与roll的区别

add(int field , int amount)方法主要用于改变Calendar特定字段的值;

1. 当被修改的字段超出范围,会发生进位,上一级字段也会增大

calendar.set(, , );
        calendar.add(Calendar.MONTH, );
        System.out.println(calendar.getTime());//Sat Feb 12 16:52:39 CST 2011
           

2.如果下一级字段也需要改变,该字段会修改到变化最小的值。

calendar.set(, , );
        calendar.add(Calendar.MONTH, );
        System.out.println(calendar.getTime());//Sat Feb 29 16:59:57 CST 2020
           

roll(int field,int amount) 方法

1.修改的字段超出范围,上一级字段不会改变。

2.下一级字段处理的方式与add类似。