【黑马程序员】Object,Scanner,String类总结——Java复习笔记

本文深入探讨了Java编程的基础知识,包括Object类的使用、Scanner类的键盘输入、String类的操作,以及如何实现字符串的格式化、统计字符类型出现次数、字符串反转和查找指定字符串出现次数等功能。同时,介绍了字符串类的特性和常用方法,为读者提供了一个全面的Java字符串处理指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

Object类

(1)Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类。

(2)Object类的的构造方法只有一个无参构造

(3)要掌握的方法:
    A:toString()
        返回对象的字符串表示,默认是由类的全路径+’@'+哈希值的十六进制表示。建议子类通过自动生成重写该方法。

    B:equals()
        比较两个对象是否相同。默认情况下,比较的是地址值是否相同。所以,建议子类通过自动生成重写该方法。(String的equals方法比较的是值)

    ps:obj instanceof Student  表示判断obj对象是否是Student类的对象 

(4)要了解的方法:
    A:hashCode() 返回对象的哈希值。不是实际地址值,可以理解为地址值。

    B:getClass() 返回对象的字节码文件对象
Student s = new Student(); 
String str=s.getClass().getName();//输出为完整路径名:包名+类名  
    C:finalize() 用于垃圾回收,在不确定的时间

    D:clone() 可以实现对象的克隆,包括成员变量的数据复制,但是它是独立的一个对象,和两个引用指向同一个对象是有区别的。该方法返回的是obj对象。被克隆对象的类需实现Cloneable接口才能正常克隆。该接口是标记接口,无方法。

(5)需要注意的问题;
    A:直接输出一个对象名称,其实默认调用了该对象的toString()方法。
    B:equals()只能比较引用类型。默认情况下,比较的是地址值是否相同。一般根据自己的需要重写该方法。String类的equals方法是比较内容

Scanner的使用

(1)在JDK5以后出现的用于键盘录入数据的类。

(2)构造方法:
    A:System.in其实是标准的输入流,对应于键盘录入
    B:构造方法
        InputStream is = System.in;
        Scanner(InputStream is)

(3)基本方法格式:
    A:hasNextXxx() 判断是否是某种类型的 返回值是boolean

    B:nextXxx() 返回某种类型的元素
        next()和nextLine()区别:前一个是以回车或空格为分隔符,一次取一个单词,后一个是以回车为分隔符,一次取一行。

(4)需要注意的小问题
    A:同一个Scanner对象,先获取数值,再获取字符串会出现一个小问题。
    B:解决方案:
        a:重新定义一个Scanner对象
        b:把所有的数据都用字符串获取,然后再进行相应的转换
        c:用空格而不是回车隔开        

String类的概述和使用

(1)构造方法:
A:public String()
B:public String(byte[] bytes)   //吧字节数组转成字符串
C:public String(byte[] bytes,int offset,int length) //吧字节数组的从offset索引开始的length长度的字节转成字符串
D:public String(char[] value)
E:public String(char[] value,int offset,int count)
F:public String(String original)    //吧字符串常量值转成字符串
    下面的这一个虽然不是构造方法,但是结果也是一个字符串对象
    G:String s = "hello";

(2)字符串的特点
    A:字符串一旦被赋值,就不能改变。

        注意:这里指的是字符串的内容不能改变,而不是引用不能改变。
             字符串缓冲区的字符串可以改变

    B:字面值作为字符串对象和通过构造方法创建对象的不同
        String s = new String("hello");和String s = “hello"的区别?
            后者不在堆内存中开辟空间

(3)看程序写结果
            String s1 = "hello";
            String s2 = "world";
            String s3 = "helloworld";
            System.out.println(s3 == s1 + s2);// false s1s2俩变量相加,会先开空间再拼接,所以地址值肯定不一样
            System.out.println(s3.equals((s1 + s2)));// true
            System.out.println(s3 == "hello" + "world");// true 俩常量相加是直接拼接得helloworld发现常量池里有一样的就直接用了,不创建
            System.out.println(s3.equals("hello" + "world"));// true
(4)字符串的功能
    A:判断功能
boolean equals(Object obj) //比较内容   
boolean equalsIgnoreCase(String str)  //比较内容,忽略大小写
boolean contains(String str)  //判断大字符串中是否包含小字符串
boolean startsWith(String str)//判断字符串是否以某个指定的字符串开头
boolean endsWith(String str)
boolean isEmpty()  //判断字符串是否为空
    B:获取功能
int length()  
char charAt(int index)  //获取指定索引位置的字符

int indexOf(int ch)   //返回指定字符在此字符串中第一次出现的索引 输入字符、数字都行

int indexOf(String str)  //返回指定字符串在此字符串中第一次出现的索引

int indexOf(int ch,int fromIndex)//返回指定字符在此字符串中从指定位置开始第一次出现的索引,没有则返回-1

int indexOf(String str,int fromIndex)

String substring(int start)  //从指定位置start开始截取字符串

String substring(int start,int end)  //从start位置开始截取字符串 包括start不包括end
    C:转换功能
byte[] getBytes()  //把字符串转为字节数组
char[] toCharArray()  //把字符串转为字符数组
static String valueOf(char[] chs)  //吧字符数组转为字符串
static String valueOf(int……)  ////吧任意类型数据转为字符串
String toLowerCase()  //吧字符串转为小写 返回的是新的String对象。传入的字符串不变
String toUpperCase()
String concat(String str)  //吧字符串拼接     
D:其他功能
        a:替换功能 
            String replace(char old,char new)
            String replace(String old,String new)

        b:去空格功能
            String trim() //只去掉前后两端的空格,中间的不管

        c:按字典比较功能
            int compareTo(String str)   //从第一位开始按字典顺序比较俩字符串  注意返回值是int。返回的是该位字符 - 被比较的字符。第一位相同则比较第二位,第一位就不同则直接返回
            int compareToIgnoreCase(String str) 

(5)String类的练习
    1.把首字母转大写,其他转小写
    public static void formatNum(String str){
        //substring包左不包右,所以这里截取的第一个字母
        String first = str.substring(0,1).toUpperCase();
        String rest = str.substring(1,str.length()).toLowerCase();
        System.out.println(first+rest);
    }
    2.统计数字,大写,小写出现的次数
    public static void tongjiNum (String str){
        int num = 0;//数字出现的次数
        int upcase = 0;//大写出现的次数
        int downcase = 0;//小写出现的次数
        //挨个遍历
        for (int x = 0;x<str.length();x++){
            if (str.charAt(x) >='A' && str.charAt(x)<= 'Z'){
                //如果是大写字母
                upcase++;
            }else if (str.charAt(x)>='a' && str.charAt(x)<='z'){
                //如果是小写字母
                downcase++;
            }else if (str.charAt(x)>='0' && str.charAt(x)<='9'){
                //如果是数字
                num++;
            }
        }
        System.out.println("数字"+num+"个");
        System.out.println("大写"+upcase+"个");
        System.out.println("小写"+downcase+"个");
    }
    3.字符串反转
    public static void reverseNum(String str){
        String newStr ="";//创建一个空字符串
        //倒着遍历
        for (int x = str.length()-1;x>=0;x--){
            //拼接
            newStr += str.charAt(x);
        }
        System.out.println(newStr);
    }
    4.查找指定字符串出现次数 
    方法1
    public static void findNum (String str,String find){
        int count =0;
        int index;

        index = str.indexOf(find);  //第一次查找并把返回的索引值赋值给index
        while (index != -1){        // 判断index是否 不等于-1 是则执行循环 否则不执行
            count++;        //执行循环说明index不为-1,所以出现一次,计数
            index += find.length();    //从 index+find.length()位置开始下一次查找
            index = str.indexOf(find,index);
        }
        System.out.println("共出现"+count+"次");
    }
    方法2
    public static void findNum2 (String str,String find){
        int count =0;
        int index;

        while ((index=str.indexOf(find)) != -1){
            count++;
            str = str.substring(index+find.length());   //从找到的位置 截取字符串并重新赋值
        }
        System.out.println("共出现"+count+"次");
    }
根据提供的引用内容,黑马程序员提供了一套针对Java初学者的完整学习笔记和教程,涵盖了从基础语法到高级开发技能的全面知识体系。该课程包含大量示例、练习题以及实际项目演练,适合零基础入门者系统性地掌握Java编程语言[^1]。 ### 学习资源涵盖的主要内容: - **基础语法**:包括变量、数据型、运算符、控制结构(如if语句、循环)、方法等。 - **面向对象编程**:对象、封装、继承、多态、抽象、接口等核心概念。 - **异常处理**:try-catch块、自定义异常、finally块的作用及使用方式。 - **集合框架**:List、Set、Map等常用接口及其具体实现(如ArrayList、HashSet、HashMap)。 - **泛型与Lambda表达式**:提升代码复用性和简洁性的现代Java特性。 - **输入输出流(IO)**:文件读写操作、缓冲流、对象序列化等内容。 - **多线程编程**:线程创建、同步机制、线程池等并发处理技术。 - **网络编程**:Socket通信、HTTP请求处理等基础知识。 - **数据库连接(JDBC)**:使用Java操作数据库,执行SQL语句并处理结果集。 - **实战项目**:结合真实场景设计的综合案例,如学生管理系统、银行账户模拟系统等。 ### 如何获取黑马程序员Java学习笔记 可以通过以下几种方式获取相关资料: 1. **Bilibili视频配套资料**:访问提供的视频链接,通常在视频描述或评论区中会附上下载链接或网盘分享地址。 2. **官方平台下载**:前往黑马程序员官网或者其合作教育平台注册账号后,部分课程资料可免费或付费下载。 3. **社区交流**:加入相关的QQ群、微信群或论坛(如GitHub、优快云),与其他学习者共享资源。 4. **书籍推荐**:参考《Java核心技术卷Ⅰ》《Effective Java》等经典教材作为补充材料。 ### 示例代码:简单的学生管理系统 以下是一个简单的Java控制台程序示例,用于管理学生信息: ```java import java.util.ArrayList; import java.util.List; import java.util.Scanner; class Student { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Student{name='" + name + "', age=" + age + "}"; } } public class StudentManagementSystem { private static List<Student> students = new ArrayList<>(); private static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { while (true) { System.out.println("1. Add Student"); System.out.println("2. View Students"); System.out.println("3. Exit"); System.out.print("Choose an option: "); int choice = scanner.nextInt(); scanner.nextLine(); // Consume newline switch (choice) { case 1: addStudent(); break; case 2: viewStudents(); break; case 3: System.out.println("Exiting..."); return; default: System.out.println("Invalid choice. Please try again."); } } } private static void addStudent() { System.out.print("Enter student name: "); String name = scanner.nextLine(); System.out.print("Enter student age: "); int age = Integer.parseInt(scanner.nextLine()); students.add(new Student(name, age)); System.out.println("Student added successfully.\n"); } private static void viewStudents() { if (students.isEmpty()) { System.out.println("No students found.\n"); } else { for (Student student : students) { System.out.println(student); } System.out.println(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值