Java常用类

Posted on 2017-02-08 11:13  fkr  阅读(176)  评论(0编辑  收藏  举报

  一.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);
        //默认空格 \t \n为分隔符
        
        cin.useDelimiter("\n");//设置\n为输入分隔符
        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类

      Object类是所有类的父亲,也就是java允许把任何类型的对象赋值给Object类
         所提供的的常用方法:     
               boolean equals(Object obj) 判断两个对象的值是否相等
               Class<?> getClas() 返回运行时类
               int hashCode() 返回该对象的hashCode值
               String toString() 返回给对象的字符串表示
               Object clone() 自我copy机制十分高效,
                    系统默认拷贝比静态copy速度快到两倍
               浅克隆--只克隆该对象的所有成员变量,不会对引用类型的成员变量值所引用的对象进行克隆
               深克隆--则全部拷贝
     简单应用:
      
/**
 * 
 * @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);
    }
}

  结果如下:

    

 

       2.Objects(java 7 新增)
             允许出现null,一个空的对象的hashCode值为0,toString为null而不是抛出异常,减少了空指针的异常抛出
        样例:
        
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类完成格式化