运行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类似。