07章【常用类库API】

字符串操作

String类

  • String可以表示一个字符串。
  • String类实际是使用字符数组存储的。

String类的两种赋值方式:

  • 一种称为直接赋值:
String name = “小白” 
  • 通过关键字new调用String的构造方法赋值
String name = new String(“小白”)

String类的两种赋值分析:

  • 字符串常量池
  • String name = new String(“小白”),在内存中的分析
  • String name =“小白”,在内存中的分析

String类编译期与运行期分析:

  • 编译期和运行期
  • 代码示例:4种情况分析

String类字符与字符串操作方法:
在这里插入图片描述

String类字节与字符串操作方法:
在这里插入图片描述

String类判断是否以指定内容开头或结尾:
在这里插入图片描述

String类替换操作:
在这里插入图片描述

String类字符串截取操作:
在这里插入图片描述

String类字符串拆分操作:
在这里插入图片描述

String类字符串查找操作:
在这里插入图片描述
在这里插入图片描述

String类其它操作方法:
在这里插入图片描述

StringBuffer类

在实际开发当中,我们经常会使用到字符串连接的操作,如果用String来操作,则使用“+”号完成字符串的连接操作。

使用String连接字符串,代码性能会非常低,因为String的内容不可改变。
解决这个问题的方法是使用StringBuffer。

StringBuffer类源码分析

StringBuffer常用操作方法
在这里插入图片描述

StringBuilder类

StringBuffer的兄弟StringBuilder:
一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer 要快。

JDK1.5以后,字符串相加原理分析


程序国际化

对国际化程序的理解

Internationalization:国际化程序可以这样理解:

  • 同一套程序代码可以在各个语言环境下进行使用。
  • 各个语言环境下,只是语言显示的不同,那么具体的程序操作本身都是一样的,那么国际化程序完成的就是这样的一个功能

Locale类

Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。

  • 使用此类中的构造方法来创建 Locale:
Locale(String language)
Locale(String language, String country)
  • 通过静态方法创建Locale:
getDefault()

ResourceBundle类

国际化的实现核心在于显示的语言上,通常的做法是将其定义成若干个属性文件(文件后缀是*.properties),属性文件中的格式采用“key=value”的格式进行操作。

  • ResourceBundle类表示的是一个资源文件的读取操作,所有的资源文件需要使用
  • ResourceBundle进行读取,读取的时候不需要加上文件的后缀。
  • getBundle(String baseName)
  • getBundle(String baseName,Locale locale)
  • getString(String key)

处理动态文本

  • 前面的示例读取的内容都是固定的,如果现在假设要想打印这样的信息“欢迎你,XXX!”,具体的名字不是固定的,那么就要使用动态文本进行程序的处理。
  • 进行动态的文本处理,必须使用java.text.MessageFormat类完成。这个类是java.text.Format的子类。

Math与Random类

Math类

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
使用Math类可以有两种方式:

  • 直接使用(Math所在的包java.lang为默认引入的包)
  • 使用 import static java.lang.Math.abs; 静态导入
    在这里插入图片描述

Random类
Random:此类的实例用于生成伪随机数流
在这里插入图片描述


日期操作类

Date类

  • 类 Date 表示特定的瞬间,精确到毫秒,也就是程序运行时的当前时间。
Date date = new Date(); // 实例化Date对象,表示当前时间

Calendar类

  • Calendar,日历类,使用此类可以将时间精确到毫秒显示。
//两种实例化方式
Calendar c = Calendar.getInstance();
Calendar c = new GregorianCalendar();

DateFormat类及子类SimpleDateFormat


对象比较器

对两个或多个数据项进行比较,以确定它们是否相等,或确定它们之间的大小关系及排列顺序称为比较。
前面我学习过Arrays.sort方法可实现对象的排序操作:

public static void sort(Object[] a)

Comparable接口:

  • 此接口强行对实现它的每个类的对象进行整体排序。
  • 这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。

Comparator接口:

  • Comparable接口是要求自定义类去实现,按照OO原则:对修改关闭,对扩展开放。
  • 那么如果这个类已经定义好了,不想再去修改它,那如何实现比较呢?
  • Comparator接口:强行对某个对象collection进行整体排序的比较。

对象的克隆

将一个对象复制一份,称为对象的克隆技术。
在Object类中存在一个clone()方法:

protected Object clone() throws CloneNotSupportedException

如果某个类的对象要想被克隆,则对象所在的类必须实现Cloneable接口。此接口没有定义任何方法,是一个标记接口。


System与 Runtime类

System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。

成员变量

  • System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流。

成员方法

System类中提供了一些系统级的操作方法

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
  • 该方法的作用是数组拷贝,也就是将一个数组中的内容复制到另外一个数组中的指定位置
  • 由于该方法是native方法,所以性能上比使用循环高效。
public static long currentTimeMillis()
  • 该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间1970年1月1号0时0分0秒所差的毫秒数。
public static void exit(int status)
  • 该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。
  • 使用该方法可以在图形界面编程中实现程序的退出功能等。
public static void gc()
  • 该方法的作用是请求系统进行垃圾回收。
  • 至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。
public static String getProperty(String key)
  • 该方法的作用是获得系统中属性名为key的属性对应的值。
    • java.version Java 运行时环境版本
    • java.home Java 安装目录
    • os.name 操作系统的名称
    • os.version 操作系统的版本
    • user.name 用户的账户名称
    • user.home 用户的主目录
    • user.dir 用户的当前工作目录

Runtime类:每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。

//获取Java运行时相关的运行时对象
Runtime rt = Runtime.getRuntime();
System.out.println("处理器数量:" + rt.availableProcessors()+" 个");
System.out.println("Jvm总内存数 :"+ rt.totalMemory()+" byte");
System.out.println("Jvm空闲内存数:"+ rt.freeMemory()+" byte");
System.out.println("Jvm可用最大内存数:"+ rt.maxMemory()+" byte");
//在单独的进程中执行指定的字符串命令。
rt.exec("notepad");

数字处理工具类

  • BigInteger:可以让超过Integer范围内的数据进行运算。

构造方法:

public BigInteger(String val)

常用方法:

public BigInteger add(BigInteger val)
public BigInteger subtract(BigInteger val)
public BigInteger multiply(BigInteger val)
public BigInteger divide(BigInteger val)
public BigInteger[] divideAndRemainder(BigInteger val)
  • BigDecimal:由于在运算的时候,float类型和double很容易丢失精度,为了能精确的表示、计算浮点数,Java提供了BigDecimal,
    不可变的、任意精度的有符号十进制数。

构造方法:

public BigDecimal(String val)

常用方法:

public BigDecimal add(BigDecimal augend)
public BigDecimal subtract(BigDecimal subtrahend)
public BigDecimal multiply(BigDecimal multiplicand)
public BigDecimal divide(BigDecimal divisor)
  • DecimalFormat:Java 提供 DecimalFormat类,帮你用最快的速度将数字格式化为你需要的样子。例如,取2位小数。

示例:

double pi=3.1415927; //圆周率
//取一位整数,结果:3
System.out.println(new DecimalFormat("0").format(pi));
//取一位整数和两位小数,结果3.14
System.out.println(new DecimalFormat("0.00").format(pi));
//取两位整数和三位小数,整数不足部分以0填补,结果:03.142
System.out.println(new DecimalFormat("00.000").format(pi));
//取所有整数部分,结果:3
System.out.println(new DecimalFormat("#").format(pi));
//以百分比方式计数,并取两位小数,结果:314.16%
System.out.println(new DecimalFormat("#.##%").format(pi));

MD5工具类

  • MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)
//确定计算方法
MessageDigest md5=MessageDigest.getInstance("MD5");
//JDK1.8新增Base64
String newstr = Base64.getEncoder().encodeToString(md5.digest(str.getBytes("utf-8")));
//1.8之前使用sun.misc.BASE64Encoder(此类没有访问权限,在rt.jar中添加访问权限:sun/misc/*)
BASE64Encoder base64 = new BASE64Encoder();
base64.encode(md5.digest(str.getBytes("utf-8")));

数据结构之二叉树实现

  • 树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构。
  • 二叉树(Binary Tree)是每个节点最多有两个子树的有序树。通常子树被称作“左子树” 和“右子树”。

二叉树算法的排序规则:

  • 选择第一个元素作为根节点
  • 之后如果元素大于根节点放在右子树,如果元素小于根节点,则放在左子树
  • 最后按照中序遍历的方式进行输出,则可以得到排序的结果(左->根->右)

8、3、10、1、6、14、4、7、13
在这里插入图片描述


JDK1.8新特性

Lambda表达式

  • Lambda表达式(也称为闭包)是整个Java 8发行版中最受期待的在Java语言层面上的改变
  • Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码看成数据。
  • Lambda表达式用于简化JAVA中接口式的匿名内部类。被称为函数式接口的概念。
  • 函数式接口就是一个具有一个方法的普通接口。像这样的接口,可以被隐式转换为lambda表达式。

语法:

(参数1,参数2...) -> { ... }
  • 没有参数时使用Lambda表达式
  • 带参数时使用Lambda表达式
  • 代码块中只一句代码时使用Lambda表达式
  • 代码块中有多句代码时使用Lambda表达式
  • 有返回值的代码块
  • 参数中使用final关键字

接口中的默认方法和静态方法

interface A{
	public default void print(){}
	public static void method(){}
}

默认方法与静态方法并不影响函数式接口的契约,可以任意使用

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值