一.Scanner获取键盘输入
1.主要方法有:(1)hasNextXxx(); 是否还有下一个输入项
(2)nextXxx(); 获取下一个输入项
(3)还可以文件输入,这里省略;
例子:
importjava.util.Scanner;/***
*@authorfengkuirui
* @date 2017-02-08
* Scanner获取键盘输入;*/
public classScannerKeyBoardTest {public static voidmain(String[] args) {//System.in代表标准输入,也就是键盘输入;
Scanner cin = newScanner(System.in);//默认空格 \t \n为分隔符
cin.useDelimiter("\n");//设置\n为输入分隔符
while(cin.hasNext()){//判断是否还有下一个项//输出输入项
System.out.println(cin.next());
}
}
}
2.所有方法一览表
二、System的相关用法
System类代表当前Java程序的与运行平台,程序无法创建System的对象,System类提供了一下类方法和类变量,允许直接使用。
1.获取系统的环境变量
importjava.util.Map;/***
*@authorfengkuirui
* @date 2017-02-08
* 获取系统变量*/
public classSystemTest {public static voidmain(String[] args) {//获取系统的环境变量;
Map env =System.getenv();for(String name:env.keySet()){//遍历集合
System.out.println(name+" ----> "+env.get(name));
}
}
}
测试结果如下:
2.区别相同的Hashode码而不同的对象;
/***
*@authorfengkuirui
* @date 2017-02-07
* 区别于HashCode,*/
public classIdentityHashCode {public static voidmain(String[] args) {
String s1= new String("Java");
String s2= new String("Java");
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(System.identityHashCode(s1));
System.out.println(System.identityHashCode(s2));
}
}
三、Runtime类
Runtime类代表Java程序的运行环境,每个程序都有一个与之对象的Runtime实例,应用程序不能自己创建Runtime实例,只能依靠getRuntime()方法获取;
1.Runtime获取JVM的相关信息
/***
*@authorfengkuirui
* @date 2017-02-07
* Runtime测试*/
public classRuntimeTest {public static voidmain(String[] args) {
Runtime rt=Runtime.getRuntime();
System.out.println("处理器数量"+rt.availableProcessors());
System.out.println("空闲内存"+rt.freeMemory());
System.out.println("总内存"+rt.totalMemory());
System.out.println("最大可用内存"+rt.maxMemory());
}
}
2.Runtime单独启动一个进程来运行操作系统的命令
/***
*@authorfengkuirui
* @date 2017-02-07
* 单独启动一个进程来运行操作系统后对明令
**/
public classExecTest {public static void main(String[] args) throwsException {
Runtime rt=Runtime.getRuntime();
rt.exec("notepad.exe");//命令行启动记事本
}
}
四、常用类
1.Object类
Object类是所有类的父亲,也就是java允许把任何类型的对象赋值给Object类
所提供的的常用方法:
boolean equals(Object obj) 判断两个对象的值是否相等
Class> getClas() 返回运行时类
int hashCode() 返回该对象的hashCode值
String toString() 返回给对象的字符串表示
Object clone() 自我copy机制十分高效,
系统默认拷贝比静态copy速度快到两倍
浅克隆--只克隆该对象的所有成员变量,不会对引用类型的成员变量值所引用的对象进行克隆
深克隆--则全部拷贝
简单应用:
/***
*@authorfengkuirui
* @date 2017-02-08
* 实现自我克隆*/
classAddress{
String detail;publicAddress(String detail){this.detail =detail;
}
}//实现Clone接口
class User implementsCloneable{intage;
Address address;public User(intage){this.age =age;
address= new Address("china");
}//super.clone()来实现clone()
public User clone()throwsCloneNotSupportedException{return (User)super.clone();
}
}public classCloneTest {public static void main(String[] args)throwsCloneNotSupportedException {
User u1= new User(29);//通过clone得到u2
User u2 =u1.clone();//判断u1和u2是否相同
System.out.println(u1 ==u2);//判断u1,u2的address是否相同
System.out.println(u1.address ==u2.address);
}
}
结果如下:
2.Objects(java 7 新增)
允许出现null,一个空的对象的hashCode值为0,toString为null而不是抛出异常,减少了空指针的异常抛出
样例:
importjava.util.Objects;/***
*@authorfengkuirui
* @date 2017-02-08
* Objects简单测试*/
public classObjectsTest {//定义一个obj,默认值为null;
staticObjectsTest obj;public static voidmain(String[] args) {//输出obj的hashCode
System.out.println(Objects.hashCode(obj));//输出obj的toString();
System.out.println(Objects.toString(obj));
}
}
结果如下:
3.String,StringBuffer,StringBuilder类
String类为不可变的字符序列,每次改变时,本身并不改变,而是重新创建堆,这样就会浪费大量内存,造成较大开销;
StringBuffer类和StringBuilder类本质上是类似的,知识StringBuffer是线程安全的,而StringBuilder类没有实现线程安全机制,则不安全,但是其性能较高。
具体的方法将不一一叙述。
4.Math类
Math提供基本的数学运算方法。
5.ThreadLocalRandom和Random类
Random类专门用于产生一个伪随机数。ThreadLocalRandom是Random的增强版,在并发访问的环境下,使用前者代替后者可以减少资源竞争,保证系统具有良好的线程安全选性。
6.BigDecimal类
前边所提到的float,double两种基本的浮点类型已经指出,在运算时很容易引起精度丢失:
样例:
/***
*@authorfengkuirui
* @date 2017-02-08
* 精度丢失*/
public classDoubleTest {public static voidmain(String[] args) {
System.out.println("0.05 + 0.01 = "+(0.05+0.01));
System.out.println("1.0 - 0.42 = "+(1.0-0.42));
System.out.println("4.015 * 100 = "+(4.015*100));
System.out.println("123.3 / 100 = "+(123.3/100));
}
}
针对上面的问题,Java提供了BigDecimal类,该类提供大量构造器用于创建BigDecimal对象,就能解决这个精度丢失的问题;
样例:
/***@authorfengkuirui
* @date 2017-02-08
* 解决精度丢失问题
**/
importjava.math.BigDecimal;public classBigDecimalTest {public static voidmain(String[] args) {
BigDecimal f1= new BigDecimal("0.05");
BigDecimal f2= BigDecimal.valueOf(0.01);
BigDecimal f3= new BigDecimal(0.05);
System.out.println("使用String作为构造器参数");
System.out.println("0.05 + 0.01 = "+f1.add(f2));
System.out.println("0.05 - 0.01 = "+f1.subtract(f2));
System.out.println("使用double作为构造器的参数");
System.out.println("0.05 + 0.01 = "+f3.add(f2));
System.out.println("0.05 - 0.01 = "+f3.subtract(f2));
}
}
结果如下:
7.日期类
(1)Date类,其大部分的构造器和方法都已近过时了,所以就详细学习了;
(2)Calendar类
Calendaer类在Date的基础上,更好的处理处理时间,该类是个抽象类,不能用构造器来创建对象,但是其有几个静态的getInstance()方法来获取Calendar对象。
样例如下:
importjava.util.Calendar;importjava.util.Date;/***
*@authorfengkuirui
* @date 2017-02-08
**/
public classCalendarTest {public static voidmain(String[] args) {//创建一个calendar默认对象
Calendar cal =Calendar.getInstance();//从中获取Date对象
Date date =cal.getTime();//通过Date获取Calendar对象//必须先获得Calendar的一个实例
Calendar cal2 =Calendar.getInstance();
cal2.setTime(date);
}
}
Calendar的常用方法:
void add(int field, int amount);
int get(int field);
void roll(int field, int amount);
(3)DateTimeFormatter类完成格式化