黑马程序员全套Java教程_Java基础教程_API(十四)

1、API

1.1 API概述

  • API(Application Programming Interface):应用程序编程接口。
  • 比如说,编写一个机器人程序去控制机器人踢足球,程序需要向机器人发出向前跑、向后跑、射门、抢球等各种命令。机器人厂商一定会提供一些用于控制机器人的接口类,这些类中定义好了操作机器人各种动作的方法。其实,这些接口类就是机器人厂商给应用程序编程的接口,大家把这些类称为API。
  • Java API:指的就是JDK中提供的各种功能的Java类。这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用,我们可以通过帮助文档来学习这些API如何使用。

1.2 如何使用帮助文档

  • 1、在索引的搜索框内输入想要查找的类。
  • 2、看类在哪个包下。
  • 3、看类的描述。
  • 4、看构造方法
  • 5、看成员方法。

2、String

2.1 String概述

  • String类在java.lang包下,所以使用的时候不需要导包。
  • String类代表字符串Java程序中的所有字符串文字(例如“abc”)都被实现为此类的实例,也就是说,Java程序中所有的双引号字符串,都是String类的对象
  • 字符串的特点:
    (1)字符串不可变,它们的值在创建后不能被修改。
    (2)虽然Sting的值是不可变的,但是它们可以被共享。
    (3)字符串效果上相当于字符数组(char[])(JDK8以前是字符数组,JDK9以后是字节数组),但是底层原理是字节数组(byte[])。

2.2 String构造方法

方法名说明
public String()创建一个空白字符串对象,不含有任何内容
public String(char[] chs)根据字符数组的内容,创建字符串对象
public String(byte[] bys)根据字节数组的内容,来创建字符串对象
String s = “abc”;直接赋值的方式创建字符串对象,内容就是abc

推荐使用直接赋值的方式构建字符串对象

2.3 String对象在内存中的特点

  • 1、通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同。
char[] chs = {"a","b","c"};
String s1 = new String(chs);
String s2 = new String(chs);

上面代码中,JVM会先创建一个字符数组,然后每一次new的时候都会有一个新的地址,只不过s1和s2参考的字符串内容是相同的。

  • 2、以""方式给出的字符串,只要字符串序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护。
String s3 = "abc";
String s4 = "abc";

在上面代码中,针对第一行代码,JVM会建立一个String对象放在字符串池中,并给s3参考。第二行则让s4直接参考字符串池中的String对象,也就是说它们本质上是同一个对象。

  • 在内存中的变化:在这里插入图片描述

在这里插入图片描述

面试题:下列Java代码中的变量a、b、c分别在内存的()存储区存放

class A{
	private String a = "aa";
	public boolean methodB(){
		String b = "bb";
		final String c = "cc";
	}
}
  • 堆区,栈区,栈区。首先要知道栈内存和堆内存,栈内存存储局部变量(局部变量是定义在方法中的变量,使用完毕,立即消失);而堆内存存储new出来的对象,对象初始化时,会为存储空间添加默认值,每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收器空闲时被回收(参照笔记十——方法)。a是类中的成员变量,存放在堆区;b、c都是方法中的局部变量,存放在栈区。

2.4 字符串的比较

  • 使用“==”做比较:
    (1)基本类型:比较的是数据值是否相同。
    (2)引用类型:比较的是地址值是否相同。
  • 字符串是对象,它比较内容是否相同,是通过==equals()==方法来实现的:这个方法的声明为public boolean equals(Object anObject),将字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串。

2.5 通过帮助文档查看String中的方法

方法名说明
public boolean equals(Object anObject)比较字符串的内容,严格区分大小写(用户名和密码)
public char charAt(int index)返回值指定索引
public int length()返回字符串长度

面试题:统计字符次数

  • 键盘录入一个字符串,统计该字符串中大写字母字符、小写字母字符、数字字符出现的次数(不考虑其他字符)。
public static void main(String[] args) {
        /*键盘录入一个字符串,用Scanner实现*/
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入字符串:");
        String line = sc.nextLine();

        /*要统计三种字符串的字符个数,需定义三个统计变量,初始值都为0*/
        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 0;

        /*遍历字符串,得到每一个字符*/
        for (int i=0; i<line.length();i++){
            char ch = line.charAt(i);

            /*判断该字符属于哪种类型,然后对应类型的统计变量+1*/
            if (ch>='a' && ch<='z'){
                smallCount++;
            }else if(ch>='A' && ch<='Z'){
                bigCount++;
            }else if(ch>='0' && ch<='9'){
                numberCount++;
            }
        }

        /*输出三种类型的字符个数*/
        System.out.println(smallCount);
        System.out.println(bigCount);
        System.out.println(numberCount);
    }

面试题:数组没有length()方法?String没有length()方法?

  • 数组没有length方法,有length的属性,String有length()方法。JavaScript中,获取字符串长度是通过length属性得到的,这一点容易和Java混淆。

3、StringBuilder

3.1 StringBulider概述

在这里插入图片描述
如上图,如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费内存空间,而这种操作还不可避免。那么有没有一种比较好的方式可以解决这个问题?答案是肯定的,我们可以通过Java提供的StringBuilder类来解决这个问题。

  • StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器。这里的可变指的是StringBuilder对象中内容是可变的。
  • String和StringBuilder的区别:String内容是不可变的,StringBuilder内容是可变的。

3.2 StringBuilder构造方法

方法名说明
public StringBulider()创建一个空白可变字符串对象,不含有任何内容
public StringBulider(str)根据字符串的内容,来创建可变字符串对象

3.3 StringBuilder的添加和反转方法

方法名说明
public StringBuilder append(任意类型)添加数据,并返回对象本身
public StringBuilder reverse()返回相反的字符序列

3.4 StringBuilder和String互相转换

  • 1、StringBuilder转换为String
    public String toString():通过toString()就可以实现把StringBuilder转换为String。
  • 2、String转换为StringBuilder
    public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder。

案例:拼接字符串

  • 需求:定义一个方法,把int数组中的数据按照指定的格式拼接成字符串返回,调用该方法,并在控制台输出结果。例如,数组int[] arr = {1,2,3},执行方法后的输出结果为:[1,2,3]
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        System.out.println(con2(arr));

    }

    private static String con2(int[] arr){
        StringBuilder str = new StringBuilder();
        str.append("[");
        for (int i=0; i<arr.length; i++){
            str.append(arr[i]);
            if (i != arr.length-1){
                str.append(",");
            }
        }
        str.append("]");
        return str.toString();
    }

案例:字符串反转

  • 案例:定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果。例如,键盘录入abc,输出结果cba。
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String str = sc.nextLine();
        System.out.println(myReverse(str));
    }

    private static String myReverse(String str){
        return new StringBuilder(str).reverse().toString();
    }

3.5 通过帮助文档查看StringBuilder中的方法

方法名说明
public StringBuilder append(任意类型)添加数据,并返回对象本身
public StringBuilder reverse()返回相反的字符序列
public String toString()通过toString()就可以实现把StringBuilder转换为String
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值