Java常用API(一)

API

Java的API(Application Programming Interface)也叫应用程序接口,是JDK中提供给我们使用的类,这些类将底层代码封装起来

Object类

Object类的概述

Object类是Java语言中的根类,是所有类的父类,它描述的所有子类方法都可以使用,所有类在创建对象时,最终找到的父类就是Object

equals 方法

equals方法用于比较两个对象是否相同,其实就是比较两给对象的内存地址是否相同,Object类中的equals方法内部就是使用==比较符
在Object类中原代码为

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

在开发中比较两个对象是否相等意义不大,通常会根据对象中的属性值进行比较,也就是在开发中需要从写equals方法的属性进行比较

下面描述一个人的类,并定义功能判断是否为同龄人

public class Person extends Object{
    private String name;
    private int age;
    
    // 无参数构造方法
    public Person(){
    }
    // 有参数构造方法
    public Person(String name, int age){
        this.name = name;
        this.age = age;
    }
    // 重写父类的equals方法
    public boolean equals(Object obj){
        // 判断是当前调用的equals方法的对象和传递进来的对象是否是同一个
        if(this == obj){
            return true;
        }
        // 判断是否传递进来的对象是否是Person类型
        // 对obj参数进行向下转型,把obj转成Person类型
        if(obj instanceof Person){
            Person p = (Person)obj;
            return this.age == p.age;
        }
        return false;       
    }
    // getters和setters
    ...
}

注意:在重写Object中的equals方法时,public boolean equals(Object obj)的参数是Object类型,在调用属性时,一定要进行类型转换,在转换之前必须对类型进行判断

toString方法

toString方法返回该对象的字符串表示,一般默认返回的该字符串的内容是【对象类型@内存地址】
由于toString方法返回的结果是内存地址,而在实际的开发中,经常需要按照对象的属性得到相应的字符串的表达形式,因此也需要重写,比如Person类返回name

class Person extends Object{
    ...
    // 根据Person类的属性重写toString方法
    public String toString(){
    return name
    }
}

String类

String类的概述

查阅API中的String类的描述,发现String类代表的字符串,Java中的所有字符串(如“abc”)都作为此类的实例实现的
继续查阅API发现说字符串是常量,它们在的值在创建后就不能更改,这是什么意思呢?其实就是说一旦这个字符串一旦确定了,那么就会在内存区域生成这个字符串,字符本生不能改变,但str变量中的记录的地址可以改变
String源码中private final char value[]定义为不可改变的数组

内存图

符串有大量的重载的构造方法。通过String类的构造方法可以完成字符串对象的创建,那么,通过使用双引号的方式创建对象与new的方式创建对象,有什么不同呢?看如下程序:

String str1 = "abc";
String str2 = new String("abc");
System.out.println(str1==str2);             //false
System.out.println(str1.equals(str2));      //true

因为String重写了equals方法,建立了字符串自己的判断相同的依据(通过字符串对象中的字符来判断)

str1和str2的创建方式有什么不同呢?

  • str1创建,在内存中只有一个对象,这个对象在字符串常量池中
  • str2创建,在内存中有两个对象,一个new的对象在堆中,一个字符串本身对象,在字符串常量池中

String的构造方法

构造方法是用来完成String对象的创建,下面给出了一部分构造方法需要在API中找到,并能够使用下列构造方法创建对象

String类中的构造函数

  • String()构造一个空字符串对象
  • String(byte[] bytes)通过byte数组构造字符串对象
  • String(byte[] bytes,int offset,int length)通过byte数组,从offset开始,总共length长的字节构造字符串对象
  • String(char[] value) 通过char数组构造字符串对象
  • String(byte[] char,int offset,int length)通过char数组,从offset开始,总共length长的字节构造字符串对象
  • String(String original) 构造一个original的副本,拷贝一个original
  • String(StringBuffer buffer)通过StringBuffer数组构造字符串对象

String类的常用方法

  • length( )查看字符串长度
  • charAt(int index)获取字符串中的某个值
  • contains(String str)判断一个字符串是否包含另一个字符串
  • getBytes( )将字符串转换为字节数组
  • toCharArray( )将字符串转换为字符数组
  • compareTo( )比较两个字符串的大小,相等返回0,大于返回正数,小于返回负数
  • compareToIgnoreCase( )比较两个字符串的大小,不考虑大小写
  • toUpperCase( )toLowerCase( )大、小写转换
  • indexOf( )字符串位置查找。indexOf(int ch):在此对象表示的字符序列中第一次出现该字符的索引;如果未出现该字符,则返回 -1。 indexOf(int ch,int fromIndex): 在此对象表示的字符序列中第一次出现的大于或等于 fromIndex 的字符的索引;如果未出现该字符,则返回 -1。
  • lastIndexOf( )字符串位置查找,与indexOf()查找顺序相反
  • startsWith(String str)测试字符串以指定的前缀开始,后面还可以添加指定的索引,表示从指定的索引开始的字符串是否以指定的前缀开始
  • endsWith(String str )测试字符串以指定的后缀结束
  • substring( )substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。(左包含右不包含)
  • split(String regex )根据给定正则表达式的匹配拆分此字符串。
  • trim( )用户数据后台校验前的过滤,返回字符串的副本,忽略前导空白和尾部空白

StringBuffer类

查阅StringBuffer的API,StringBuffer又称为可变字符序列,它是一个类似于 String的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
原来StringBuffer是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。

StringBuffer的方法使用

  • append(String str)将指定字符串追加到此字符序列
  • delete(int start, int end)移除此序列的字符串中的字符
  • insert(int offset, String str)将字符串插入到此字符串序列中
  • replace(int start, int end, String str)替换相应位子的字符串
  • reverse()反转字符串
  • toString()反回序列中数据的字符串(是String类型)

StringBuilder类

查阅API发现还有一个StringBuilder类,它也是字符串缓冲区,StringBuilder与它和StringBuffer的有什么不同呢?
我们阅读StringBuilder的API说明发现,它也是一个可变的字符序列。此类提供一个与 StringBuffer兼容的 API,但不保证同步。该类被设计用作 StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351