一.Scanner获取键盘输入
1.主要方法有:(1)hasNextXxx(); 是否还有下一个输入项
(2)nextXxx(); 获取下一个输入项
(3)还可以文件输入,这里省略;
例子:
import java.util.Scanner; /** * * @author fengkuirui * @date 2017-02-08 * Scanner获取键盘输入; */ public class ScannerKeyBoardTest { public static void main(String[] args) { //System.in代表标准输入,也就是键盘输入; Scanner cin = new Scanner(System.in); //默认空格 为分隔符 cin.useDelimiter(" ");//设置 为输入分隔符 while(cin.hasNext()){//判断是否还有下一个项 //输出输入项 System.out.println(cin.next()); } } }
2.所有方法一览表
二、System的相关用法
System类代表当前Java程序的与运行平台,程序无法创建System的对象,System类提供了一下类方法和类变量,允许直接使用。
1.获取系统的环境变量
import java.util.Map; /** * * @author fengkuirui * @date 2017-02-08 * 获取系统变量 */ public class SystemTest { public static void main(String[] args) { //获取系统的环境变量; Map<String,String> env = System.getenv(); for(String name:env.keySet()){//遍历集合 System.out.println(name+" ----> "+env.get(name)); } } }
测试结果如下:
2.区别相同的Hashode码而不同的对象;
/** * * @author fengkuirui * @date 2017-02-07 * 区别于HashCode, */ public class IdentityHashCode { public static void main(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的相关信息
/** * * @author fengkuirui * @date 2017-02-07 * Runtime测试 */ public class RuntimeTest { public static void main(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单独启动一个进程来运行操作系统的命令
/** * * @author fengkuirui * @date 2017-02-07 * 单独启动一个进程来运行操作系统后对明令 * */ public class ExecTest { public static void main(String[] args) throws Exception { Runtime rt = Runtime.getRuntime(); rt.exec("notepad.exe");//命令行启动记事本 } }
四、常用类
1.Object类
/** * * @author fengkuirui * @date 2017-02-08 * 实现自我克隆 */ class Address{ String detail; public Address(String detail){ this.detail = detail; } } //实现Clone接口 class User implements Cloneable{ int age; Address address; public User(int age){ this.age = age; address = new Address("china"); } //super.clone()来实现clone() public User clone()throws CloneNotSupportedException{ return (User)super.clone(); } } public class CloneTest { public static void main(String[] args)throws CloneNotSupportedException { 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); } }
结果如下:
import java.util.Objects; /** * * @author fengkuirui * @date 2017-02-08 * Objects简单测试 */ public class ObjectsTest { //定义一个obj,默认值为null; static ObjectsTest obj; public static void main(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两种基本的浮点类型已经指出,在运算时很容易引起精度丢失:
样例:
/** * * @author fengkuirui * @date 2017-02-08 * 精度丢失 */ public class DoubleTest { public static void main(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对象,就能解决这个精度丢失的问题;
样例:
/** * @author fengkuirui * @date 2017-02-08 * 解决精度丢失问题 **/ import java.math.BigDecimal; public class BigDecimalTest { public static void main(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对象。
样例如下:
import java.util.Calendar; import java.util.Date; /** * * @author fengkuirui * @date 2017-02-08 * */ public class CalendarTest { public static void main(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类完成格式化