第7章:Java基础类库

7.1 与用户互动

7.1.1 运行Java程序的参数
7.1.2 使用Scanner获取键盘输入
import java.util.Scanner;

public class ScannerKeyBoardTest {
	public static void main(String[] args) {
		//System.in代表标准输入,就是键盘输入
		Scanner sc = new Scanner(System.in);
		//如果使用回车(\n)作为分隔符,那么输入"aaa bbb ccc ddd"后回车,由于该字符串之间没有回车符,所以next()方法返回整个字符串
		sc.useDelimiter("\n");
		//hasNext()方法会一致阻塞,一直到输入回车
		//对于回车前的所有字符串,例如"aaa bbb ccc ddd"默认以空格、Tab空白、回车作为分隔,第一次next获取aaa,第二次获取bbb,以此类推
		while(sc.hasNext()){
			//next方法会阻塞一致等到有内容输入
			System.out.println(sc.next());
		}
	}
}
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ScannerFileTest {
	public static void main(String[] args) throws FileNotFoundException {
	    //Scanner也可以扫描文本中的内容
		Scanner sc = new Scanner(new File("C:\\Users\\ThinkPad\\Desktop\\java复习.txt"));
		while(sc.hasNextLine()){
		    //读取整行,可以理解为使用回车作为分隔符
			System.out.println(sc.nextLine());
		}
	}
}

7.2 系统相关

7.2.1 System类
7.2.2 Runtime类
  1. 直接单独启动一个进程来运行操作系统命令
package com;

import java.io.IOException;

public class ExecTest {
	public static void main(String[] args) throws IOException {
		Runtime rt = Runtime.getRuntime();
		rt.exec("notepad.exe");
	}
}

7.3 常用类

7.3.1 Object类
  1. 方法
boolean equals(Object obj):Obejct的equals与==功能一样,判断对象地址是否相同
protected void finalize():当系统没有引用变量指向该引用时,垃圾回收器调用该方法清理该对象所占用资源
Class<?> getClass():返回该对象的运行时类
int hashCode():返回该对象hashCode值,该值是使用对象的地址来计算的
String toString():运行时类名@十六进制hashCode值
  1. 自定义类实现克隆
package com;

class Address {
	String detail;
	public Address(String detail){
		this.detail=detail;
	}
}
//1.必须实现Cloneable接口,正常对象虽然都继承Object类,也拥有clone()方法,但是如果不实现该接口,执行报java.lang.CloneNotSupportedException
class User implements Cloneable{
	int age;
	Address address;
	public User(int age){
		this.age = age;
		address = new Address("广州天河");
	}
	//2.重写Object的clone()方法
	@Override
	public User clone(){
		try {
			//3.调用Object类的clone方法
			return (User)super.clone();
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
}
public class CloneTest{
	public static void main(String[] args) {
		User u1 = new User(29);
		User u2 = u1.clone();
		//clone方法相当于在栈中复制了一个引用,在堆中新建了一个对象,但新建的对象的成员变量所指向的引用不会新建,所以下面语句执行结果分别为false和true
		System.out.println(u1==u2);
		System.out.println(u1.address==u2.address);
	}
}

7.3.2 java7新增Objects类
7.3.3 String、StringBuffer和StringBuilder类

String为不可变类:可以参照之前的不可变类的条件

StringBuffer、StringBuilder可变,且StringBuilder线程不安全,但效率高

  1. String构造方法
Stirng()
String(byte[] bytes,String charsetName)
String(byte[] bytes,Charset charset):根据指定字符集,将bytes解码成新String对象
String(byte[] bytes,int offset,int length):使用平台默认字符集将bytes数组从offset索引开始,长度为length的子数组解码成新String对象
String(byte[] bytes,int offset,int length,String chasetName)
String(char[] value,int offset,int count):offset为起始索引,count为截取长度
String(String original):根据字符串直接量创建一个新String对象
String(StringBuffer buffer)
String(StringBuilder builder)
  1. String方法
char charAt(int index):获取索引为index的元素
int compareTo(String anotherString):两字符串的字符序列相等返回0,不相等时,从两个字符串0索引处开始比较,返回第一个不相等的字符的差,如果较长字符串前面部分恰好等同于较短字符串,返回长度差,所谓差都是前面-后面
String concat(String str):连接字符串,与+功能相同
static String copyValueOf(char[] data):将字符数组连接成String对象,与String(char[] content):构造器功能相同
static String copyValueOf(char[] data,int offset,int count)
boolean endsWith(String suffix):该String对象以suffix结尾返回true
boolean startWith(String prefix):该String对象以prefix开始返回true
boolean startWith(String prefix,int toffset):String对象从toffset索引出算起,是否以prefix开始
boolean equals(Object anObject):如果String对象与anObject字符序列相等,返回true
boolean equalsIgnoreCase(String str):与上同,忽略字符大小写
boolean contentEquals(StringBuffer sb):String对象与sb的字符序列相同返回true
byte[] getBytes():将String对象转为byte数组
char[] toCharArray():将String对象转为char数组
void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin):复制String对象从srcBegin索引到srcEnd索引(不包含)的所有元素到dst数组中,其中dst起始位置为dstBegin索引处
int indexOf(int ch):返回Unicode值为ch的字符在字符串中第一次出现的索引
int indexOf(int ch,int fromIndex):从fromIndex开始,第一次出现的索引
int indexOf(String str)
int indexOf(String str,int fromIndex)
int lastIndexOf(int ch):返回最后一次出现的索引
//"asd".lastIndexOf("d")值为2
int lastIndexOf(int ch,int fromIndex)
int lastIndexOf(String str)
int lastIndexOf(String str,int fromIndex)
int length()
String replace(char oldChar,char newChar):字符串中所有oldChar替换为newChar
String subString(int beginIndex):获取从beginIndex索引开始到结束的子字符串
String subString(int beginIndex,int endIndex):不包含endIndex
String toLowerCase():转为小写
String toUpperCase():转为大写
static String valueOf(X x):将基本类型值转为String对象,一般可以直接用+
  1. StringBuilder与StringBuffer示例
package com;

public class StringBuilderTest {
	public static void main(String[] args) {
		StringBuilder sb = new StringBuilder();
		//追加字符串
		sb.append("java");//sb = "java"
		//插入
		sb.insert(0, "Hello ");//sb = "Hello java"
		//替换
		sb.replace(5, 6, ",");//sb = "Hello,java"
		//删除
		sb.delete(5, 6);//sb = "Hellojava"
		System.out.println(sb);
		//反转
		sb.reverse();//sb = "avajolleH"
		//值为9
		System.out.println(sb.length());
		//返回16,即对于StringBuilder对象capacity可能比length大
		System.out.println(sb.capacity());
		//改变长度
		sb.setLength(5);//sb = "avajo"
		System.out.println(sb);
		
	}
}

7.3.4 Math类

Math为工具类,提供的方法全是静态方法,同时提供了两个类变量PI和E

7.3.5 java7的ThreadLocalRandom与Random
7.3.6 BigDecimal类
  1. float与double的计算容易引起精度丢失
  2. 创建BigDecimal对象时,如果使用构造器BigDecimal(double val)还是会引起精度丢失,一般使用构造器BigDecimal(String val)或静态方法BigDecimal.valueOf(double value)
  3. BigDecimal方法
BigDecimal add(BigDecimal augend):相加
BigDecimal subtract(BigDecimal subtrahend):相减
BigDecimal subtract(BigDecimal subtrahend):相减
BigDecimal multiply(BigDecimal multiplicand):相乘
BigDecimal divide(BigDecimal divisor):相除
double doubleValue():BigDecimal转double
//1.ROUND_DOWN:直接去掉舍弃位。例:2.225667->2.22
//2.ROUND_UP:直接对舍弃位进位。例:2.224667->2.23
//3.ROUND_HALF_UP:舍弃部分>=5,进位。例:2.225->2.23,即传统的四舍五入
//4.ROUND_HALF_DOWN:舍弃部分>5,进位。例:2.2251->2.23
BigDecimal setScale(int newScale,int roundingMode):设定BigDecimal对象的小数位数(newScale)和进位方式(roundingMode)

7.4 Java8的日期、时间类

Date类设计不科学,大部分构造器与方法已经过时,Calendar类过于负责,Java8之前处理日期与时间通常使用Joda-Time库

7.4.1 Date类
7.4.2 Calendar类
7.4.3 Java8新增的日期、时间包
7.4.4 Joda-Time类库

7.5 正则表达式

7.6 国际化与格式化

7.6.4 MessageFormat
import java.text.MessageFormat;

public class HelloArg {
	public static void main(String[] args) {
		String a = new String("Hello {0}!Today is {1}");
		//Hello wsh!Today is 星期三
		System.out.println(MessageFormat.format(a, "wsh","星期三"));
	}
}

7.6.6 NumberFormat
import java.text.NumberFormat;
import java.util.Locale;

public class NumberFormatTest {
	public static void main(String[] args) {
		//返回中国的数值格式器
		NumberFormat nm1 = NumberFormat.getNumberInstance(Locale.CHINA);
		//返回中国的百分数格式器
		NumberFormat nm2 = NumberFormat.getPercentInstance(Locale.CHINA);
		//返回中国的货币格式器
		NumberFormat nm3 = NumberFormat.getCurrencyInstance(Locale.CHINA);
		NumberFormat nm4 = NumberFormat.getNumberInstance();
		NumberFormat nm5 = NumberFormat.getPercentInstance();
		NumberFormat nm6 = NumberFormat.getCurrencyInstance();
		//56
		System.out.println(nm1.format(56));
		//5,600%
		System.out.println(nm2.format(56));
		//¥56.00
		System.out.println(nm3.format(56));
		System.out.println(nm4.format(56));
		System.out.println(nm5.format(56));
		System.out.println(nm6.format(56));
	}
}

7.6.8 SimpleDateFormat
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatTest {
	public static void main(String[] args) throws ParseException {
		Date d = new Date();
		SimpleDateFormat sdf1 = new SimpleDateFormat("Gyyyy年中第D天"); //Date转String,使用format
		String dateStr = sdf1.format(d);
		System.out.println(dateStr);
		
		String str = "14###三月##21";
		SimpleDateFormat sdf2 = new SimpleDateFormat("y###MMM##d");
		//String转Date使用parse
		Date d1 = sdf2.parse(str);
		System.out.println(d1);
	}
}

发布了32 篇原创文章 · 获赞 0 · 访问量 949

猜你喜欢

转载自blog.csdn.net/hanzong110/article/details/102470859