Java知识复习(常用类)

来源:互联网 发布:惠普网络驱动官方下载 编辑:程序博客网 时间:2024/06/05 21:11

运行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 = { "shajs@123.com", "sds@as.cn", "asas@22.gov", "saas.com", "asas@xx.org" };        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        // 月份的起始值为0,所以得到当前月份要加1        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, 2);        System.out.println(calendar.getTime());        calendar.roll(Calendar.MONTH, -2);        System.out.println(calendar.getTime());    }}

add与roll的区别
add(int field , int amount)方法主要用于改变Calendar特定字段的值;
1. 当被修改的字段超出范围,会发生进位,上一级字段也会增大

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

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

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

roll(int field,int amount) 方法
1.修改的字段超出范围,上一级字段不会改变。
2.下一级字段处理的方式与add类似。