文章目录

  • API
    • 1. 概述
    • 2. Object
      • 2.1 "顶级父类"
      • 2.2 Object 常用方法
        • 2.2.1 toString()
        • 2.2.2 equals(Object obj)
    • 3. String 类
      • 3.1 特点
      • 3.2 创建String对象 2 种方式
    • 4 String常见方法Api
      • 4.1 length()
      • 4.2 euqals()
      • 4.3 equalsIgnoreCase()
      • 4.4 toLowerCase( ) 和 toUpperCase( )
      • 4.5 charAt(int index)
      • 4.6 concat(String str)
      • 4.7 indexof()和 lastindexof()
      • 4.8 startsWith() 和 endsWith()
      • 4.9 substring()
      • 4.10 split()
      • 4.11 trim()
      • 4.12 valueOf()
    • 5 练习:字符串方法
      • 5.1 统计字符串中单词出现次数
    • 6. StringBuilder 和 StringBuffer
      • 6.1 背景
      • 6.2 特点
      • 6.3 常用方法
        • 6.3.1 为什么可变序列效率高 !?
        • 6.3.2 其他方法使用

API

1. 概述

  1. 全称: Application Programming Interface,直面翻译就是 应用程序编程接口,也可以理解为java类的使用说明书

    • java.lang.*,使用时是不用导入包的! 是java语言的核心,它提供了java中的基础类。包括基本Object类、Class类、String类、基本类型的包装类、基本的数学类等等,最基本的类。
    • java.util.*工具包,包含各种实用工具类/集合类/日期时间工具等各种常用工具。

2. Object

2.1 “顶级父类”

  1. java.lang.Object 是Java语言中的根类,即所有类的父类。所有的类都继承了该类,然后,可以这么理解它里面有的方法,所有实例化类的对象都可以使用。

    • 还记得接口中有构造方法么? 实现接口的子类创建对象时,super调用的是谁的构造方法?

2.2 Object 常用方法

2.2.1 toString()

  1. 返回对象的字符串表示形式。

    • 思考为什么建议我们重写Object中的toString();方法!?
//测试类
public class Test_object {public static void main(String[] args) {Student s = new Student("周杰伦",34);//1.正常我输出想看到的结果名字+年龄的输出!?System.out.println(s);//但是打印的是:com.java.lang.Student@28d93b30//2.分析: com.java.lang.Student@28d93b30 到底是个啥!?//2.1 层层分析,拿到了getClass().getName() + "@" + Integer.toHexString(hashCode());System.out.println(s.getClass().getName());//3.我们在去创建一个对象Student s1 = new Student();s1.setName("周杰伦");s1.setAge(18);System.out.println(s1);System.out.println(s1.getClass().getName());//4. Integer.toHexString(hashCode()); 这个到底是什么!?//4.1 hashCode(); 哈希值 相当于内存存放的地址值! 方便与查找!!System.out.println(s.hashCode());//685325104System.out.println(s1.hashCode());//460141958// 4.2 转换成16进制了。System.out.println(Integer.toHexString(460141958));//1b6d3586//总结: Integer.toHexString(hashCode()); 这个到底是什么!?相当于内存中唯一值!!//思考一个问题: 打印这个s.toString(); 对我们来说有意义么!?System.out.println(s.toString()); //[name: 周杰伦 , age: 34]}
}//学生类 class Student extends Object
class Student {private String name;// 姓名private  int age; //  年龄//private修饰属性就需要提供对外访问方法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;}//构造方法含参数public Student(String name, int age) {this.name = name;this.age = age;}//提供含参数构造之后,最好在提供无参数构造public Student(){}@Overridepublic String toString() {// 你可以自己拼字符串,也可以自动生成!String s = "[name: "+name+" , "+"age: "+age+"]";return s;}
}

输出结果:

[name: 周杰伦 , age: 34]
com.java.lang.Student
[name: 周杰伦 , age: 18]
com.java.lang.Student
685325104
460141958
1b6d3586
[name: 周杰伦 , age: 34]

2.2.2 equals(Object obj)

  1. 判断两个对象是否相等。

    • 基本类型不需要但是如果涉及到引用类型,判断对象是否相同就需要重写equals方法。
    public class Demo {public static void main(String[] args) {Person person = new Person("周杰伦", 18);Person person1 = new Person("周杰伦", 18);System.out.println(person.equals(person1));}
    }class  Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic boolean equals(Object obj) {/*1. 如何重写Equals()方法呢?第一点:如果是同一个地址值我就认为它相等。Person person = new Person();Person p1 = person;Person p2 = person;*/if (this == obj){return true;}//2.如果不是同类型也不需要比较了。//2.1 例如:比较两只狗是同类型,但是你非得 equals(Cat c),就这直接不用比较了。if (!(obj instanceof Person)){return false;}//3. 因为传递的是Object类型,需要向下转型在开始比较。Person arg = (Person) obj;return this.name == arg.name && this.age ==arg.age;}}
  • 输出结果:

    false  // 重写完生成  true
    

3. String 类

3.1 特点

  1. String 类代表字符串。它们的值在创建之后就不能更改!
  2. 为什么叫字符串!? private final char value[]; 因为底层封装了字符数组对象char[]

3.2 创建String对象 2 种方式

  1. 创建对象两种方式:

    • 第一种: 直接赋值的方式 String s = “Hello”;即字面量的,在常量池中创建。
    • 第二种: 通过构造器创建 String s = new String(char[] value); ,即:new String("Hello");

  1. 面试题:
 所有的前提是不考虑,常量池有已知字符串。String s = new String("123");方式创建对象,在内存中创建了几个对象?答案: 一个或者是两个! 首先:1.看常量池里是否有 123 如果有,则在堆中创建一个对象!相当于创建一个!2.如果常量池中没有,会在常量池中先创建123,然后再堆中创建一个对象,这就是两个!String a="123"+"456";答案:创建了1个对象jvm 编译阶段过编译器优化后会把字符串常量直接合并成"123456",所有创建对象时最多会在常量池中创建1个对象。String a="123"+ new String("456");// 4个对象。答案: 2个或者 4个首先:1.看看常量池有没有 "123", "456",如果有 就在堆中创建  456 然后还有 123456 2.常量池对象"123" ,"456",new String("456")创建堆对象,还有一个堆对象"123456"。

4 String常见方法Api

4.1 length()

  • 返回此字符串的长度。
//获取字符串长度,length();  例如:用户名和密码长度校验public static void main(String[] args) {String s = "ilove you! ";//01.测试字符串长度int i = s.length(); //返回的是一个int 类型。System.out.println(i); // 11 ,空格也算长度}

4.2 euqals()

  • 将此字符串与指定对象进行比较。
public static void main(String[] args) {String s = "ilove you! ";String s1 = new String("ilove you! ");String s2 = new String("ilove you! ");//1.为啥返回的是ture!? 不是应该是false!?/*1.1解答: 因为String类重写了 Objetc类的equals()方法!*/System.out.println(s.equals(s1));//返回的是true!System.out.println(s1.equals(s2)); // 返回的也是true!}

4.3 equalsIgnoreCase()

  • 忽略大小写,或者叫做不区分大小写。
 public static void main(String[] args) {String s = "ilove you! ";String s1 = new String("ILOVE YOU! ");//ctrl+shift+u切换大小写!System.out.println(s.equalsIgnoreCase(s1)); //true。 不区分大小写,如验证码,验证!}

4.4 toLowerCase( ) 和 toUpperCase( )

  • 转换成小写,和,转换成大写!
  public static void main(String[] args) {String s = "iloveYOU!";System.out.println(s.toUpperCase());//将小写转换成大写!ILOVEYOU!String s1 = "ILOVEyou!";System.out.println(s1.toLowerCase());//将大写转换成小写! iloveyou!}

4.5 charAt(int index)

  • 返回索引处的值! 指数范围为 0 开始至length() - 1
public static void main(String[] args) {String s = "iloveYOU!";char c = s.charAt(0); // 从0开始到length() -1; System.out.println(c);//ichar c1 = s.charAt(3);System.out.println(c1);//v// s.length()-1 ; 9-1 =8char c2 = s.charAt(s.length()-1);System.out.println(c2);//!}

4.6 concat(String str)

  • 连接字符串:将指定的字符串,连接到该字符串的,末尾。
public static void main(String[] args) {String s = "ilove";String s1 = s.concat(" YOU");System.out.println(s1);//ilove YOUSystem.out.println(s1.concat("!"));//ilove YOU!}

4.7 indexof()和 lastindexof()

  1. 返回指定子字符串 第一次 出现的字符串内,字符 的索引。

    • public int indexOf(String str);
  2. 返回指定子字符串 最后一次 出现的字符串内,字符 的索引。
    • public int lastIndexOf(String str);
 public static void main(String[] args) {String s = "iloveYou!";int i = s.indexOf("o");//从起始位置0开始!第一次出现的位置!System.out.println(i);// 结果: 2int l = s.lastIndexOf("o");//最后偶一次出现的位置!System.out.println(l);//结果: 6}

4.8 startsWith() 和 endsWith()

  • 测试此字符串是否以此开头,或者,此字符串以此结尾。
 public static void main(String[] args) {String s = "iloveYou!";//方法的重载 判断哪个字符的起始位置。boolean startStr = s.startsWith("o",2);//o是不是在第2个位置开始。System.out.println(startStr);//trueboolean startStr1 = s.startsWith("o");System.out.println(startStr1); //falseboolean endStr = s.endsWith("u!");System.out.println(endStr);}

4.9 substring()

  1. 字符串截取,子字符串以指定索引处的字符开头,并扩展到该字符串的末尾。

    • 含头,不包含尾!
public static void main(String[] args)  {String s = "iloveYou!";String substring = s.substring(1);// 包含截取索引位置!System.out.println(substring);// 结果: loveYou!// 方法重载,截取一段,假如: 我们想截取这个loveString substring1 = s.substring(1, 5);// 含头不含尾!System.out.println(substring1);// 结果:love}

4.10 split()

  1. 将字符串按照指定的 “规则”,进行截取。
  2. 如:按照空格切。
    • 返回String[] 数组,意味着可以操作里面数据。
 public static void main(String[] args) {String s = "i love *You*!";String[] s1 = s.split(" ");//以空格的形式进行分割!//1.for循环遍历结果。for (int i=0;i<s1.length;i++){System.out.println(s1[i]);//按照空格切分}System.out.println("----------------------------");//2. 按照 |切分String[] s2 = s.split("\\*");//需要转义for (int i = 0; i <s2.length ; i++) {System.out.println(s2[i]);//按照*切分}}

输出结果:

i
love
*You*!
----------------------------
i love
You
!

4.11 trim()

  • 返回一个字符串,其值为此字符串,并删除该字符串,前和后的空格。
public static void main(String[] args) {String  s = "  ilove you!    ";String trim = s.trim();// 相当于去掉字符串前面空格和后面空格!System.out.println(s);System.out.println(trim);}

输出结果:

  ilove you!    //前后有空格
ilove you!

4.12 valueOf()

  1. 方法是静态的。 可以直接调用。

    • 以参数的形式返回字符串 。白话:将不同类型转为字符串。
public static void main(String[] args) {String  name = "jay";int  age =18;String s = String.valueOf(name);System.out.println(s);// 返回字符串 jay//猜一下!?   18!?System.out.println(String.valueOf(age)+10);//返回1810 ,相当于“+”;拼接了!}

5 练习:字符串方法

5.1 统计字符串中单词出现次数

  1. 如果统计一个字符串中, 单个字符出现的次数。

    • 如果前后有空格怎么办?
    • 怎么能获取里面截取的字符进行统计?使用哪种截取方式?
public class Test_String01 {public static void main(String[] args) {String s = "i love you i need you !"; //统计“l”出现的次数!//因为啥!?subString()截取一个字符一个字符!System.out.println( Util_word.count(s,"o")); //为什么我“you”不行!}
}
/*思路:大体思路输入的字符串,进行截取成字符,存到数组中,然后与要比较的字符进行比较!如果相同则记数一次。最后返回统计次数!*/
class Util_word{/*** @param inputStr 输入字符* @param word  比较字符* @return int*/static public int count(String inputStr,String word){int count=0;//2.创建数组存储截取后的字符。String[] arr = new String[inputStr.length()];//动态定义长度//3.进行截取,存到数组中!for (int i=0;i<arr.length;i++){arr[i] = inputStr.substring(i,i+1);//是不是得一个一个截取!(0,1)第一个,(1.2)第二个}//4.比较字符与存储中的是否一致!for (int i=0;i<arr.length;i++){//4.1 进行判读if(arr[i].equals(word)){//进行统计count++;}}return count;}
}
  • 思考 如果要查询单词出现的次数呢!?如you出现次数改怎么办!?自己思考!
  • 代码省略!

6. StringBuilder 和 StringBuffer

6.1 背景

  1. 首先,我们通过上面学习了解到,String 字符串是一个常量,一旦声明,不可改变。 那么问题就来了!?每次操作就会产生新的对象,如果在实际代码中存在大量 “相类似的String”,字符串主要的作用就是需要经常或者频繁拼接字符串,这样会浪费内存资源。那怎么办 !?
  2. 其次,可变字符序列 就产生了。

6.2 特点

  1. 底层同String一样都是 使用 char[] 储存。
  2. 都是可变字符序列。都提供堆字符修改的方法。
  3. 二者默认初始底层字符容量都是16,initial capacity of 16 characters.,如果容量不够会自动扩容。
  4. StringBuffer 1.0 产生是线程安全的,适合多线程操作。 StringBuilder 1.5产生 是线程不安全的,但是效率高。
  5. 二者都是继承 extends AbstractStringBuilder,本质都是调用了该类使用。
  6. 执行效率: StringBulider > StringBuffer > String

6.3 常用方法

6.3.1 为什么可变序列效率高 !?

  1. 此方法 append(Object obj)将相应类型的参数添加到此序列中。

    • 说白了就是 “拼串” 。为什么它效率就高呢!?
public class StringBuffer_Test {public static void main(String[] args) {//1.传统的“+”拼接字符串String s = "abc";String s1 = s + "d"; //"abcd"String s2 = "abc" + "d"; //"abcd"System.out.println(s1==s2); //false !? 为什么.因为“+”号就相当于创建对象!//2.如何使用可变序列追加字符。StringBuffer sb = new StringBuffer(s);// 创建一个缓冲区StringBuffer resault = sb.append("d").append("e");System.out.println(resault);//TODO 3.为什么就说它效率高呢!?因为少不出来多整几个!// method();//调用10万次的拼接;method2();//高效字符串StringBuffer}/**该方法的作用:*  循环拼接字StringBuffrt 高效形式!*/private static void method2() {String s = "ABCD "; //需要拼接的字符串StringBuffer sb = new StringBuffer();long begin = System.currentTimeMillis(); //时间开始:记录for (int i=0; i<100000;i++){sb = sb.append(s); //循环一次,追加一次}System.out.println(sb);long end = System.currentTimeMillis(); // 时间结束:记录System.out.println(end-begin); //11 ! 毫秒!!}/**该方法的作用:*  循环拼接字符串用"+"号的方式!*/public static void method(){String s = "ABCD "; //需要拼接的字符串String resault =""; //接受每次拼的新串//记录时间long begin = System.currentTimeMillis(); //时间开始:记录for (int i=0;i<100000;i++){resault = resault + s;}long end = System.currentTimeMillis(); // 时间结束:记录System.out.println(resault);System.out.println("看到我就是结束");System.out.println(end-begin); //15940(毫秒)/ 相当于 15秒}
}
  1. 思考一个问题:为什么这么慢啊!?

    • 因为String 类字符串一旦创建就无法改变, s+s1 ;在内存中新建一个字符串,开辟空间,计算容量。得到一个新的字符串。 然后 s+s1+s2时又要重复上一次动作,新开辟空间,分配容量。所以很慢!!!
    // 以下是代码片段
    String s ="abc";
    String s1 ="bcd";
    String s2="efg";String s3 = s+s1+s2;
    

6.3.2 其他方法使用

  1. 既然是String的高效操作,其方法也跟String几乎一致,介绍2个即可。

    • 插入方法 insert(int offset,Object obj) ;
    • 删除方法 delete(int start, int end)
public class String_append {public static void main(String[] args) {String s ="abc";StringBuffer sb = new StringBuffer(s);sb.append("d");System.out.println(sb);sb.insert(2,"e"); //底层是数组,从0开始System.out.println(sb); // abecdsb.delete(2,4);//包含开始,不包含结尾;System.out.println(sb); // abd}}

Java入门 第十二节(一) API相关推荐

  1. JAVA入门————API(常用API)

    下面给各位扩展一些JAVA开发中常用的API 文档注释(ApiDoc): import javax.crypto.spec.PSource; 文档注释是功能级注释,只在三个地方使用,分别是:类,方法, ...

  2. JavaSE基础篇——超详细,Java入门,这一篇就够了

    第一节:Java语言概述 一.java背景知识 1.Java是美国sun公司(Stanford University Network)在1995年推出的一门计算机高级编程语言. 2.Java早期被称为 ...

  3. Java入门学习注意事项有哪些?

    想要学好java技术,做好学习规划路线和注意事项是非常重要的,尤其是零基础学员,Java涉及到的知识点非常多,我们需要制定合理的Java学习路线图,这样会事半功倍,下面小编和大家总结一下Java入门学 ...

  4. Java入门学习笔记[狂神说Java]

    写在前面: 本文根据B站狂神说Java 与菜鸟教程 整理而来,仅供个人学习使用,如有侵权,请联系删除. 文章目录 IDEA使用 Java基础01:注释 Java基础02:数据类型 Java基础03:类 ...

  5. Java入门1.2.3—一个老鸟的Java学习心得

    Java入门1.2.3-一个老鸟的Java学习心得 基本信息 作者: 臧萌    出版社:清华大学出版社 ISBN:9787302217831 上架时间:2010-3-30 出版日期:2010 年3月 ...

  6. Java入门系列-26-JDBC

    认识 JDBC JDBC (Java DataBase Connectivity) 是 Java 数据库连接技术的简称,用于连接常用数据库. Sun 公司提供了 JDBC API ,供程序员调用接口和 ...

  7. java入门学习_Java入门学习进阶知识点

    Java入门学习进阶知识点 入门阶段,主要是培养Java语言的编程思想.了解Java语言的语法,书写规范等,掌握Eclipse.MyEclipse等开发工具,编写Java代码的能力.学完这个阶段你应该 ...

  8. 小白记事本--JAVA入门

    JAVA的安装与环境配置 Windows传送门 java开发环境搭建与eclipse安装教程 win10环境配置传送门:win10java环境配置 2021/6/8补充:java系统学习传送门:bil ...

  9. Java入门基础及面试100题--初入门

    Java入门基础及面试100题 注:适合应届毕业生或java初入门者 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程, ...

最新文章

  1. activiti5/6 系列之--BpmnModel使用
  2. Spring Http Invoker
  3. 机器学习安然数据集分析报告
  4. 【mysql】[error]group_concat造成的sql语法错误
  5. SpringCloud源码:Ribbon负载均衡分析
  6. 对文本的内容进行排序
  7. 从Windows文件夹到Linux分区
  8. 如何搭建测试平台?理清思路很重要
  9. 1.8 Linux用户与用户组文件权限
  10. 海康NVR设备上传人脸图片到人脸库
  11. linux smb 添加用户,samba创建新用户
  12. LeetCode题解(0695):岛屿的最大面积(Python)
  13. 尝试用gdb简单调试程序
  14. 如何配置Thymeleaf教程,及Thymeleaf的简单使用教程【一篇足够入门】
  15. 视区单位vw, vh简介以及可实际应用场景
  16. 灾难恢复_灾难恢复–以及如何避免需要它!
  17. 浙江省高等学校教师教育理论培训上机考试
  18. ue4 材质始终面向摄像机
  19. 利用libxml2解析xml文件
  20. 阿里云趣味视觉AI训练营学习笔记Day 5

热门文章

  1. python删除系统指定文件
  2. [Vue warn]: Unknown custom element: vhead - did you register the component correctly? For recursiv
  3. 统筹在项目中的重要性
  4. 目前学UI设计好就业吗?做UI设计还会有发展潜力?
  5. 2020年UI设计行业的就业状况如何?
  6. 2021全国大学生数学建模竞赛A题思路
  7. select2下拉框总结
  8. 衍生品市场 Chap1-3 学习笔记
  9. aop实现原理 - JDK动态代理(实例+源码解析)
  10. 手把手写算法(学个语言)