第七章--Java基础类库--与用户的互动

1.命令行编译和运行java程序
在notepad++中集成java编译运行命令 参考博客:http://blog.sina.com.cn/s/blog_84405af50101q7fn.html
2与用户互动
2.1 运行Java程序的参数
main函数的运行参数是由Jvm在调用该时写进去的,通常不写arg是长度为0的数组
代码:
public class HellowWord{
public static void main(String[] args)
{
System.out.println(args.length);
for(String arg : args)
{
System.out.println(arg);
}
}
}

运行结果:
C:javacode>java HellowWord sdf dsf fdfsdf
3
sdf
dsf
fdfsdf
3.Scanner获取键盘输入:方便的获得用户输入,Scanner是基于正则表达式的文本扫描器,可以从文本,输入流字符串中解析出基本类型值和字符串值
主要方法:hasNext***();
next**** **代表某种类型
Scanner类所在的包 java.util ----因为我是用notepadd写的代码,不会自动导包
默认情况使用空白分割输入项,有一次读取一行的方法(hasNextLine() nextLine())
usDelimiter(String pattern)参数为正则表达式
*******scanner还能读取文件的输入
file类所在的包名 import java.io.File;(使用时还要处理FileNotFoundException异常)
import java.util.*;
import java.io.*;

public class ScannerKey{
public static void main(String[] args) throws FileNotFoundException
{
Scanner sc = new Scanner(System.in);
/*while(sc.hasNext())
{
System.out.println("读取输入"+sc.next());
}*/
Scanner scFile = new Scanner(new File("HellowWord.java"));
while(scFile.hasNextLine())
{
System.out.println(scFile.nextLine());
}
}
}

4.系统相关类
4.1 System类 代表当前程序运行平台,不能创建对象,使用提供的类变量和方法来完成需要的功能

System的包 import java.lang.System;
System类的方法:getenv()--获取系统的环境变量
getProperties(),getProperty("")--获取当前系统的属性
gc()-- 通知系统进行垃圾回收
runFinalization()--通知系统进行资源清理
long currentTimeMillis() 返回当前时间与1970 1月1日的差
long nanoTime() 纳秒
in out err 标准输入(键盘) 标准输出(屏幕) 错误输出流 还有*****setIn() setOut() setErr()改变系统的标注输入输出,,,
identityHashCode(Object c) 返回指定对象的精确hashCode值,可以唯一标识一个对象(不同对象的值绝对不同)

import java.lang.System;
import java.lang.*;
import java.util.*;
import java.io.*;

public class SystemTest{
public static void main(String[] args) throws IOException
{
Map<String ,String> env = System.getenv();//get all
for(String name : env.keySet())
{
System.out.println(name + "--->" + env.get(name));
}


System.out.println("JAVA_HOME:-----"+System.getenv("JAVA_HOME"));

Properties props = System.getProperties();

props.store(new FileOutputStream("props.txt"),"System Properties");

System.out.println(System.getProperty("os.name"));

}
}

5.Runtime类---java运时的环境(每个程序都有与之对应的Runtime实列)
5.1 无法创建对象,只能通过getRuntime()获得
5.2 提供了与System类似的 gc() runFinalization()回收资源,提供load(String filename) loadLibrary(String libname)加载文件和链接库
availableProcessor()获得JVM处理器数量
freeMemory() 空闲内存数
totalMemory() 总内存数
maxMemory() 最大可用内存数

单独启动一个进程执行操作系统的命令:exec("exename")

上面都是系统相关类
下面是常用类:

1.Object类是所有类的父类,java对象可以调用Object类的方法
boolean equals(Object o):判断指定对象与该对象是否相等,标准是两个对象是同一个对象,无太大使用价值
protected void finalize():无引用到该对象的变量时1,调用此方法回收该对象的资源
Class<?> getClass() 返回该对象的运行时类
int hashCode() 返回根据地址计算的hash值
String toString()默认返回:运行时类名@十六进制hash值
wait()线程操作方法

protected clone();***********************浅克隆--只克隆了成员变量,但没clone引用型变量引用的值
自定义类实现"克隆”:
实现Cloneable接口
自定义clone方法(方法内调用super.clone())

2.java7新增的Objects类:主要是空指针安全,对象为空时不会出现空指针异常

3.String StringBuffer StringBulider
String是不可变类,一旦被创建就不会改变,StringBuffer代表一个字符序列可变的字符串,被创建后可以根据提供的方法对字符串进行更改完成后可调用toString()变成String
,StringBuilder性能略高
4.Math类:提供大量的数学操作
5.ThreadLocalRandom(保证系统具有更好的线程安全性,,通过current()来获取对象)和Random(种子相同时,产生相同的数据,伪随机数,推荐当前时间为种子)
6.BigDecimal解决float和double精度丢失的问题
7.日期类Data和Calendar
-------------------------静态导入问题(可以简化代码,减少代码量))?????calendar
import java.util.Calendar.*; Calender.YEAR => YEAR
Calender 提供了add(如果超出范围会产生进位) 和 roll(不会产生进位)两个方法来操作时间日期

Calender提供容错性:setLenient(false);可以关闭容错,但程序运行会抛异常(set(Month,13))

set()方法延迟修改参数:内部日历字段会立即被更改,但Calender代表的字段不会被立即修改,知道下次调用get(),getTime(),getTimeInMillis(),add(),roll()
时才重新计算日历时间********优点,多次调用set()不会触发多次计算
************************************月份的起始是从0开始的********************************************
p261页书上举了一个特殊的例子来标识这种影响

import java.util.*;
import static java.util.Calendar.*;

public class CalendarTest{
public static void main(String[] args)
{
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.YEAR));
System.out.println(c.get(Calendar.MONTH));

c.set(2018,10,23,12,32,23);
System.out.println(c.getTime());
c.add(YEAR,-1);
System.out.println(c.getTime());
c.roll(MONTH,-11);
System.out.println(c.getTime());
}
}
8.java新增的日期包和时间包 java.time


9.正则表达式 Pattern和Matcher专门用于提供正则表达式支持
9.1创建正则表达式,
x 代表任何合法字符
mnn 8进制数
xhh 十六进制字符0xhh
uhhh 十六进制 0xhhh
代表制表符
换行符
回车符
f 换页符

。。。。。。。

特殊字符。。。。。

预定义字符(通配符))

方括号表达式(包含运算符^ &&)

支持圆括号表达式

****************** java.util.regex (包)**************************

正则表达式字符串要先编译成Pattern对象:Pattern p = Pattern.compile("正则表达式字符串");
利用p创建Matcher对象 Matcher m = p.matcher("");
执行匹配所涉及的状态保存在Matcher对象中

*****************多个Matcher对象可以共享一个pattern




原文地址:https://www.cnblogs.com/xiaochenztx/p/8515266.html