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);
    }
}
相关推荐
没有bug.的程序员11 分钟前
JAVA面试宝典 -《 架构演进:从单体到 Service Mesh》
java·面试·架构
宴之敖者、21 分钟前
数组——初识数据结构
c语言·开发语言·数据结构·算法
青小莫24 分钟前
c语言-数据结构-二叉树OJ
c语言·开发语言·数据结构·二叉树·力扣
典学长编程26 分钟前
Java从入门到精通!第十一天(Java常见的数据结构)
java·开发语言·数据结构
后端小张30 分钟前
智谱AI图生视频:从批处理到多线程优化
开发语言·人工智能·ai·langchain·音视频
m0dw38 分钟前
js迭代器
开发语言·前端·javascript
皮皮林55142 分钟前
设计一个多租户 SaaS 系统,如何实现租户数据隔离与资源配额控制?
java·saas
霍格沃兹软件测试开发43 分钟前
Playwright 自动化测试系列(6)| 第三阶段:测试框架集成指南:参数化测试 + 多浏览器并行执行
java·数据库·mysql·自动化
Bonnie_12151 小时前
02-netty基础-java四种IO模型
java·开发语言·nio·jetty
我不是星海2 小时前
建造者设计模式
java·开发语言