Java中的常用类保姆级教程(上)

简介: ​ 把很多完成通用功能的方法抽取分类存放到类中,这些类就叫工具类。 Java中的基本数据类型没有方法和属性,而包装类就是为了让这些拥有方法和属性,实现对象化交互,数值型包装类都继承至Number,而字符型和布尔型继承至Object。

1.JPG

一、工具类


1.1、工具类的设计


把很多完成通用功能的方法抽取分类存放到类中,这些类就叫工具类


工具类如何设计(分两种)

  1. 工具方法全部使用public static修饰**(常用)**
    此时只需要使用工具类类名调用工具方法,且须把工具类的构造器私有化,防止创建工具类的对象来调用静态方法


  1. 如果工具方法没有使用static修饰
    此时必须使用工具类的对象去调用工具类的方法,且必须把工具类设计成单例模式


1.1.1、公共静态方法


需求一:使用公共静态方法的方式,设计一个数组的工具类


ArraysUtils类


public void ArraysUtils{
    //1. 先私有化构造器,防止被实例化对象
    private ArraysUtils(){
    }
    //2.写工具方法
    public static void sort(){
        System.out.println("我是排序方法")
    }
     public static void print(){
        System.out.println("我是打印方法方法")
    }
}
复制代码


TsstDemo类


public class TsstDemo{
    public static void main(String[] args){
        ArraysUtils.sort()
    } 
}
复制代码


调用者必须通过工具类名.工具方法名称完成调用


1.2、单例模式


设计模式(Design pattern)


是一套被反复使用的代码设计经验总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性,Java常用的设计模式有23种


单例设计模式(singleton)

最常用、最简单的设计模式,单例模式分为两种:懒汉式和饿汉式

目的

保证在整个应用中某一个类有且只有一个实例


步骤(以饿汉式为例)

  1. 私有化自身构造器,防止外界通过构造器实例化出对象
  2. 在该类中,自己先创建出一个对象
  3. 向外暴露一个公共的静态方法用于返回自身的对象


public class SingletonUtil{
    // 1. 先私有化构造器,防止被实例化对象
    private SingletonUtil(){
    }
    //2. 自己创建出一个对象
    private static SingletonUtil instance = new SingletonUtil();
    //3. 暴露给外界调用方法,返回创建好的对象
    public static SingletonUtil getInstance(){
        return instance;
    }
    public void sort() {
    System.out.println("排序操作");
  }
  public void binarySearch() {
    System.out.println("二分查找操作");
  }
}
复制代码


调用方法:


SingletonUtil.getInstance().sort();
复制代码


二、包装类


Java中的基本数据类型没有方法和属性,而包装类就是为了让这些拥有方法和属性,实现对象化交互,数值型包装类都继承至Number,而字符型和布尔型继承至Object


2.JPG


2.1、基本类型的包装类


基本数据类型和包装类对应关系:


基本类型 对于包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean


2.1.1、Integer


Integer内部封装了int类型的基本数据类型value,并提供了方法对int值进行操作和String之间进行互换(开发中常用)


2.1.1.1、Integer >> int


Integer i = new Integer();
    int intValue = i.intValue();
复制代码


2.1.1.2、int >> Integer


int i = 20;
    Integer integer = Integer.valueOf(i);
复制代码


2.1.1.3、Integer >>String


int i = 30;
  Stirng value = Integer.valueOf(i);
复制代码


2.1.1.4、String >> Integer


Integer i = Integer.valueOf("3");
复制代码


2.1.1.5、String >> int


int i = Integer.parseInt("134");
复制代码


2.1.1.6、int >> String


String str = Integer.toString(134);
复制代码


2.2、拆箱和装箱


2.2.1、装箱


把基本数据类型转为对于的包装类对象


Integer num2 = Integer.valueOf(17);
复制代码


2.2.2、拆箱


把包装类对象转化为对应的基本数据类型


int val = num3.intValue(); 
复制代码


2.2.3、自动拆箱和装箱


从JDK5之后提供了自动装箱和自动拆箱,我们再也不用频繁的去手动拆箱和装箱了


Integer num4  =  17; //装箱操作
    int val2 = num4; //拆箱操作
复制代码


2.3、缓存设计


从性能上考虑,把常用数据存储到缓存区域,使用时不需要每次都创建新的对象,可以提高性能


常用包装类型的缓存范围

  • Byte、Short、Integer、Long:缓存范围[-128,127]
  • Character:缓存范围[0,127]


//第一种
Integer i1 = new Integer(123);
Integer i2 = new Integer(123);
System.out.println(i1 == i2);// false,因为都在堆中new了一个新的对象
//第二种
Integer i3 = Integer.valueOf(123);
Integer i4 = Integer.valueOf(123);
System.out.println(i3 == i4);// true,由于在[-128,127]之间,所以直接在缓存中取,都是同一个对象
//第三种
Integer i5 = 123; // 底层等价于第二种
Integer i6 = 123;
System.out.println(i5 == i6);// true
复制代码


注意

  1. 如果数字都不在缓存范围内,那么返回的结果都是false
  2. 如果要比较两个对象的数据是否相等,必须使用equals方法来判断,==比较的是两个数据的内存空间是否是同一块,equals比较的是存储数据是否相等
  3. int类型的默认值为0,Integer的默认值为null,在开发中建议使用Integer,因为Integer既可以表示0,也可以表示null


2.4、BigDecimal


float和double都不能表示精确的小数,使用BigDecimal类可以解决该问题,BigDecimal用于处理金钱或任意精度要求高的数据


2.4.1、基本运算


BigDecimal不能直接把赋值和运算操作,只能通过构造器传递数据,而且必须使用字符串类型的构造器


System.out.println(0.09 + 0.01);
复制代码


我们运行这段代码,结果是


3.JPG


他会生成一个无限接近0.1的值,说明这个并不适合我们运算


BigDecimal num1 = new BigDecimal(0.09);
    BigDecimal num2 = new BigDecimal(0.01);
    System.out.println(num1.add(num2));
复制代码

4.JPG


如果我们不用字符串类型的构造器的话,BigDecimal无法开启高精度模式


BigDecimal num3 = new BigDecimal("0.09");
    BigDecimal num4 = new BigDecimal("0.01");
    System.out.println(num3.add(num4));
复制代码

5.JPG


终于运行处了正确结果,需要注意一定要使用字符串的构造方法,才可以开启高精度计算模式


2.4.2、精度控制


我们在运算的时候需要进行精度控制操作


/*
  1. 保留位数和精度控制
     RoundingMode 舍入模式
     RoundingMode.HALF_UP   四舍五入
*/
BigDecimal num5 = new BigDecimal("0.987");
    BigDecimal bigDecimal = num5.setScale(2, RoundingMode.HALF_UP);
    System.out.println(bigDecimal);
复制代码


2.4.3、无理数问题


/*
     java.lang.ArithmeticException
     Non-terminating decimal expansion; no exact representable decimal result.
     报错原因:除不尽(3.333333333...333...)
    */
  BigDecimal num1 = new BigDecimal("10.0");
    BigDecimal num2 = new BigDecimal("3.0");
    BigDecimal r2 = num1.divide(num2,3,RoundingMode.HALF_UP);
    System.out.println(r2);
相关文章
|
3天前
|
Java 编译器 ice
【Java开发指南 | 第十五篇】Java Character 类、String 类
【Java开发指南 | 第十五篇】Java Character 类、String 类
23 1
|
3天前
|
Java
【Java开发指南 | 第十四篇】Java Number类及Math类
【Java开发指南 | 第十四篇】Java Number类及Math类
14 1
|
1天前
|
自然语言处理 Java API
Java 8的Stream API和Optional类:概念与实战应用
【5月更文挑战第17天】Java 8引入了许多重要的新特性,其中Stream API和Optional类是最引人注目的两个。这些特性不仅简化了集合操作,还提供了更好的方式来处理可能为空的情况,从而提高了代码的健壮性和可读性。
24 7
|
1天前
|
JavaScript Java 测试技术
《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)
【5月更文挑战第10天】本文介绍了使用Java和Selenium进行Web自动化测试的实践,以安居客网站为例。最后,提到了在浏览器开发者工具中调试和观察页面元素的方法。
11 2
|
1天前
|
设计模式 算法 Java
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
|
2天前
|
算法 Java Python
保姆级Java入门练习教程,附代码讲解,小白零基础入门必备
保姆级Java入门练习教程,附代码讲解,小白零基础入门必备
|
2天前
|
Web App开发 JavaScript 测试技术
《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)
【5月更文挑战第9天】本文介绍了在Appium中处理App自动化测试中遇到的Toast元素定位的方法。Toast在Web UI测试中也常见,通常作为轻量级反馈短暂显示。文章提供了两种定位Toast元素的技巧.
10 0
|
3天前
|
Web App开发 缓存 前端开发
《手把手教你》系列技巧篇(四十四)-java+ selenium自动化测试-处理https 安全问题或者非信任站点-下篇(详解教程)
【5月更文挑战第8天】这篇文档介绍了如何在IE、Chrome和Firefox浏览器中处理不信任证书的问题。作者北京-宏哥分享了如何通过编程方式跳过浏览器的证书警告,直接访问不受信任的HTTPS网站。文章分为几个部分,首先简要介绍了问题背景,然后详细讲解了在Chrome浏览器中的两种方法,包括代码设计和运行效果,并给出了其他浏览器的相关信息和参考资料。最后,作者总结了处理此类问题的一些通用技巧。
16 2
|
3天前
|
安全 Java 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
11 2
|
3天前
|
安全 Java 开发者
Java一分钟之-Optional类:优雅处理null值
【5月更文挑战第13天】Java 8的`Optional`类旨在减少`NullPointerException`,提供优雅的空值处理。本文介绍`Optional`的基本用法、创建、常见操作,以及如何避免错误,如直接调用`get()`、误用`if (optional != null)`检查和过度使用`Optional`。正确使用`Optional`能提高代码可读性和健壮性,建议结合实际场景灵活应用。
21 3