天天看点

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;
    }