Java常用API(1)

一、Object

Object是所有类的超级父类
equals hashCode toString clone getClass
native修饰方法 这个方法并不是java语言编写多数是由C语言后台处理
equals return this==obj

equals和hashCode原则
equals比较两个对象如果为true,这个两个对象的hashCode必须一样

复制代码
package com.easy722;

import java.util.Objects;

public class EasyA {
   
    public static void main(String[] args) {
        //== 在引用类型中比较两个对象是否是同一个对象(地址是否一样)
        Object obj=new Object();
        Object obja=obj;
        System.out.println(obj==obja);//true
        Object objb=new Object();
        Object objc=new Object();
        System.out.println("objb==objc");//false

        //equals比较是否是相同的
        //如果要达到比较是否相同的效果,要对equals方法进行重写

        User userA=new User("zhangsan","123123");
        User userB=new User("zhangsan","123123");
        System.out.println(userA.equals(userB));//false
    }
}

class User{
    String username;
    String password;

    User(String username,String password){
        this.password=password;
        this.username=username;
    }

    /*public boolean equals(Object obj){
        //比较用户名和密码
        if(obj instanceof User) {
            User user = (User) obj;
            if(this.username.equals(user.username)&&this.password.equals(user.password)){//username属于字符串类型,就调用的字符串中的
                return true;
            }
        }
        return false;
    }*/
    //可快捷键自动生成
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return Objects.equals(username, user.username) && Objects.equals(password, user.password);
    }

    @Override
    public int hashCode() {
        return Objects.hash(username, password);
    }
}

二、字符串

注意:
所有的字符串都是常量(不可改变)
1.private final value[] 不能在类外访问,也不能重新赋值
2.在String中也没有任何一个方法去修改value[]中的内容

复制代码
import java.util.Arrays;

public class EasyB {
   
    public static void main(String[] args) {
        //字符串实例化
        String str="123";//字符串量
        String strA=new String();//""
        String strB=new String("123");
        char[] arr={};
        String strC=new String(arr);
        byte[] barr={};
        String strD=new String(barr);

        //字符串的方法
        str.equals("");//比较是否相同
        str.isEmpty();//验证字符串是否是空的
        str.toUpperCase();
        str.toLowerCase();//转成大小写
        str.getBytes();//获取byte数组 -- 一般用于流的传输
        str.charAt(1);//获取指定下标位置的字符
        str="abcabc";
        str.indexOf("a");//0,查找某一个串或字符出现的位置,找不到返回-1
        str.lastIndexOf("a");//3 查找某个元素最后出现的位置 从后往前
        str.length();//获取字符串中字符的个数
        int[] arra={};
        System.out.println(arra.length);
        str="abcabc";
        String newStr=str.replace("a","A");
        System.out.println(newStr);
        newStr=str.replaceAll(".","S");
        System.out.println(newStr);
        String[] arrs = str.split("b");//分割字符串
        System.out.println(Arrays.toString(arrs));
        str="123456789";
        newStr=str.substring(2);
        System.out.println(newStr);
        newStr=str.substring(2,6);//不包含结束为止
        System.out.println(newStr);

        //字符串常量池 字符串的比较        //在使用字符串时,先检测字符串常量池中是否有对应的字符串,如果有,就直接使用
        //如果没有,就在常量中创建该字符串并使用
        String strAA="123";
        String strBB="123";
        System.out.println(strAA==strBB);//true
        //堆
        String strCC=new String("abc");
        //创建了几个对象
        //哪些字符串会加入字符串常量池? 直接以量的方式使用的字符串
//是否所有的字符串都会加入到常量池中? 不是
//怎样将字符串加入到常量池中去? intern方法
//intern方法 返回是字符串常量池中的副本对象
//str.intern() jvm会检查字符串常量池中是否有和str相同的字符串
//如果有,直接返回字符串常量池中的对象
//如果没有,将str字符串复制一份到字符串常量池中,返回字符串常量池中的对象
//所有 stra和strb equals为true stra.intern()==strb.intern() 结果为true
        char[] carr={'2','2'};
        String cstr=new String(carr);

        String a="1234";
        String b="1234";
        String c="12"+"34";
        String d="1"+"23"+"4";
        String e=new String("1234");
        String f="12"+new String("34");//执行时才能判断出来
        String g1="12";
        String g2="34";
        String g=g1+g2;
        System.out.println(a==b);//true
        System.out.println(a==c);//true  常量计算优化--编译阶段
        System.out.println(a==d);//true
        System.out.println(a==e);//false
        System.out.println(a==f);//false
        System.out.println(e==f);//false
        System.out.println(a==g);//false g1g2是变量,g是个新的串

    }
}

三、基本数据类型的封装类型

什么是基本数据类型的封装类型,为什么需要这个类型
为了实现万物皆对象的理念
byte short int long float double char boolean
Byte Short Integer Long Float Double Character Boolean
java中提供了基本数据类型和对应的封装类型相互转换的机制
基本数据类型转成对应的封装类型:装箱
封装类型的对象转成对应的基本数据类型:拆箱

比较:基本数据类型和封装类型进行比较,将封装类型的对象拆箱,然后再和基本数据类型比较

问:String不是基本数据类型 是关键字吗?不是

String是类名,像main这种类都不是关键字

复制代码
public class EasyC {   
    int a=12;

    public static void main(String[] args){
        int a=200;
        Integer ia=200;
        ia.intValue();
        System.out.println(ia==a);

        Double dd=200.0;
        System.out.println(dd==a);//Java会统一提升到double 再比较
        //System.out.println(dd==ia); 封装类型之间不能比,比的是是否是同一个对象

        Integer a1=100;
        Integer a2=100;
        System.out.println(a1==a2);//true
        Integer a3=200;
        Integer a4=200;
        System.out.println(a3==a4);//false
        //基本数据类型的封装类型的缓存 缓存的范围 -128~127
        //哪些类型有缓存呢? 整数  浮点型没有  character  0~127  boolean两个
        //只有Integer类型的缓存范围可以调整,其他类型都不可以调整
        Character c1='\u0000';
        Character c2='\u0000';
        System.out.println(c1==c2);
        Boolean b1=true;
        Boolean b2=true;
        System.out.println(b1==b2);
        float f=12000L;//float的取值范围更大,小的可以给赋值大的
        long l=(long)12.0f;
    }
}

四、时间

复制代码
package com.easy722;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Objects;

public class EasyD {
    //时间  Date
    public static void main(String[] args) {
        java.util.Date d1=new Date();
        //当前时间
        System.out.println(d1);
        long time=d1.getTime();//获取时间戳
        System.out.println(time);
        SimpleDateFormat sdf=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss SSS");
        System.out.println(sdf.format(d1));
        LocalDateTime ltime=LocalDateTime.now();
        //时间戳从1970.7.1开始

        Math.random();//获取随机数[0-1)
        int num=(int)(Math.random()*81);
        //0-80
        num=59+(int)(Math.random()*22);
        //59-80 59+(0-21)
        Math.ceil(12.1);//向上取整 获取的double double大long类型存不下
        Math.floor(12.9999999);//向下取整 12.0
        //负数的四舍五入:
        System.out.println(Math.round(-12.4));
        System.out.println(Math.round(-12.5));//-12
        System.out.println(Math.round(-12.6));

        //Arrays 对数组操作的工具类
        //Objects 对象的工具类
        Objects.isNull(sdf);

    }
}

五、异常

1、概念:异常:程序在运行阶段,发生的一些异常情况

如果程序中抛出了异常,不进行处理,程序就会中断

2、异常的分类:运行时异常 检查型异常

1、运行时异常:只有在程序运行阶段才会抛出的异常,可以通过编码技巧规避这些异常

继承RuntimeException
2、检查时异常:在编码时必须要处理的异常

直接继承Exception

3、自定义异常

抛出异常(具体对象) throw
声明方法可能抛出的异常类型 throws

4、处理异常

处理异常 try...catch...finally
执行过程:try尝试运行可能会抛出的异常,如果try块中的代码抛出了异常对象(不抛出接着往下把try运行完)
就会跳到执行对应的的catch类(只运行一下,从上往下识别),finally块总是会运行

java 复制代码
package com.easy722;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class EasyE {
    //异常:程序在运行阶段,发生的一些异常情况
    //异常的类 Exception
    //见过的异常 ClassCastException ArrayIndexOutOfBoundsException
    //ArithmeticException
    //内存溢出 Error OutOfMemoryError
   
    public static void main(String[] args)  {
       try{
           testException(-1);
           System.out.println("try代码块");
       } catch (EasyException|NullPointerException e) {
           e.printStackTrace();//捕捉,打印异常
           System.out.println("catch代码块");
       }//catch(NullPointerException e){}
       catch(Exception e){
            //大的异常放下面
       }
        finally{
           System.out.println("finally代码块");
       }

    }
    public static void testException(int price)throws EasyException,NullPointerException{
        if (price<0){
            throw new EasyException("价格为负数");
        }
        if(price==0){
            throw new NullPointerException();
        }
        System.out.println("你输入的价格是"+price);
    }
    //运行时异常可以不用throws
    public static void testRuntimeException(int price){
        if (price<0){
            throw new EasyRuntimeException("价格为负数");
        }
        System.out.println("你输入的价格是"+price);
    }
}

class EasyException extends Exception{
    public EasyException(){}
    public EasyException(String msg){
        super(msg);
    }
}

class EasyRuntimeException extends RuntimeException{
    public EasyRuntimeException(){}
    public EasyRuntimeException(String msg){
        super(msg);
    }
}
相关推荐
likuolei12 分钟前
XQuery 完整语法速查表(2025 最新版,XQuery 3.1)
xml·java·数据库
雨中飘荡的记忆17 分钟前
LangChain4j 实战指南
java·langchain
okseekw19 分钟前
Java 中的方法:从定义到重载的完整指南
java
雨中飘荡的记忆20 分钟前
深入理解设计模式之适配器模式
java·设计模式
用户849137175471621 分钟前
生产级故障排查实战:从制造 OOM 到 IDEA Profiler 深度破案
java·jvm
雨中飘荡的记忆24 分钟前
深入理解设计模式之装饰者模式
java·设计模式
雨中飘荡的记忆28 分钟前
秒杀系统设计与实现
java·redis·lua
CryptoPP33 分钟前
使用 KLineChart 这个轻量级的前端图表库
服务器·开发语言·前端·windows·后端·golang
18你磊哥39 分钟前
chromedriver.exe的使用和python基本处理
开发语言·python
小坏讲微服务1 小时前
Spring Cloud Alibaba 整合 Scala 教程完整使用
java·开发语言·分布式·spring cloud·sentinel·scala·后端开发