天天看點

Java常用類庫方法舉例說明

前言:

JAVA程式設計就是定義類的過程,

Java

一、Object 類中的toString()方法

`toString()`作為基礎類庫中的方法,程式會預設使用,其結果就是:      

把字元串的直接列印,數字的要轉化成字元再列印,而對象,則直接列印該對象的hash碼(類似​

​@15db9742​

​​這樣的東東),它的值大概就是等于​

​getClass().getName()+’@’+Integer.toHexString(hashCode())​

Java常用類庫方法舉例說明
Java常用類庫方法舉例說明

為什麼要重寫toString()方法?

簡單一句話就是重寫​

​toString()​

​ 可以了解為是對對象在列印輸出時候的一種格式化。這樣做符合業務邏輯,顯示結果人性化。

object類裡的​

​toString​

​隻是

hash碼 這玩意是給機器看的,平凡的人看不懂

總結:

Java常用類庫方法舉例說明

二、Object類中的equals()方法與==對比說明

equals() 方法用于将字元串與指定的對象比較      

1、== 如果作用于基本資料類型,則比較的是值是否相等;

如果作用于引用類型,則比較的是變量所指向的對象的位址

2、equals 對于非String、Date類型比較的是引用類型的變量所指向的對象的位址

但對于String、Date類型,在其類中重寫了equals(),是以比較的是值

3、 Object類型相等判斷為什麼重寫equals()和hashcode()

equals()方法是比較兩個對象的記憶體位址是否相等,如果不重寫,顯然兩個對象由于不同存儲位址是以是不相等的

4、 重寫equals()為什麼一定要重寫hashcode()

如果兩個對象判斷相等隻重寫了euqals()方法,而沒有重寫hashcode()方法,雖然p1.equals(p2)結果是true,但執行p1.hashCode()==p2.hashCode()結果卻是false,這與“兩個對象相等,其hashcode必然相等”沖突,是以重寫了equals()必然需要重寫hashcode()

hashcode()判斷是equals()判斷的先決條件,是以對象重寫了equals()需要重寫hashcode()

package nio;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class ListTest {

    public static void main(String[] args) {
        Person p1 = new Person(10, "張三");
        Person p2 = new Person(10, "張三");
        System.out.println(p1.equals(p2));
        System.out.println(p1.hashCode()==p2.hashCode());
        
    }
    
}

class Person {
    int age;
    String name;

    public Person(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object obj) {  //重寫equals方法
        boolean flag=false;
        if(this==obj) {
            flag=true;
        }
        if(null != obj) {
            Person other=(Person) obj;   //對象轉化為person類型對象
            if((age==other.age) && (name==other.name)){
                flag=true;
            }
        }
        
        return flag;
    }

    @Override
    public int hashCode() {
        final int prime=31;
        int result=1;
        result=prime*result+age;
        result=prime*result+((name==null)?0:name.hashCode());
        return result;
    }
}

//如果不重寫equals方法則 System.out.println(p1.equals(p2))傳回false
//如果不重寫hashcode方法則System.out.println(p1.hashCode()==p2.hashCode())傳回false      

三、Math類的應用

​Math.PI​

​​ 記錄的圓周率

​​

​Math.E​

​​ 記錄e的常量

Math中還有一些類似的常量,都是一些工程數學常用量。

​​

​Math.abs​

​​ 求絕對值

​​

​Math.sin​

​​ 正弦函數 Math.asin 反正弦函數

​​

​Math.cos​

​​ 餘弦函數 Math.acos 反餘弦函數

​​

​Math.tan​

​​ 正切函數 Math.atan 反正切函數 Math.atan2 商的反正切函數

​​

​Math.toDegrees​

​​ 弧度轉化為角度 Math.toRadians 角度轉化為弧度

​​

​Math.ceil​

​​ 得到不小于某數的最大整數

​​

​Math.floor​

​​ 得到不大于某數的最大整數

​​

​Math.IEEEremainder​

​​ 求餘

​​

​Math.max​

​​ 求兩數中最大

​​

​Math.min​

​​ 求兩數中最小

​​

​Math.sqrt​

​​ 求開方

​​

​Math.pow​

​​ 求某數的任意次方, 抛出ArithmeticException處理溢出異常

​​

​Math.exp​

​​ 求e的任意次方

​​

​Math.log10​

​​ 以10為底的對數

​​

​Math.log​

​​ 自然對數

​​

​Math.rint​

​​ 求距離某數最近的整數(可能比某數大,也可能比它小)

​​

​Math.round​

​​ 同上,傳回int型或者long型(上一個函數傳回double型)

​​

​Math.random​

​ 傳回0,1之間的一個随機數

四、Random類

Random類中實作的随機算法是僞随機,也就是有規則的随機。在進行随機時,随機算法的起源數字稱為種子數(seed),在種子數的基礎上進行一定的變換,進而産生需要的随機數字。

相同種子數的Random對象,相同次數生成的随機數字是完全相同的。也就是說,兩個種子數相同的Random對象,第一次生成的随機數字完全相同,第二次生成的随機數字也完全相同。這點在生成多個随機數字時需要特别注意。

生成随機數

Random r = new Random();
 int number = r.nextInt();      

下面介紹一下Random類的使用,以及如何生成指定區間的随機數組以及實作程式中要求的幾率。示例如下;

package Seventh;

import java.util.Random;

public class Randemo {

  public static void main(String[] args) {
    // TODO Auto-generated method stub
     Random r = new Random();
          int n5 = r.nextInt(100);
          String ran = "";
          if (n5 < 55) {       //55個數字的區間,55%的幾率
              ran = "55%";
          } else if (n5 < 95) {//[55,95),40個數字的區間,40%的幾率
              ran = "40%";
          } else {
              ran = "5%";     //剩餘幾率,你懂得!
          }
          System.out.println(ran);
  }

}      

五、一些常用的方法

轉小寫

//轉小寫
    public static String first2low(String str){
        String s = "";
        s = str.substring(0, 1).toLowerCase() + str.substring(1);

        return s;
    }      

轉大寫

// 轉大寫
    public static String first2upper(String str){
        String s = "";
        s = str.substring(0, 1).toUpperCase() + str.substring(1);

        return s;
    }      

字元轉List

// 字元轉List 
    public static List<String> str2list(String s)
    throws IOException {
        List list = new ArrayList();
        if ((s != null) && (!s.equals(""))){
            StringReader fr = new StringReader(s);
            BufferedReader br = new BufferedReader(fr);
            String aline = "";
            while ((aline = br.readLine()) != null){
                list.add(aline);
            }
        }

        return list;
    }      

格式化日期

// 格式化日期 
    public static Date formatDate(String s){
        Date d = null;
        try {
            d = dateFormat.parse(s);
        } catch (Exception localException){
        }

        return d;
    }      

格式化日期

// 格式化日期 
    public static Date formatDate(String s, String format){
        Date d = null;
        try {
            SimpleDateFormat dFormat = new SimpleDateFormat(format);
            d = dFormat.parse(s);
        } catch (Exception localException){
        }

        return d;
    }      

格式化日期

// 格式化日期 
    public static String formatTime(String format, Object v){
        if (v == null)
            return null;
        if (v.equals(""))
            return "";
        SimpleDateFormat df = new SimpleDateFormat(format);

        return df.format(v);
    }      

格式化日期 轉為yyyy-MM-dd HH:mm:ss 格式

// 格式化日期 轉為yyyy-MM-dd HH:mm:ss 格式
    public static String formatLongDate(Object v){
        if ((v == null) || (v.equals("")))
            return "";
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        return df.format(v);
    }      

格式化日期 轉為yyyy-MM-dd 格式

// 格式化日期 轉為yyyy-MM-dd 格式
    public static String formatShortDate(Object v){
        if (v == null)
            return null;
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

        return df.format(v);
    }      

UTF-8解碼

// UTF-8解碼
    public static String decode(String s){
        String ret = s;
        try {
            ret = URLDecoder.decode(s.trim(), "UTF-8");
        } catch (Exception localException){
        }

        return ret;
    }      

UTF-8編碼

// UTF-8編碼
    public static String encode(String s){
        String ret = s;
        try {
            ret = URLEncoder.encode(s.trim(), "UTF-8");
        } catch (Exception localException){
        }

        return ret;
    }