Bootstrap

Java入门基础-08常用API

Java入门基础-08常用API

本章知识点总结于黑马程序员的视频课程:《Java入门基础课程》,是对上课做的笔记

Java入门基础课程视频地址

上一章:Java入门基础-07面向对象编程


前言

API(全称 Application Programming Interface:应用程序编程接口),就是别人写好的一些程序,给我们程序员直接拿去调用即可解决问题。我们可以通过API文档了解Java提供的API。

一、包

什么是包?

  • 包是用来分门别类的管理不同程序的,类似于文件夹,建包有利于程序的管理和维护。
  • 建包的语法格式:
    package com.itheima.javabean
    public class Student {
    }

在自己程序中调用其他包下的程序的注意事项:
1、如果当前程序中,要调用自己所在包下的其他程序,可以直接调用。(同一个包下的类,相互可以直接调用)
在这里插入图片描述

2、如果当前程序中,要调用其他包下的程序,则必须在当前程序中导包,才可以访问!导包格式import 包名.类名。
在这里插入图片描述

可设置自动导包:
在这里插入图片描述

3、如果当前程序中,要调用Java提供的程序,也需要先导包才可以使用;但是Java.lang包下的程序是不需要我们导包的,可以直接使用。
在这里插入图片描述

4、如果当前程序中,要调用多个不同包下的程序,而且这些程序名正好一样,此时默认只能导入一个程序,另一个程序必须带包名访问。
在这里插入图片描述

二、String

String 概述

String是啥? 为什么学习String?

  • String代表字符串对象,可以用来封装字符串数据,并提供了很多操作字符串的方法。

对字符串进行处理的步骤:

1、创建对象
2、封装字符串数据
3、调String的方法

String创建对象封装字符串数据的方式

  • 方式一:Java程序中的所有字符串文字(如:“abc”)都为此类的对象
    String name = “小黑”;
    String schoolName = “黑马”;
  • 方式二:调用String类的构造器初始化字符串对象。
    在这里插入图片描述

示例:

    	public static void main(String[] args) {
        // 1、直接双引号得到字符串对象,封装字符串数据
        String name = "小黑";
        System.out.println(name);

        // 2、new String创建字符串对象,并调用构造器初始化字符串。
        String rs1 = new String();
        System.out.println(rs1); // 运行结果为空白字符串对象,不含任何内容

        String rs2 = new String("小白");
        System.out.println(rs2);

        char[] chars = {'a', '黑', 'A'};
        String rs3 = new String(chars);
        System.out.println(rs3);

        byte[] bytes = {11, 22, 34};
        String rs4 = new String(bytes);
        System.out.println(bytes);
    }

运行结果:

在这里插入图片描述

String的常用方法

String提供的操作字符串数据的常用方法:
(快速这些方法即可)
在这里插入图片描述
代码示例:

   		public static void main(String[] args) {
        String s = "黑马Java";
        // 1.获取字符串的长度
        System.out.println("s的长度为:" + s.length());
        System.out.println("-----------------------");

        // 2. 提取字符串中某个索引位置处的字符
        char ch = s.charAt(1);
        System.out.println("s索引为1的值为:" + ch);
        System.out.println("-----------------------");

        // 字符串的遍历
        System.out.print("[");
        for (int i = 0; i < s.length(); i++) {
            char ch2 = s.charAt(i);
            System.out.print(i == (s.length() - 1) ? ch2 : ch2 + " ");
        }
        System.out.println("]");
        System.out.println("-----------------------");

        // 3.把字符串转换成字符数组,再进行遍历
        char[] chars = s.toCharArray();
        System.out.print("[");
        for (int i = 0; i < chars.length; i++) {
            System.out.print(i == (chars.length - 1) ? chars[i] : chars[i] + ", ");
        }
        System.out.println("]");
        System.out.println("-----------------------");

        // 4、判断字符串内容,内容一样返回true(不忽略字母大小写) 不是判断地址是否一样
        String s1 = new String("黑马Java");
        String s2 = new String("黑马Java");
        String s3 = new String("黑马java");
        System.out.println(s1.equals(s2)); // true
        System.out.println(s1.equals(s3)); // false
        System.out.println(s1 == s2); // false 这个是判断地址
        System.out.println("-----------------------");

        // 5.忽略大小写比较字符串内容
        String s4 = new String("acBYrJabf");
        String s5 = new String("ACBYRjabF");
        System.out.println(s4.equalsIgnoreCase(s5)); // true
        System.out.println("-----------------------");

        // 6.截取字符串内容 (包前不包后)
        String s6 = "Java是最好的编程语言之一";
        String rs3 = s6.substring(0, 8);
        System.out.println(rs3);
        String rs4 = s6.substring(4, 8);
        System.out.println(rs4);
        System.out.println("-----------------------");

        // 7.从当前索引位置一直截取到字符串的末尾
        String rs5 = s6.substring(5);
        System.out.println(rs5);
        System.out.println("-----------------------");

        // 8. 把字符串中的某个内容替换成新内容,并返回新的字符串对象给我们
        String info = "这个电影真的太垃圾了,简直就是一部垃圾电影!!";
        String rs6 = info.replace("垃圾", "**");
        System.out.println(rs6);
        System.out.println("-----------------------");

        // 10.判断字符串中是包含某个关键字
        String s7 = "Java是最好的编程语言之一,我爱Java,Java不爱我";
        System.out.println(s7.contains("Java")); // true
        System.out.println(s7.contains("java")); // false
        System.out.println(s7.contains("Java1")); // false
        System.out.println("-----------------------");

        // 10. 判断字符串是否以某个字符串开头
        String s8 = "张三丰";
        System.out.println(s8.startsWith("张")); // true
        System.out.println(s8.startsWith("张三")); // true
        System.out.println(s8.startsWith("三")); // false
        System.out.println("-----------------------");

        // 11. 把字符串按照某个指定的内容分割成多个字符串,放到一个字符串数组中返回给我们
        String rs9 = "张无忌,周芷若,殷素素,赵敏";
        String[] names = rs9.split(",");
        for (int i = 0; i < names.length; i++) {
            System.out.println(names[i]);
        }
        System.out.println("-----------------------");


    }

运行结果:
在这里插入图片描述
在这里插入图片描述

Sting使用时的注意事项

  • 第一点:
    String对象的内容不可改变,被称为不可变字符串对象。
    原因:每次试图改变字符串对象,实际上是新产生了新的字符串对象,变量每次都是指向了新的字符串对象,之前字符串对象的内容确实是没有改变的,因此说String的对象是不可变的。
  • 第二点:
    1.只要是以"…"(即String name = “…”)方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只存储一份。
    2.但通过new方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中。

在这里插入图片描述

String的应用案例

完成用户登录

需求: 系统正确的登录名和密码是:itheima/123456,请在控制台开发一个登录界面,接收用户输入的登录名和密码,判断用户是否登录成功,登录成功后展示:“欢迎进入系统!”,即可停止程序(注意:要求最多给用户三次登录机会)

代码:

   		public static void main(String[] args) {
        // 1. 开发一个登录页面
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入您的登录名称:");
            String loginName = sc.next();
            System.out.println("请输入您的登录密码:");
            String passWord = sc.next();

            // 5. 开始调用登录方法,判断是否登录成功
            boolean rs = login(loginName, passWord);
            if (rs){
                System.out.println("欢迎进入系统!");
                break;
            }else {
                System.out.println("登录名或者密码有误,请重新输入:");
                System.out.println("您还剩" + (2 - i) + "次登录机会");
            }
        }
    }

    // 2.开发一个登录方法,接收用户的登录名和密码,返回验证结果
    public static boolean login(String loginName, String passWord){
        // 3.准备一份系统正确的登录名和密码
        String okLoginName = "itheima";
        String okPassWord = "123456";

        // 4. 判断用户是否登录成功
        if (okLoginName.equals(loginName) && okPassWord.equals(passWord)){
            return true;
        }else {
            return false;
        }
    }

运行结果:
在这里插入图片描述
在这里插入图片描述

使用String来开发验证码

需求:实现随机产生验证码,验证码每个可能是数字、大写字母、小写字母。

代码:

    	public static void main(String[] args) {
        System.out.println(createCode(4));
        System.out.println(createCode(7));
    }

    // 1、设计一个方法,返回指定位数的验证码
    public static String createCode(int n){
        // 2、定义2个变量,一个是记住最终产生的随机验证码,一个是记住可能用到的全部字符
        String code = "";
        String date = "qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM0123456789";

        Random r = new Random();
        for (int i = 0; i < n; i++) {
            int index = r.nextInt(date.length());
            code += date.charAt(index);
        }
        return code;
    }

运行结果:

在这里插入图片描述

三、ArrayList

ArrayList快速入门

什么是集合?

  • 集合是一种容器,用来装数据的,类似于数组。

有数组,为啥还学习集合?

  • 数组定义完成并启动后,长度就固定了。
  • 集合大小可变,开发中用的更多。

集合的种类很多,最常见的是ArrayList。

ArrayList集合该怎么学呢?

1、会提供创建容器的对象方式。
2、会提供相应的方法对容器进行操作
方法有:添加数据、删除某个数据、修改某个数据、获取某个数据

ArrayList< E >

  • 是用的最多、最常见的一种集合。

ArrayList提供的常用方法有:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码示例:

    public static void main(String[] args) {
        // 1.ArrayList<E>规范书写格式
        ArrayList<String> list = new ArrayList<>();
        list.add("黑马");
        list.add("itheima");
        list.add("黑马");
        list.add("java");
        list.add("html");
        System.out.println(list);
        System.out.println("--------------------------");

        // 2.往集合中的某个索引位置处添加一个数据
        list.add(1, "MySQL");
        System.out.println(list);
        System.out.println("--------------------------");

        // 3.根据索引获取集合中某个索引位置处的值
        String rs = list.get(1);
        System.out.println(rs);
        System.out.println("--------------------------");

        // 4.获取集合的大小(返回集合中存储的元素个数)
        System.out.println(list.size());
        System.out.println("--------------------------");

        // 5. 根据索引删除集合中的某个元素值,会返回被删除的元素值给我们
        System.out.println(list.remove(1));
        System.out.println(list);
        System.out.println("--------------------------");

        // 6.直接删除某个元素值,删除成功会返回true,反之
        System.out.println(list.remove("java"));
        System.out.println(list);

        // 默认删除的是第一次出现的数据
        System.out.println(list.remove("黑马"));
        System.out.println(list);
        System.out.println("--------------------------");

        // 7. 修改某个索引位置处的数据,修改后会返回原来的值给我们
        System.out.println(list.set(1, "黑马程序员"));
        System.out.println(list);
        System.out.println("--------------------------");

    }

运行结果:

在这里插入图片描述

ArrayList应用案例

掌握从容器中找出某些数据并成功删除的技巧

需求:现在假如购物车中存储了如下这些商品:Java入门,宁夏枸杞,黑枸杞,人字拖,特级枸杞,枸杞子。现在用户不想买枸杞了,选择了批量删除,请完成该需求。
购物车有:Java入门、宁夏枸杞、黑枸杞、人字拖、特级枸杞、枸杞子。

代码:

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Java入门");
        list.add("宁夏枸杞");
        list.add("黑枸杞");
        list.add("人字拖");
        list.add("特级枸杞");
        list.add("枸杞子");
        System.out.println(list);
        // 开发完成需求:从集合中删除包含枸杞的wupin
        for (int i = 0; i < list.size(); i++) {
            String ele = list.get(i);
            if(ele.contains("枸杞")){
                list.remove(ele);
                i--; // 若没有这个,则会有bug,枸杞会删除不干净,因为当删除一个索引上的值后,后一个值会往前移一位,此时for循环会直接遍历后一个值,导致删除不干净
                // 或者从集合后面倒着删除,令 i = list.size() - 1, i >= 0, i--;
            }
        }
        System.out.print("删除后为:");
        System.out.println(list);
    }

运行结果:

在这里插入图片描述
总结:
从集合中遍历元素,并筛选出元素删除它,应该如何操作才能不出bug?

方式一:每次删除一个数据后,索引-1。
方式二:从集合后面遍历然后删除,可以避免漏掉元素。

ArrayList综合案例-模仿外卖系统中的商家系统

需求:完成菜品的上架、以及菜品信息浏览功能。

代码:
Food.java

    private String name;
    private double price;
    private String info; // 菜品描述

    public Food() {
    }

    public Food(String name, double price, String info) {
        this.name = name;
        this.price = price;
        this.info = info;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

FoodOperator.java

public class FoodOperator {
    /**
     * 菜品操作类:负责上架和浏览菜品信息*/
    public ArrayList<Food> foodlist = new ArrayList<>();

    // 上架菜品功能
    public void addFood(){
        Food f = new Food();
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要上架商品的菜品名称:");
        String name = sc.next();
        f.setName(name);

        System.out.println("请输入您要上架商品的菜品价格:");
        double price = sc.nextDouble();
        f.setPrice(price);

        System.out.println("请输入您要上架商品的菜品其他信息:");
        String info = sc.next();
        f.setInfo(info);

        foodlist.add(f);
        System.out.println("上架成功!!");
    }

    // 展示菜品
    public void showAllFoods(){
        if (foodlist.size() == 0){
            System.out.println("您还没有菜品,请上架菜品");
        }
        for (int i = 0; i < foodlist.size(); i++) {
            Food f = foodlist.get(i);
            System.out.println(f.getName());
            System.out.println(f.getPrice());
            System.out.println(f.getInfo());
            System.out.println("-----------------------");
        }
    }

    /**负责操作页面*/
    public void start(){
        while (true) {
            System.out.println("请选择功能:");
            System.out.println("1、上传菜品");
            System.out.println("2、展示菜品");
            System.out.println("3、退出");
            Scanner sc = new Scanner(System.in);
            System.out.println("请选择您的操作:");
            String command = sc.next();
            switch (command){
                case "1":
                    addFood();
                    break;
                case "2":
                    showAllFoods();
                    break;
                case "3":
                    System.out.println("下次再来哦~");
                    return;
                default:
                    System.out.println("您输入的指令有误,请重新输入:");

            }
        }
    }

}

Test.java

    public static void main(String[] args) {
        FoodOperator operator = new FoodOperator();

        operator.start();
    }

运行结果:

在这里插入图片描述
在这里插入图片描述

总结

本章知识点到这就结束啦,本章学习了包;String的概述,String的常用方法,String使用时的注意事项,以及String的两个应用案例;ArrayList的快速入门,ArrayList的常用方法,以及它的两个案例。

下一章:综合案例-ATM系统

;