Java常用API——学习笔记(7)

本文详细讲解了Java中String类型的基础操作、内存原理,以及创建方式的区别,同时介绍了ArrayList的创建、泛型使用和常见API,包括字符串比较、数组操作和实例案例,如验证码生成和用户登录验证。

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

一、String

1、概述

String字符串类型,可以定义字符串变量指向字符串对象。提供了操作字符串的功能。实际开发中用的多。

注意:创建的字符串不可改变,""方式给出的字符串对象,存储在字符串常量池中。每次修改字符串都指向新的字符串对象。

2、创建String对象两种方式

(1)直接用""定义(推荐)

(2)通过构造器创建对象,查看API文档,

 前两种构造器不推荐,后两种在今后可能会用到。

package com.laogao.practice;
public class JavaPractice {
    public static void main(String[] args) {
        //String
        //创建String对象,方式1
        String s1="abc";
        System.out.println(s1);//abc
        //方式2
        char[] ch={'t','t','x','s'};
        byte[] bt={97,98,65,67};
        String s2=new String(ch);
        String s3=new String(bt);
        System.out.println(s2);//ttxs,将字符自动拼接为字符串
        System.out.println(s3);//abAC,输出ASCII码对应的字母
    }
}

两种创建方式区别(面试):

1、以""方式创建的字符串对象,在字符串常量池中存储,且相同内容只存一份(原因:节省内存资源)

2、通过构造器new对象,每次都是一个新对象,放在堆内存中。

package com.laogao.practice;
public class JavaPractice {
    public static void main(String[] args) {
        //String
        //创建String对象,方式1
        String s1="abc";
        String s11="abc";
        System.out.println(s1==s11);//true,说明s1、s11存储地址一样
        //方式2
        char[] ch={'t','t','x','s'};
        String s2=new String(ch);
        String s3=new String(ch);
        System.out.println(s2==s3);//false,说明s2、s3存储地址不一样
    }
}

3、内存原理

4、面试题

(1)面试1

分析:

第一行代码创建了两个对象,双引号中的放入了字符串常量池,new是放入堆内存。

第二行代码在第一行代码基础上,不需要创建新对象。

s1和s2比较,实际上是字符串常量池中的对象和堆内存中的对象比较,是两个不同的对象,因此false。

(2)面试2

分析:

第一段代码中,s3不是直接用双引号创建的,因此是放在堆内存而不是字符串常量池中的,因此false,第二段代码中,因为优化机制,因此true

5、提供了哪些API

(1)字符串的比较

"=="是比较地址是否一样,但无法比较内容是否一样。"=="可以比较基本数据类型。

字符串内容比较两种方式:精确比较、忽略大小写比较(验证码),如下图所示:

案例:登陆注册

package com.laogao.practice;

import java.util.Scanner;

public class JavaPractice {
    public static void main(String[] args) {
        //String
        //快捷键shift+ctrl+enter:调整某行格式
        String rightusn = "李白";//直接存储在字符串常量池
        String rightpsw = "123";
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = scanner.next();//存储在堆内存中
        System.out.println("请输入密码:");
        String password=scanner.next();

        System.out.println(username==rightusn);//false
        System.out.println(password==rightpsw);//false

        if(username.equals(rightusn)&&password.equals(rightpsw)){
            System.out.println("登录成功!");
        }


    }
}

(2)其他常用API

(黑马老师举的例子太有意思了噗哈哈哈,草原三剑客)

 代码练习:

package com.laogao.practice;
public class JavaPractice {
    public static void main(String[] args) {
        //String
        String s1="1235den";
        System.out.println(s1.length());//字符串长度,7

        System.out.println(s1.charAt(5));//获取索引处字符,e
        //可以用获取索引的这个方法来遍历数组
        for (int i = 0; i < s1.length(); i++) {
            System.out.println(s1.charAt(i));
        }

        char[] c1=s1.toCharArray();//将字符串转化为字符数组
        //遍历数组
        for (int i = 0; i < c1.length; i++) {
            System.out.println(c1[i]);
        }

        //字符串截取,包前不包后
        System.out.println(s1.substring(0, 5));//1235d
        System.out.println(s1.substring(5));//en,从索引处截取到末尾

        //替换
        String s2=s1.replace("e","哈哈哈");//第一个是目标,第二个是替换值
        System.out.println(s2);//1235d哈哈哈n

        //字符串分割
        String s3="小李,小森,小世界";
        String[] s4=s3.split(",");
        for (int i = 0; i < s4.length; i++) {
            System.out.println(s4[i]);
        }
    }
}

6、案例

(1)生成随机验证码

package com.laogao.practice;
import java.util.Random;

public class JavaPractice {
    public static void main(String[] args) {
        //String
        //随机5位验证码
        String item="0123456789QWERTYUIOPLKJHGFDSAZXCVBNMqwertyuioplkjhgfdsazxcvbnm";
        String yzm="";
        Random random=new Random();
        for (int i = 0; i < 5; i++) {
            yzm+=item.charAt(random.nextInt(item.length()));
        }

        System.out.println(yzm);
    }
}

(2)模拟用户登录

package com.laogao.practice;

import java.util.Scanner;

public class JavaPractice {
    public static void main(String[] args) {
        //String
        //快捷键shift+ctrl+enter:调整某行格式
        String rightusn = "李白";//直接存储在字符串常量池
        String rightpsw = "123";
        Scanner scanner = new Scanner(System.in);

        for (int i = 1; i <= 3; i++) {
            System.out.println("请输入用户名:");
            String username = scanner.next();//存储在堆内存中
            System.out.println("请输入密码:");
            String password=scanner.next();

            if(username.equals(rightusn)){
                if (password.equals(rightpsw)){
                    System.out.println("登录成功!");
                }else {
                    System.out.println("密码错误,您还有"+(3-i)+"次机会");
                }

            }else {
                System.out.println("用户名错误,您还有"+(3-i)+"次机会");
            }

        }
    }
}

(3)手机号码屏蔽

package com.laogao.practice;
import java.util.Scanner;

public class JavaPractice {
    public static void main(String[] args) {
        //String
        //屏蔽手机号
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入手机号:");
        String phone = scanner.next();//补变量快捷键:alt+enter

        String phone2=phone.substring(0,3)+"****"+phone.substring(7);
        System.out.println(phone2);
    }
}

二、ArrayList

1、概述

ArrayList集合类,容器,与数组类似,但存储大小不固定,动态变化

集合非常适合元素不确定,进行增删改查的业务场景,集合提供了丰富的功能。

2、创建ArrayList对象

ArrayList是集合的一种。

package com.laogao.practice;
import java.util.ArrayList;

public class JavaPractice {
    public static void main(String[] args) {
        //ArrayList
        //1、创建
        ArrayList list=new ArrayList();
        //向集合中添加元素,用到了方法的重载
        list.add("我");
        list.add("爱");
        list.add("中国");
        list.add(0,123);//指定索引位置添加元素
        System.out.println(list);//[123, 我, 爱, 中国]

    }
}

 3、泛型

格式:<数据类型>,使用之前要确定是否支持,集合支持泛型,添加泛型时,后边的泛型可以不写

Java是强类型语言,没有泛型则可以添加任意类型的数据,所以要写上泛型,是规范和标准。加上泛型后,集合添加的元素类型要与泛型一致,否则报错。

集合只能存储引用类型,不支持基本数据类型,因此不能写int,要写Interger

package com.laogao.practice;
import java.util.ArrayList;

public class JavaPractice {
    public static void main(String[] args) {
        //ArrayList
        ArrayList<String> list=new ArrayList<>();//泛型
        list.add("我");
        list.add("爱");
        ArrayList<Integer> list2=new ArrayList<>();//泛型
        list2.add(1);
        list2.add(1546);
        list2.add(11);
        //list2.add("hhh");//数据类型与泛型不一致,报错
        System.out.println(list);//[我, 爱]
        System.out.println(list2);//[1, 1546, 11]

    }
}

4、常用的API

5、案例练习

(1)案例1

package com.laogao.practice;
import java.util.ArrayList;

public class JavaPractice {
    public static void main(String[] args) {
        //ArrayList
        ArrayList<Integer> list=new ArrayList<>();
        list.add(98);
        list.add(77);
        list.add(66);
        list.add(89);
        list.add(79);
        list.add(50);
        list.add(100);
        System.out.println(list);//[98, 77, 66, 89, 79, 50, 100]
        //方法1
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i)<80){
                list.remove(i);
                i--;//每次删除一个元素,后一个元素会前移一位,需要再判断
            }
        }
        System.out.println(list);//[98, 89, 100]
        //方法2
        ArrayList<Integer> list2=new ArrayList<>();
        list2.add(98);
        list2.add(77);
        list2.add(66);
        list2.add(89);
        list2.add(79);
        list2.add(50);
        list2.add(100);
        System.out.println(list2);//[98, 77, 66, 89, 79, 50, 100]
        for (int i = list2.size()-1; i >=0; i--) {
            if (list2.get(i)<80){
                list2.remove(i);
            }
        }
        System.out.println(list2);
    }
}

(2)案例2

package com.laogao.practice;
import java.util.ArrayList;

public class JavaPractice {
    public static void main(String[] args) {
        //ArrayList
        ArrayList<Movie> movieArrayList=new ArrayList<>();//存储电影对象的列表
        movieArrayList.add(new Movie("肖申克的救赎",9.7,"罗宾斯"));
        movieArrayList.add(new Movie("霸王别姬",9.6,"张国荣"));
        movieArrayList.add(new Movie("阿甘正传",9.5,"汤姆"));

        for (int i = 0; i < movieArrayList.size(); i++) {
            Movie m=movieArrayList.get(i);
            System.out.println("电影名称:"+m.getName());
            System.out.println("电影评分:"+m.getScore());
            System.out.println("电影演员:"+m.getActors());
            System.out.println("------------------");
        }

    }
}

内存原理:

(3)案例3

package com.laogao.practice;
import java.util.ArrayList;
import java.util.Scanner;

public class JavaPractice {
    public static void main(String[] args) {
        //元素搜索
        ArrayList<Student> students=new ArrayList<>();
        students.add(new Student("老A","20180302",23,"1班"));
        students.add(new Student("老B","20180303",23,"2班"));
        students.add(new Student("老C","20180304",26,"3班"));
        students.add(new Student("老D","20180305",26,"4班"));

        for (int i = 0; i < students.size(); i++) {
            Student s=students.get(i);
            System.out.println(s.getStudynum()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getClassroom());
        }
        Scanner scanner=new Scanner(System.in);
        while (true) {
            System.out.println("请输入您要检索的学生学号:");
            String num=scanner.next();
            Student rs = search(students,num);
            if (rs==null){
                System.out.println("未找到");
            }else{
                System.out.println(rs.getStudynum()+"\t"+rs.getName()+"\t"+rs.getAge()+"\t"+rs.getClassroom());
            }
        }

    }
    /**注释
     *
     * @param students 存储全部学生的集合
     * @param num 要搜索的学生学号
     * @return 返回学生对象或者null
     */
    public static Student search(ArrayList<Student> students,String num){
        for (int i = 0; i < students.size(); i++) {
            Student s= students.get(i);
            if (s.getStudynum().equals(num)){//注意此处使用equals
                return s;
            }
        }
        return null;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值