Java常用类库方法举例说明

Java 专栏收录该内容
69 篇文章 0 订阅

引用致谢:
https://www.cnblogs.com/weink1215/p/4433790.html

前言:
JAVA程序设计就是定义类的过程,
Java

一、Object 类中的toString()方法

`toString()`作为基础类库中的方法,程序会默认使用,其结果就是:

把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码(类似@15db9742这样的东东),它的值大概就是等于getClass().getName()+’@’+Integer.toHexString(hashCode())
在这里插入图片描述

在这里插入图片描述

为什么要重写toString()方法?

简单一句话就是重写toString() 可以理解为是对对象在打印输出时候的一种格式化。这样做符合业务逻辑,显示结果人性化。
object类里的toString只是
hash码 这玩意是给机器看的,平凡的人看不懂
总结:在这里插入图片描述

二、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;
    }
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值