Java的几大常用类

news2024/9/27 15:20:39

一、Object类

超类、基类,所有类的直接或者间接父类,位于继承树的最顶层。

任何类,如果没有写 extends 显示继承某个类,都直接默认继承 Object 类,否则为间接继承。

Object 类中所定义的方法,是所有对象都具备的方法。

Object 类型可以存储任何对象:

  1. 作为参数,可以接受任何对象
  2. 作为返回值,可以返回任何对象

1.getClass() 方法

public final Class<?> getClass(){
}

返回引用中存储的实际对象类型。

例如:判断两数据类型是否相同↓↓↓

Student类:

package com.scaaner;
public class Student {
    private String name;
    private int age;
    //无参构造器
    public Student(){

    }
    //有参构造器
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;

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

方法类Demo1:

package com.scaaner;
public class Demo1 {
    public static void main(String[] args) {
        Student s1 = new Student("A",22);
        Student s2 = new Student("B",12);
        //判断s1和s2是否为同一类型
        Class<? extends Student> class1 = s1.getClass();
        Class<? extends Student> class2 = s2.getClass();
        if(class1 == class2){
            System.out.println("s1和s2是同一类型");
        }else{
            System.out.println("s1和s2不是同一类型");
        }
    }
}

输出结果:
在这里插入图片描述

2.hashCode()方法

public int hashCode() {
}

返回该对象的哈希码值

哈希值根据对象的地址字符串数字使用hash算法计算出的int类型的数值。

一般情况下,相同对象返回相同哈希码。

同用Student类

在这里插入图片描述

3.toString()方法

public String toString(){
}

返回该对象的字符串表示(表现形式)

可以根据程序要求覆盖(重写)该方法,如:展示对象各个属性值。

同用Student类

(1)直接调用:

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

(2) 重写

在这里插入图片描述

4.equals()方法

public boolean equals(Object obj){
	return (this == obj);
} 

默认实现为(this == obj),比较两个对象地址是否相同。

可进行覆盖,比较两个对象的内容是否相同。

(1)姓名和年龄不同,输出为false

在这里插入图片描述

(2)姓名和年龄相同,为什么输出还为false?

在这里插入图片描述

因为在栈中所占地址不同,即使数据相同,也还是会显示false。

那要怎样才能为true呢?

对equals方法进行重写,比较两个对象的内容是否相同。

equals()方法覆盖步骤:
比较两个引用是否指向同一个对象。
判断obj是否为null。
判断两个引用指向的实际对象类型是否一致。
强制类型转换。
依次比较各个属性值是否相同。

(3)姓名和年龄相同,输出为true

在Student类中对equals方法进行重写,比较两个对象的内容是否相同。

在这里插入图片描述

5.finalize()方法

当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。

垃圾对象:没有有效引用指向此对象时,为垃圾对象。
垃圾回收:有GC销毁垃圾对象,释放数据存储空间。
自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。
手动回收机制:使用System.gc();通知JVM执行垃圾回收。

在Student类中重写finalize方法:

在这里插入图片描述

在测试类中写:

在这里插入图片描述

二、包装类

Object可统一所有数据,包装类的默认值是null。

基本数据类型对应的包装类:
在这里插入图片描述

1.基本类型和包装类型的转换、装箱与拆箱

栈中存放基本数据类型
堆中存放引用数据类型

装箱:栈中的数据放到堆中(基本类型–>引用类型)
拆箱:堆中的对象拿到栈中(引用类型–>基本类型)

具体请看示例↓↓↓

package com.scaaner;
public class Demo1 {
    public static void main(String[] args) {
        //JDK1.5之前
        //类型转换:装箱   基本类型转引用类型过程
        //基本类型
        int num1 = 10;
        //使用Integer类创建对象
        Integer integer1 = new Integer(num1);
        Integer integer2 = Integer.valueOf(num1);
        System.out.println(
                "装箱"
        );
        System.out.println(integer1);
        System.out.println(integer2);

        //类型转换:拆箱   引用类型转基本类型过程
        Integer integer3 = new Integer(100);
        int num2 = integer3.intValue();
        System.out.println("拆箱");
        System.out.println(num2);


        //JDK1.5之后   自动装箱  拆箱
        int age = 30;
        //自动装箱
        Integer integer4 = age;
        System.out.println("自动装箱"+"\n"+integer4);
        //自动拆箱
        int age1 = integer4;
        System.out.println("自动拆箱"+"\n"+age1);
    }
}

2.基本类型和字符串的转换

(1)基本类型转字符串

详看注释↓↓↓

在这里插入图片描述

(2)字符串转基本类型

详看注释↓↓↓

在这里插入图片描述

(3)boolean字符串形式转成基本类型

" true " ----> true
非" true " ----> false

详看注释↓↓↓

在这里插入图片描述

注意:

需保证类型兼容,否则抛出NumberFormatException异常。

附加:Integer缓冲区

Java预先创建了256个常用的整数包装类型对象。

在这里插入图片描述

代码↓↓↓

import com.sun.org.apache.xpath.internal.operations.Bool;

public class Demo1 {
    public static void main(String[] args) {
        Integer integer1 = new Integer(100);
        Integer integer2 = new Integer(100);
        System.out.println(integer1 == integer2);   //false
        //为基本类型,所以放进一个数,就存进去占堆中一个空间


        Integer integer3 = 100;  //自动装箱为引用类型
        //即使用Integer integer3 = Integer.valueOf(100);的方法
        Integer integer4 = 100;
        System.out.println("------------");
        System.out.println(integer3==integer4);//true
        //指的是在堆中的一个(-128~127)之间的空间,100都只指向的是同一个位置


        Integer integer5 = 200;
        Integer integer6 = 200;
        System.out.println("------------");
        System.out.println(integer5==integer6);  //false
        //在堆中的一个(-128~127)之间的空间,超出这个范围就在堆里开辟个新空间
    }

三、String类

1.不变字符串

字符串是常量,创建之后不可改变

字符串字面值存储在字符串池中,可以共享。

方法一:

产生一个对象,字符串池中存储

String s = “Hello”;


public class Demo1 {
    public static void main(String[] args) {
        String name = "hello";    //"hello"常量存储在字符串池中
        name = "zhangsan";        //并没有修改数据,而是重新开辟了一个空间,将name指向zhangsan
        String name2 = "zhangsan";  //在字符串池中寻找对象  匹配;如果没有则重新开辟新的空间
    }
}

方法二:(浪费空间)

产生两个对象,堆、池各存储一个

String s = new String("Hello");

String的常用方法详见:String的几种常见方法

2.可变长字符串

效率比String高,比String节省内存

(1)StringBuffer

JDK1.0提供,用于多线程,运行效率慢、线程安全。

(2)StringBuilder

JDK5.0提供,用于单线程,运行效率快,线程不安全。

在这里插入图片描述
StringBuffer 和 StringBuilder 用法相同。

为什么StringBuffer和StringBuilder比String的效率高?
代码验证↓↓↓

在这里插入图片描述

在这里插入图片描述

四、BigDecimal类

先看图↓↓↓

在这里插入图片描述

double 是属于近似值存储,所以得出结果也是近似值,但误差很小。

就要使用 BigDecimal 来精确计算。

位置:java.math 包中
作用:精确计算浮点数
创建方式:BigDecimal bd = new BigDecimal(“1.0”);

加减乘除
add 加
subtract 减
multiply 乘
divide 除

除法比较特殊不能直接用:

divide(BigDecimal bd , int scal , RoundingMode mode)
  1. 参数scal:指定精确到小数点后几位。
  2. 参数mode:指定小数部分的取舍模式,通常采用四舍五入的模式。取值为BigDecimal.ROUND_HALF_UP。
public class Demo1 {
    public static void main(String[] args) {
        double d1 = 1.0;
        double d2 = 0.9;
        System.out.println(d1-d2);
        double result = (1.4-0.5)/0.9;
        System.out.println(result);
        System.out.println("-----------------");
        BigDecimal bd1 = new BigDecimal("1.0");  //后边为字符串类型
        BigDecimal bd2 = new BigDecimal("0.9");
        System.out.println(bd1.subtract(bd2));   //不能直接用运算法则   减法
        System.out.println(bd1.add(bd2));    //加法
        System.out.println(bd1.multiply(bd2));  // 乘法
        BigDecimal bd3 = new BigDecimal("1.4")
                .subtract(new BigDecimal("0.5"))
                .divide(new BigDecimal("0.9"));  //除法
        System.out.println(bd3);
        System.out.println("----------------");
        //BigDecimal bd4 = new BigDecimal("10").divide(new BigDecimal("3")); //除不尽  会报错
        BigDecimal bd4 = new BigDecimal("10").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);//表示四舍五入保留2位小数
        System.out.println(bd4);
    }
}

五、Date类

Date 表示特定的瞬间,精确到毫秒。Date 类中的大部分方法都已经被 Calendar 类中的方法所取代。

时间单位:
1s = 1000 ms
1ms = 1000 μs
1μs = 1000 ns

import java.util.Date;

public class Demo1 {
    public static void main(String[] args) {
        //1.创建Date对象
        //今天
        Date date1 = new Date();
        System.out.println(date1.toString());
        System.out.println(date1.toLocaleString());
        //昨天
        Date date2 = new Date(date1.getTime()-(60*60*24*1000));
        System.out.println(date2.toLocaleString());
        //2.方法   after   before
        boolean b1 = date1.after(date2);
        System.out.println(b1);     //true
        boolean b2 = date1.before(date2);
        System.out.println(b2);      //false
        //比较 相差多少  compareTo();
        System.out.println(date1.compareTo(date2));
        System.out.println(date2.compareTo(date1));
        System.out.println(date1.compareTo(date1));
        //equals
        System.out.println(date1.equals(date2));
    }
}

输出结果↓↓↓:
在这里插入图片描述

六、Calendar类

Calendar 提供了获取或设置各种日历字段的方法。

构造方法:
protected Calendar() :由于修饰符是protected , 所以无法直接创建该对象。

其他方法:
在这里插入图片描述

import java.util.Calendar;

public class Demo1 {
    public static void main(String[] args) {
        //1.创建Calendar对象
        Calendar calendar = Calendar.getInstance();//受保护,不能new
        System.out.println(calendar.getTime().toLocaleString());
        System.out.println(calendar.getTimeInMillis());  //毫秒
        //2.获取时间信息
        int year = calendar.get(Calendar.YEAR);   //年
        int mouth = calendar.get(Calendar.MONTH); //月
        int day = calendar.get(Calendar.DAY_OF_MONTH);   //日
        int hour = calendar.get(Calendar.HOUR_OF_DAY);   //HOUR 12小时(hour_of_day 24小时)
        int minute = calendar.get(Calendar.MINUTE);   //分钟
        int second = calendar.get(Calendar.SECOND);  //秒
        System.out.println(year + "年" + (mouth+1) + "月"+ day + "日" + hour + ":" + minute + ":" + second);
        //3.修改时间
        Calendar calendar2 = Calendar.getInstance();
        calendar2.set(Calendar.DAY_OF_MONTH,5);
        System.out.println(calendar2.getTime().toLocaleString());
        //4. add方法修改时间
        calendar2.add(Calendar.HOUR,1);  //加1小时
        System.out.println(calendar2.getTime().toLocaleString());
        calendar2.add(Calendar.HOUR,-2);  //减2小时
        System.out.println(calendar2.getTime().toLocaleString());
        //5.获取当前时间的最大/最小值
        int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
        int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);
        System.out.println(max);
        System.out.println(min);
    }
}

输出结果↓↓↓
在这里插入图片描述

七、SimpleDateFormat类

SimpleDateFormat 是一个以与语言环境相关的方式来格式化和解析日期的具体类。

进行格式化 (日期 一> 文本)、解析(文本一>日期)。

常用的时间模式字母:
在这里插入图片描述

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo1 {
    public static void main(String[] args) throws ParseException {
        //1.创建SimpleDateFormat对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        //2.创建Date
        Date date = new Date();
        //格式化date(把日期转为时间字符串)
        String str = sdf.format(date);  //format格式化
        System.out.println(str);
        //解析(把时间字符串转为日期)
        Date date1 = sdf.parse("2022/04/23");
        System.out.println(date1);
    }
}

八、System类

System 系统类,主要用于获取系统的属性数据和其他操作,构造方法是私有的,静态的。

在这里插入图片描述

public class Demo1 {
    public static void main(String[] args){
        //1.arraycopy,数组的复制
        int[] arr = {20,23,17,9,34};
        int[] dest = new int[5];
        System.arraycopy(arr,1,dest,0,4);
        //System.arraycopy(源数组,从哪个位置开始复制,目标数组,目标数组的位置,复制的长度);

        for (int i = 0; i < arr.length; i++) {
            System.out.println(dest[i]);
        }
        //2.currentTimeMillis    获取当前系统时间
        long start = System.currentTimeMillis();
        for (int i = 0; i < 999999999; i++) {
            for (int i1 = 99999; i1 > 0; i1--) {
                int result = i+i1;
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("用时:"+ (end-start)+"ms");

        new Student("A",12);
        new Student("B",2);
        //3.垃圾回收系统   System.gc
        System.gc();
        //4.退出JVM
        System.exit(0);   //已经退出,后续程序不会再执行
        System.out.println("程序结束!");
    }
}

输出结果↓↓↓
在这里插入图片描述

内容比较多!
重在理解!!
感谢ლ(°◕‵ƹ′◕ლ)!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/31517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DeeplabV3实战:基于tensorflow搭建DeeplabV3实现语义分割任务

任务描述: 语义分割是一种典型的计算机视觉问题,其是将一些图像作为输入并将它们转换为具有突出显示的感兴趣区域的掩模,即图像中的每个像素根据其所属的感兴趣对象被分配类别。如下图中左图所示,其语义是人骑自行车,语义分割的结果如右图所示,粉红色代表人,绿色代表自行…

狂神的MySQL(1)

01、什么是数据库&#xff0c;为什么要学习数据库 javaEE&#xff1a;企业级java开发 Web 前端&#xff08;页面&#xff1a;展示&#xff0c;数据&#xff01;&#xff09; 后台&#xff08;连接点&#xff1a;连接数据库JDBC&#xff0c;连接前端&#xff08;控制&#xf…

web前端-javascript-运算符(介绍说明,算术运算符、+、-、*、/、%,隐式类型转换、转换为String、转换为Number)

文章目录运算符1. 操作符说明1.1. 通过运算符可以对一个或多个值进行运算,并获取运算结果1.2. 它会将该值的类型以字符串的形式返回2. 算数运算符2.1. 当对非 Number 的值进行运算时&#xff0c;会将这些值转换为 Number 然后再运算2.2. 2.3 -2.4 \*2.5 /2.6 %3. 隐式类型转换3…

思科配置VLAN间单臂路由

思科配置VLAN间单臂路由 为什么要配置单臂路由 路由器上链接不同的VLAN的物理接口数量有限&#xff0c;随着VLAN增加端口很快就被耗尽&#xff0c;然而VLAN中继允许单个路由器物理接口接多个VLAN的流量&#xff0c;即有了单臂路由技术。 示例拓扑 本文以下图所示拓扑为例配…

mac误删除文件恢复,mac文件丢失如何找回

mac误删除文件恢复&#xff1f;相信不少朋友一开始遇到这个问题没太放在心上&#xff0c;还以为是自己误删除了&#xff0c;想着以后删除文件的时候尽量小心点&#xff0c;直到发现重要文件被删除后没有经过废纸篓&#xff0c;而被直接删除了&#xff0c;这才引起重视&#xff…

java项目-第160期ssm大学生校园兼职系统_ssm毕业设计_计算机毕业设计

java项目-第160期ssm大学生校园兼职系统_ssm毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm大学生校园兼职系统》 该项目分为3个角色&#xff0c;管理员、学生、企业。 学生角色可以访问前台&#xff0c;查看企业信息、招聘信息进行应聘。 企业角色…

Android Material Design之NavigationView(五)

先上图 使用说明 NavigationView与DrawerLayout 成对出现,经常被用作侧滑菜单,因此当我们使用 NavigationView时布局文件的根节点一定是DrawerLayout 属性 NavigationView 属性描述android:id控件idandroid:layout_width控件的长度android:layout_height控件的高度android…

关于web前端大作业的HTML网页设计——我的班级网页HTML+CSS+JavaScript

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Flink CDC 新一代数据集成框架

前言&#xff1a; 主要讲解了技术原理&#xff0c;入门与生产实践&#xff0c;主要功能&#xff1a;全增量一体化数据集成、实时数据入库入仓、最详细的教程。Flink CDC 是Apache Flink的一个重要组件&#xff0c;主要使用了CDC技术从各种数据库中获取变更流并接入到Flink中&a…

神经网络训练不起来,怎么办?

从optimization的角度&#xff0c;Cross-entropy比Mean Square Error更加适合用在分类上。使用Cross-entropy这个Loss function的时候&#xff0c;pytorch自动帮你把Soft-max加到你的Network的最后一层。 Optimization Critical Point是Saddle Point还是Local Point&#xff1…

【蓝桥杯web】第十四届蓝桥杯(Web应用开发)模拟赛1期-大学组

数据类型检测 请看这篇数据类型检测 渐变色背景生成器 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name&…

华为云安全亮相世界互联网大会

近日&#xff0c;以“共建网络世界 共创数字未来——携手构建网络空间命运共同体”为主题的世界互联网大会在浙江乌镇盛大举行。华为云安全专家团队携全新的安全运营2.0和数据安全解决方案亮相峰会现场&#xff0c;重点展示华为云在安全运营和数据方案的最新实践成果&#xff0…

小啊呜产品读书笔记001:《邱岳的产品手记-11》第21讲 产品案例分析:Fabulous的精致养成

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-11》第21讲 产品案例分析&#xff1a;Fabulous的精致养成一、今日阅读计划二、泛读&知识摘录第21讲 产品案例分析&#xff1a;Fabulous的精致养成三、头脑风暴四、思考叮嘟&#xff01;这里是小啊呜的产品进阶读书笔记整…

病毒和战争齐飞,24 届秋招会更惨吗?

2022 壬寅年&#xff0c;病毒和战争齐飞&#xff0c;流言和混乱四起。2023 届秋招的残酷已不需要再多说&#xff0c;各大平台校招社招一片哀嚎&#xff0c;如果说往年的各种帖子是在贩卖焦虑&#xff0c;今年就是实打实的就业寒冬。 先来看段分析&#xff0c;来自阮一峰大佬&a…

刷题看力扣,刷了两个月 leetcode 算法,顺利拿下百度、阿里等大厂的 offer

随着互联网寒潮的到来, 越来越多的互联网公司提高了面试的难度&#xff0c;其中之一就是加大了面试当中手撕算法题的比例。这里说的算法题不是深度学习&#xff0c;机器学习这类的算法&#xff0c;而是排序&#xff0c;广度优先&#xff0c;动态规划这类既考核数据结构也考核编…

《深入浅出Python量化交易实战》:散户也能学会的数字化交易策略

前言 您可能不知道&#xff0c;许多专业的交易机构已经采用设定程序完成自动化交易&#xff0c;通过机器语言&#xff0c;解密盘面的走势&#xff0c;从而实现持续盈利的目的。 &#xff08;文末送读者福利&#xff09; 这并非什么秘密&#xff0c;他们正是借助了这样的数字…

树和二叉树练习题

文章目录一 二叉树的五大性质二 判断题三 填空题四 选择题四 分析求解题五 算法设计题一 二叉树的五大性质 性质一&#xff1a;对于一颗二叉树&#xff0c;第i层的最大结点数量为 2i−12^{i-1} 2i−1 性质二&#xff1a;对于一颗深度为k的二叉树&#xff0c;可以具有的最大结点…

[附源码]SSM计算机毕业设计基于健身房管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于残差学习的卷积神经网络图像去噪研究-含Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、深度去噪网络结构设计✳️ 2.1 网络层数的设定✳️ 2.2 残差学习✳️ 2.3 批规范化✳️ 三、实验结果✳️ 3.1 网络训练✳️ 3.2 实验结果比较✳️ 四、参考文献✳️ 五、Matlab代码获取✳️ 一、引言 由于图像去噪问题的退化模型假设比…

如何在确保身份安全的同时改善员工体验

疫情后世界的员工已经告别了传统的工作环境。远程和混合工作是新常态&#xff0c;员工希望即使在远程工作时也能完全访问他们的工作资源。他们还可能使用多个设备&#xff08;甚至是个人设备&#xff09;来访问公司数据。 现代工作环境 — IT 挑战 由于需要考虑的因素特别多&a…