10_JAVA OPP

10-JAVAOOP

一、课程目标

1. 【理解】什么是API
2. 【掌握】API的使用方式
3. 【理解】Object类
4. 【掌握】Object类中的equals方法
5. 【掌握】String类中的常用方法

二、API概述

2.1 什么是API

API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的字典 ,是JDK中提供给

我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学

习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。

2.2 API使用步骤

1. 打开帮助文档。 
2. 点击显示,找到索引,看到输入框。 
3. 你要找谁?在输入框里输入,然后回车。 
4. 看包。java.lang下的类不需要导包,其他需要。 
5. 看类的解释和说明。 
6. 学习构造方法。

2.3 Scanner类演示使用API

了解了API的使用方式,我们通过Scanner类,熟悉一下查询API,并使用类的步骤。

2.3.1 什么是Scanner类

一个可以解析基本类型和字符串的简单文本扫描器。 例如,以下代码使用户能够从 System.in 中读取一个数:

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

2.3.2 引用类型使用步骤

  • 导包

    使用import关键字导包,在类的所有代码之前导包,引入要使用的类型,java.lang包下的所有类无需导入。 格

    import 包名.类名;
    
  • 创建对象

    使用该类的构造方法,创建一个该类的对象。 格式:

    类名 对象名 = new 类名(参数列表);
    
  • 调用方法

    调用该类的成员方法,完成指定功能。 格式:

    对象名.方法名();
    

2.3.3 Scanner使用步骤

  • 查看类

    java.util.Scanner :该类需要import导入后使用。

  • 查看构造方法

    public Scanner(InputStream source) : 构造一个新的 Scanner ,它生成的值是从指定的输入流扫描的。

  • 查看成员方法

    public int nextInt() :将输入信息的下一个标记扫描为一个 int 值。

    public String nextLine(): 此扫描器执行当前行,并返回跳过的输入信息。

三、Object类

3.1 Object类概述

java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时 候,最终找的父类就是Object。如果一个类没有特别指定父类, 那么默认则继承自Object类。例如:

public class MyClass /*extends Object*/ {
  	// ...
}

根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。今天我们主要学习其中的2个:

  • public String toString():返回该对象的字符串表示。
  • public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。

3.2 toString方法

  • public String toString():返回该对象的字符串表示。

    toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。

    由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。

  • 覆盖重写

    如果不希望使用toString方法的默认行为,则可以对它进行覆盖重写。例如自定义的Person类:

    public class Person {  
        private String name;
        private int age;
    
        @Override
        public String toString() {
            return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
        }
    
        // 省略构造器与Getter Setter
    }
    

    在IDEA中我们可以使用快捷键快速生成toString方法
    在这里插入图片描述

3.3 equals方法

  • public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。

    调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的“相同”有默认和自定义两种方式。

  • 默认比较方式

    如果没有覆盖重写equals方法,那么Object类中默认进行==运算符的对象地址比较,只要不是同一个对象,结果必然为false。

  • 重写equals方法

    如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。例如:

    import java.util.Objects;
    
    public class Person {	
    	private String name;
    	private int age;
    	
        @Override
        public boolean equals(Object o) {
            // 如果对象地址一样,则认为相同
            if (this == o)
                return true;
            // 如果参数为空,或者类型信息不一样,则认为不同
            if (o == null || getClass() != o.getClass())
                return false;
            // 转换为当前类型
            Person person = (Person) o;
            // 要求基本类型相等,并且将引用类型交给java.util.Objects类的equals静态方法取用结果
            return age == person.age && Objects.equals(name, person.name);
        }
    }
    

    这段代码充分考虑了对象为空、类型一致等问题,但方法内容并不唯一。大多数IDE都可以自动生成equals方法的代码内容。在IntelliJ IDEA中,可以使用Code菜单中的Generate…选项,也可以使用快捷键alt+insert,并选择equals() and hashCode()进行自动代码生成。如下图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3.4 Objects类

在刚才IDEA自动重写equals代码中,使用到了java.util.Objects类,那么这个类是什么呢?

JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。

在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。方法如下:

  • public static boolean equals(Object a, Object b):判断两个对象是否相等。

我们可以查看一下源码,学习一下:

public static boolean equals(Object a, Object b) {     
    return (a == b) || (a != null && a.equals(b)); 
}

四、String类

4.1 String类概述

String 类代表字符串。Java程序中所有的字符串文字(例如 “abc” )都可以被看作是实现此类的实例。

String类 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻

译为大写小写的所有字符的字符串的副本。

4.2 String类的特点

  • 字符串不变:字符串的值在创建后不能被更改
    String s1 = "abc"; 
    s1 += "d"; System.out.println(s1); // "abcd" 
    // 内存中有"abc","abcd"两个对象,s1从指向"abc",改变指向,指向了"abcd"。
    
  • 因为String对象是不可变的,所以它们可以被共享。
    String s1 = "abc";
    String s2 = "abc";
    // 内存中只有一个"abc"对象被创建,同时被s1和s2共享。
    
  • String的本质是
    • JDK8之前是char[] 数组
    • JDK8之后是byte[] 数组

4.3 String 类使用步骤

  • 查看类

    java.lang.String:此类不需要导入。

  • 查看构造方法
    • public String() : 初始化新创建的String对象,以使其表示空字符序列
    • public String(char[] value) : 通过当前参数中的字符数组来构造新的String。
    • String(char[] value, int offset, int count) : 通过当前参数中的字符数组的一部分来构造新的String。
    • String(byte[] bytes):通过使用平台的默认字符集解码当前参数中的字节数组来构造新的
    • String(byte[] bytes, int offset, int length)通过使用平台的默认字符集解码当前参数中的字节数组的一部分来构造新的String
  • 基本代码演示
    // 无参构造
    String str = new String();
    
    // 通过字符数组构造
    char chars[] = {'a', 'b', 'c'};     
    String str2 = new String(chars);
    
    // 通过字节数组构造
    byte bytes[] = { 97, 98, 99 };     
    String str3 = new String(bytes);
    

在这里插入图片描述

4.4 String类常用的方法

4.4.1 判断功能的方法

  • public boolean equals (Object anObject):将此字符串与指定对象进行比较

  • public boolean equalsIgnoreCase(String anotherString): 将此字符串与指定对象进行比较,忽略大小写

  • public boolean endsWith(String suffix): 判断此字符串是否以指定的后缀开始

  • public boolean startsWith(String prefix): 判断此字符串是否以指定的前缀开始

  • 代码演示
    public class String_Demo01 {
        public static void main(String[] args) {
            // 创建字符串对象
            String s1 = "hello";
            String s2 = "hello";
            String s3 = "HELLO";
    
            // boolean equals(Object obj):比较字符串的内容是否相同
            System.out.println(s1.equals(s2)); // true
            System.out.println(s1.equals(s3)); // false
            System.out.println("‐‐‐‐‐‐‐‐‐‐‐");
    
            //boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写    
            System.out.println(s1.equalsIgnoreCase(s2)); // true
            System.out.println(s1.equalsIgnoreCase(s3)); // true
            System.out.println("‐‐‐‐‐‐‐‐‐‐‐");
        }
    }
    

4.4.2 获取功能的方法

  • public int length() :返回此字符串的长度

  • public String concat(String str): 将指定的字符串连接到该字符串的末尾。

  • public char charAt(int index): 返回指定索引处的char值。

  • public int indexOf(int ch):返回指定子字符串第一次出现在该字符串内的索引。

  • public String substring(int beginIndex):返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。

  • public String substring(int beginIndex,int endIndex):返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。

  • 代码演示
    public class String_Demo02 {
        public static void main(String[] args) {
            //创建字符串对象
            String s = "helloworld";
    
            // int length():获取字符串的长度,其实也就是字符个数
            System.out.println(s.length());
            System.out.println("‐‐‐‐‐‐‐‐");
    
            // String concat (String str):将将指定的字符串连接到该字符串的末尾.    
            String s = "helloworld";
            String s2 = s.concat("**hello itfxp");
            System.out.println(s2);// helloworld**hello itfxp
    
            // char charAt(int index):获取指定索引处的字符
            System.out.println(s.charAt(0));
            System.out.println(s.charAt(1));
            System.out.println("‐‐‐‐‐‐‐‐");
    
            // int indexOf(String str):获取str在字符串对象中第一次出现的索引,没有返回‐1
            System.out.println(s.indexOf("l"));
            System.out.println(s.indexOf("owo"));
            System.out.println(s.indexOf("ak"));
            System.out.println("‐‐‐‐‐‐‐‐");
    
            // String substring(int start):从start开始截取字符串到字符串结尾
            System.out.println(s.substring(0));
            System.out.println(s.substring(5));
            System.out.println("‐‐‐‐‐‐‐‐");
    
            // String substring(int start,int end):从start到end截取字符串。含start,不含end。    
            System.out.println(s.substring(0, s.length()));
            System.out.println(s.substring(3,8));
        }
    }
    

4.4.3 转换功能的方法

  • public char[] toCharArray():将此字符串转换为新的字符数组。

  • public byte[] getBytes():使用平台的默认字符集将该String编码转换为新的字节数组。

  • public String replace(char oldChar, char newChar):将oldChar匹配的字符串使用newChar字符串替换。

  • public String replaceFirst(String regex,String replacement)用给定的 replacement 替换此字符串匹配给定的regex的第一个子字符串。

  • public String toUpperCase() : 将字符中转换为大写

  • public String toLowerCase(): 将字符中转换为小写

  • 代码演示
    public class String_Demo03 {
        public static void main(String[] args) {
            //创建字符串对象
            String s = "abcde";
    
            // char[] toCharArray():把字符串转换为字符数组    char[] chs = s.toCharArray();
            for(int x = 0; x < chs.length; x++) {
                System.out.println(chs[x]);
            }
            System.out.println("‐‐‐‐‐‐‐‐‐‐‐");
    
            // byte[] getBytes ():把字符串转换为字节数组
            byte[] bytes = s.getBytes();
            for(int x = 0; x < bytes.length; x++) {
                System.out.println(bytes[x]);
            }
            System.out.println("‐‐‐‐‐‐‐‐‐‐‐");
    
            // 替换字母it为大写IT
            String str = "itfxp itnum";
            String replace = str.replace("it", "IT");
            System.out.println(replace); // ITfxp ITnum
        }
    }
    

4.4.4 分割和去空格的功能方法

  • public String[] split(String regex):将此字符串按照给定的regex(规则)拆分为字符串数组。

  • public String trim():去除该字符串的两端空格

  • 代码演示

    public class String_Demo03 {
        public static void main(String[] args) {
            //创建字符串对象
            String s = "aa|bb|cc";
            String[] strArray = s.split("|"); // ["aa","bb","cc"]   
            for(int x = 0; x < strArray.length; x++) {
                System.out.println(strArray[x]); // aa bb cc
            }
        }
    }
    

4.5 String类的练习

4.5.1 拼接字符串

  • 需求

    定义一个方法,把数组{1,2,3}按照指定个格式拼接成一个字符串。格式如下:[1,2,3]。

  • 代码演示
    public class StringTest1 {
        public static void main(String[] args) {
            //定义一个int类型的数组
            int[] arr = {1, 2, 3};
    
            //调用方法
            String s = arrayToString(arr);
    
            //输出结果
            System.out.println("s:" + s);
        }
    
        /*
         * 写方法实现把数组中的元素按照指定的格式拼接成一个字符串     * 两个明确:
         * 返回值类型:String
         * 参数列表:int[] arr
         */
        public static String arrayToString(int[] arr) {
            // 创建字符串s
    
            String s = new String("[");
            // 遍历数组,并拼接字符串
            for (int x = 0; x < arr.length; x++) {     
                if (x == arr.length ‐ 1) {
                    s = s.concat(arr[x] + "]");
                } else {
                    s = s.concat(arr[x] + "#");
                }
            }
            return s;
        }
    }
    

4.5.2 统计字符个数

  • 需求

    键盘录入一个字符,统计字符串中大小写字母及数字字符个数

  • 代码演示
    public class StringTest2 {
        public static void main(String[] args) {
            //键盘录入一个字符串数据
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个字符串数据:");
            String s = sc.nextLine();
    
            //定义三个统计变量,初始化值都是0
            int bigCount = 0;
            int smallCount = 0;
            int numberCount = 0;
    
            //遍历字符串,得到每一个字符
            for(int x=0; x<s.length(); x++) {
                char ch = s.charAt(x);
                //拿字符进行判断
                if(ch>='A'&&ch<='Z') {
                    bigCount++;
                }else if(ch>='a'&&ch<='z') {
                    smallCount++;
                }else if(ch>='0'&&ch<='9') {
                    numberCount++;
                }else {
                    System.out.println("该字符"+ch+"非法");
                }
            }
    
            //输出结果
            System.out.println("大写字符:"+bigCount+"个");
            System.out.println("小写字符:"+smallCount+"个");
            System.out.println("数字字符:"+numberCount+"个");  }
    }
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值