JAVA基础:常用API

一.常用类API-Object,Object

String 类

在这里插入图片描述

在这里插入图片描述

1.在对象中,输出地址

Student.java
package Test;

public class Student {//extends Object        默认继承Object
    private String name;
    private char sex;
    private int age;

    public Student() {
    }

    public Student(String name, char sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "Student {name="+name+",sex="+sex+",age="+age+"}";
    }
}
Test.java
package Test;

public class Test {
    public static void main(String[] args) {
//        toString存在的意义:
//        就是为了被子类重写,以便返回对象的内容信息,而不是地址信息!!

        Student s=new Student("周雄",'男',19);
//        String rs=s.toString();
//        System.out.println(rs);

//        System.out.println(s.toString());//输出的是地址

        //直接输出对象变量,默认可以省略toString()调用不写的
        System.out.println(s);//输出:Student {name=周雄,sex=男,age=19}

    }
}

2.在String中,直接输出内容

package Test;

public class Test2 {
    public static void main(String args[]) {
        String Str = new String("WWW.RUNOOB.COM");

        System.out.print("返回值 :" );
        System.out.println( Str.toString() );

        String a=Str.toString();
        System.out.println(a);
    }
}

equals()

在这里插入图片描述

Student.java
/**
     * 自己重写equals,自己定制相等规则,两个对象的内容一样就认为是相等的
     * s1.equals(s2)
     * 比较者:s1==this
     * 被比较者:s2==>o
     */
    @Override
    public boolean equals(Object o) {
//        1.判断o是不是学生类型
        if (o instanceof Student){
            Student s2=(Student) o;
//            2.判断2个对象的内容是否一样
            if (this.name.equals(s2.name)&&
               this.age==s2.age&&this.sex==s2.sex){
                return true;
            }else {
                return false;
            }
        }else {
//            学生只能和学生比较,否则结果一定是false
            return false;
        }
    }
Test.java
package Test;

import java.security.spec.RSAOtherPrimeInfo;

public class Test {
    public static void main(String[] args) {
        Student s1=new Student("周雄",'男',19);
        Student s2=new Student("周雄",'男',19);

//        equals默认是比较2个对象的地址是否相同,和==相同
        System.out.println(s1.equals(s2));
        System.out.println(s1==s2);
       }
}

解读官方的equals

/**
     * 定制相等规则
     * 两个对象的内容一样就认为是相等的
     * s1.equals(s2)
     * 比较者:s1==this
     * 被比较者:s2==>o
     */
    @Override
    public boolean equals(Object o) {//这里可以是任意对象,特变灵活
        //这里的this代表s1
        if (this == o) return true;
//        o为null   o不是学生类型  返回false
        if (o == null || this.getClass() != o.getClass()) return false;
//        3.说明o一定是学生类型且不为null
        Student student = (Student) o;
        return sex == student.sex && age == student.age && Objects.equals(name, student.name);
    }

Object的Objects类的equals

package Test;
import java.util.Objects;

public class Test {
    public static void main(String[] args) {
        Student s1=new Student("周雄",'男',19);
        Student s2=new Student("周雄",'男',19);

//        equals默认是比较2个对象的地址是否相同,和==相同
        System.out.println(Objects.equals(s1, s2));
        
//      public static boolean equals(Object a, Object b) {
    //        return (a == b) || (a != null && a.equals(b));
    //    }
       }
}

在这里插入图片描述

二.StringBuilder

StringBuilder高效的原因

在这里插入图片描述
在这里插入图片描述

StringBuffer的使用

package Test;
import java.util.Objects;
//目标:学会使用StringBuffer操作字符串,最终还需要知道它性能好的原因:
public class Test {
    public static void main(String[] args) {
//    append的源码:
//    @Override
//    public synchronized StringBuffer append(String str) {
//        toStringCache = null;
//        super.append(str);
//        return this;//this就是指对象的实例
//    }
          StringBuffer sb=new StringBuffer();
          sb.append("a");
          sb.append("b");
          sb.append("c");
          sb.append("lp[d");
          System.out.println(sb);

          StringBuffer sb1=new StringBuffer();
//          支持链式编程
        sb1.append("a").append("b").append("c").append("123456");

//        反转
        sb1.reverse().append("110");
        System.out.println(sb1);

        System.out.println(sb1.length());

//        注意:StringBuffer只是拼接字符串的手段:效率好
//        最终的目的是还要恢复成String类型
        StringBuffer sb2=new StringBuffer();
        sb2.append("123").append("456");
//        恢复成String类型
        String rs=sb2.toString();
        check(rs);
    }

    private static void check(String rs) {
        System.out.println(rs);
    }
}

案例

在这里插入图片描述

package Test;


public class Test {
    public static void main(String[] args) {
        int[] arr1=null;
        System.out.println(toString(arr1));

        int[] arr2= {10,88,99};
        System.out.println(toString(arr1));

        int[] arr3= {};
        System.out.println(toString(arr1));
    }

//    1.定义方法接受任意整形数组,返回数组内容格式
    public static String toString(int[] arr){
        if (arr!=null){
//            2.开始拼接内容
            StringBuffer sb=new StringBuffer("[");
            for (int i=0;i<arr.length;i++){
                sb.append(arr[i]).append(i==arr.length-1 ? "":", ");
            }
            sb.append("]");
            return sb.toString();
        }else {
            return null;
        }
    }


}

三.Math类

在这里插入图片描述
在这里插入图片描述

四.System类

在这里插入图片描述

package Test;

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        System.out.println("程序开始.....");
//        System.exit(0);//JVM终止

//        2.计算机认为时间有起源:返回1970-1-1 00:00:00 走到此刻的总的毫秒数:时间毫秒数
        long time = System.currentTimeMillis();
        System.out.println(time);
        long startTime= System.currentTimeMillis();
//        进行时间的计算:性能分析
        for (int i=0;i<100;i++){
            System.out.println("输出:"+i);
        }
        long endTime=System.currentTimeMillis();
        System.out.println((endTime-startTime)/1000.0+"s");

//        3.左数组拷贝(了解)
//        arraycopy(Object src,  int  srcPos,
//        Object dest, int destPos,
//        int length);
//        参数一:被拷贝的数组
//        参数二:从哪个索引位置开始拷贝
//        参数三:赋值的目标数组
//        参数四:粘贴位置
//        参数五:拷贝元素的个数
        int[] arr1={12,20,30,40,50,60,70};
        int[] arr2=new int[6];//[0,0,0,0,0,0]==>[0,0,40,50,60,0]
        System.arraycopy(arr1,3,arr2,2,3);
        System.out.println(Arrays.toString(arr2));

        System.out.println("程序结束....");

    }
}

输出结果

0.014s
[0, 0, 40, 50, 60, 0]
程序结束....

五.BigDecimal类:

在这里插入图片描述

package Test;


import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
//        浮点型运算的时候直接+  *  /可能会出现数据失真(精度问题)
        System.out.println(0.09+0.01);
        System.out.println(1.0-0.32);
        System.out.println(1.015*100);
        System.out.println(1.301/100);

        System.out.println("------------------------------");
        double a=0.1;
        double b=0.2;
        double c=a+b;
        System.out.println(c);
        System.out.println("---------------------------------");
//        包装浮点型数据成为大数据对象BigDecimal
        BigDecimal a1=BigDecimal.valueOf(a);
        BigDecimal b1=BigDecimal.valueOf(b);

        BigDecimal c1=a1.add(b1);//加法
//        BigDecimal c1=a1.subtract(b1);//减法
//        BigDecimal c1=a1.multiply(b1);//乘法
//        BigDecimal c1=a1.divide(b1);//加法
        System.out.println(c1);


        //目的:double
        double rs=c1.doubleValue();
        System.out.println(rs);

//        注意事项:BigDecimal是一定要精度运算的
        BigDecimal a11=BigDecimal.valueOf(10.0);//内部会返回一个对象
        BigDecimal b11=BigDecimal.valueOf(3.0);

//        参数一:除数  参数二:保留小数位数   参数二:舍入模式
        BigDecimal c11=a11.divide(b11,2, RoundingMode.HALF_UP);//3.333333333333
        System.out.println(c11);

        System.out.println("------------------------------");

    }
}

valueOf的源码

public static BigDecimal valueOf(double val) {
            // Reminder: a zero double returns '0.0', so we cannot fastpath
            // to use the constant ZERO.  This might be important enough to
            // justify a factory approach, a cache, or a few private
            // constants, later.
            return new BigDecimal(Double.toString(val));
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值