part08——包和Java常用API

YangeIT大约 20 分钟Java基础入门StringArrayList

part08——包和Java常用API

今日目标

我们前面已经学习了面向对象编程,使用面向编程这个套路,我们需要自己写类,然后创建对象来解决问题。但是在以后的实际开发中,更多的时候,我们是利用面向编程这种套路,使用别人已经写好的类来编程的。

  1. 包 🍐
  2. String类 ❤️ 🍐
  3. ArrayList类 ❤️ 🍐

知识储备

  1. 在自己的计算机中的硬盘中,通过创建 电影、音乐、学习资料等文件夹,分门别类的管理资料
  2. 使用现成的播放器看片,而先编写播放器代码,然后看片。

1. 包 🍐

1.包的概念

是Java中用于组织和管理类的一种机制,它将相关的类组织在一起,形成一个有层次结构命名空间

例子:

2.为什么使用包?

  1. 生活中的类比:使用文件夹来组织和分类文件,类似于家庭中使用抽屉和文件夹来整理物品。
  1. 代码的组织性:包能够帮助我们更好地组织和管理代码,防止命名冲突,提高代码的可维护性和可读性。
  1. 命名空间的管理:通过包,可以避免不同模块或库之间的命名冲突,确保程序的整体性和稳定性。

3. 包的定义语法和注意事项

  • 命名规范:遵循Java命名规范,使用小写字母和下划线
  • 目录结构:包名应与目录结构相对应,方便管理和查找。点击查看图解open in new window
  • 访问修饰符:包内的类应当使用适当的访问修饰符,控制访问权限。
  • 导入语句:通过import语句引入其他包中的类,避免写出完整的类路径。 image

4. 包的使用注意事项

  • 如果当前程序中,要调用自己所在包下的其他程序,可以直接调用。(同一个包下的类,互相可以直接调用)
  • 如果当前程序中,要调用其他包下的程序,则必须在当前程序中导包, 才可以访问!
    • 导包格式: import 包名.类名
  • 如果当前程序中,要调用Java.lang包下的程序,不需要我们导包的,可以直接使用。
  • 如果当前程序中,要调用多个不同包下的程序,而这些程序(类)名正好一样,此时默认只能导入一个程序,另一个程序必须带包名访问

总结

课堂作业

  1. 在com.itheima的包下,分别创建array、method、object等包名,用来管理数组练习案例、方法练习案例、对象练习案例 如下图
image
image

2. String类 ✏️ 🍐 ❤️

1. String类快速入门 🍐

String类快速入门

1. String类是什么?

在计算机编程中,字符串是由字符组成的序列。字符可以是字母、数字、符号等,字符串是由这些字符按照一定顺序组成的。在Java中,我们使用String类来表示字符串。

2. 字符串在程序中扮演着非常重要的角色,因为它们广泛应用于各种场景。

  • 场景一:统计文字中的特定词汇

比如,我们需要统计一段文字中出现了多少次“爱”这个字。这时候,我们就需要对字符串进行处理来进行统计操作。

  • 场景二:检索数组中的特定元素

假设我们有一个存储名字的数组,我们想要知道姓“张”的名字有几个。这时,我们同样需要字符串的处理技巧。

  • 场景三:比较用户名和密码是否正确

在用户登录的场景中,我们通常需要比较输入的用户名和密码是否和存储的一致。这也是字符串处理的典型应用。

  • 场景四:检测敏感字符

另一个常见的应用是检测用户输入的文字是否包含敏感字符,以保证信息的安全。

3.JDK文档有关于String类的说明

在线JDK文档: https://www.runoob.com/manual/jdk11api/index.htmlopen in new window

4. 定义字符串

    //定义字符串
    String name = "黑马程序长沙校区,欢迎你";
    //有参构成
    String name1 = new String("yangeit")

5. 常用的方法

  • length():获取字符串的长度。判断是否是手机号码是不是11位
  • equals(anotherString):比较两个字符串是否相等。登录功能中密码比较中常用
  • equalsIgnoreCase(String anotherString) 将此 String与另一个 String比较,忽略了大小写。 验证码比较中常用
  • contains(CharSequence s) 判断字符串是否包含另外一个字符串,如果包含 返回true 。 判断是否包含 敏感字
  • replace(char oldChar, char newChar) 返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar 。用于替换敏感字 为 **

案例代码:

/**
 * 目标:掌握String的创建和常用方法的使用
 */
public class StringDemo {
    public static void main(String[] args) {
        // 创建字符串String
        String name ="黑马程序员长沙校区,Java100期欢迎你";
        //有参构造方式构建
        String name1 = new String("黑马");

        // 获得字符串长度
        int length = name.length();
        System.out.println(length); //21
        System.out.println(name1.length()); //2

        // 比较2个字符串是否相等
        String name2="黑马程序员长沙校区,java100期欢迎你";
        System.out.println(name.equals(name2)); //false

        // 忽略大小写,比较字符串
        System.out.println(name.equalsIgnoreCase(name2)); //true

        // 判断是否包含关键字
        System.out.println(name.contains("黑马"));  //true
        System.out.println(name.contains("黑马1")); //false

        // 替换字符串
        String replace = name.replace("100", "101");
        System.out.println(replace);//结果:黑马程序员长沙校区,Java101期欢迎你


    }
}

总结

课堂作业

练习下上述String案例代码

在线JDK文档: https://www.runoob.com/manual/jdk11api/index.htmlopen in new window

2. String类的常用方法 ✏️

String类的常用方法

image
image

代码操作

public class StringDemo2 {
    public static void main(String[] args) {
        //目标:快速熟悉String提供的处理字符串的常用方法。
        String s = "黑马Java";
      
        // 1、提取字符串中某个索引位置处的字符
        char c = s.charAt(1);
        System.out.println(c);

        // 字符串的遍历
        for (int i = 0; i < s.length(); i++) {
            // i = 0 1 2 3 4 5
            char ch = s.charAt(i);
            System.out.println(ch);
        }

        System.out.println("-------------------");

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

      
        // 3、从当前索引位置一直截取到字符串的末尾
        String rs2 = s3.substring(5);
        System.out.println(rs2);

        // 4、判断字符串是否以某个字符串开头。
        String rs4 = "张三丰";
        System.out.println(rs4.startsWith("张"));
        System.out.println(rs4.startsWith("张三"));
        System.out.println(rs4.startsWith("张三2"));

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

3. String的注意事项 ⚠️ 🚀

String的注意事项

字符串原理性的内容,就当做注意事项来学习一下。一共有下面的2点:

1662610060051
1662610060051

创建字符串方式有多种

// 1、直接双引号得到字符串对象,封装字符串数据
String name = "黑马666";
System.out.println(name);

// 2、new String创建字符串对象,并调用构造器初始化字符串
String rs1 = new String();
System.out.println(rs1); // ""

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

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

byte[] bytes = {97, 98, 99};
String rs4 = new String(bytes);
System.out.println(rs4);

总结

字符串的注意事项:

  1. String是不可变字符串对象
  2. 只要是以"..."方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只存储一份
  3. 但通过new方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中。

课堂作业

  1. 日志中有哪些信息?🎤

4. String案例 ✏️

用户登录案例

接下来给大家做一个案例,使用字符串的功能完成登录案例。案例需求如下:

1662618819077
1662618819077
点击查看代码
/**
   目标:完成用户的登录案例。
 */
public class StringTest4 {
    public static void main(String[] args) {
        // 1、开发一个登录界面
        for (int i = 0; i < 3; i++) {
            Scanner sc = new Scanner(System.in);
            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; // 跳出for循环,代表登录完成
            }else {
                System.out.println("登录名或者密码错误,请您确认~~");
            }
        }
    }

    /**
      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;
        }*/
        return okLoginName.equals(loginName) && okPassWord.equals(passWord);
    }
}

练习

🚩

String desc="焱哥曰:学IT技术者,当虚心若愚,不敢自满。凡事先问己,再问他人。学习需恒心,勇于尝试,遇挫不退缩,努力攻克难题。方能渐入佳境,突破自我,成为一名真正的IT专业人士。吾期盼汝等立志成才,在IT领域创出新天地。"

需求:

  1. 统计出上述文字的长度
  2. 判断出上述文字中是否包含虚心若愚
  3. 统计上述文字中含有几个
  4. 将上述文字中的 IT 替换成 Java
  5. 请问上述文字中 这个字的索引是多少?
  6. 使用将上述文字进行分割(成为数组),打印出索引最大的文字

3. ArrayList类 ✏️ 🍐 ❤️

1. ArrayList快速入门 🍐

ArrayListArrayList

ArrayList一种 用来装数据的 容器,类似于数组。与数组不同的是 ArrayList的大小可变.

1. 创建一个ArrayList非常简单,只需使用下面的语句:

ArrayList names = new ArrayList();

2. 如何添加数据,并输出数据


ArrayList myList = new ArrayList();
// 输出数据
System.out.println(myList);

// 添加数据
myList.add("小伟");
myList.add("胡敏");

// 输出数据
System.out.println(myList);


3.常用的方法

JDK在线文档 : https://www.runoob.com/manual/jdk11api/index.htmlopen in new window

  • add(element): 向列表末尾添加元素。
  • get(index): 获取指定位置的元素。
  • size(): 返回列表中的元素个数。
  • remove(index): 移除指定位置的元素。
  • contains(element): 判断列表是否包含某个元素。
  • set(int index,E element) :修改指定索引处的元素,返回被修改的元素

完整代码:


/**
目标:要求同学们掌握如何创建ArrayList的对象,并熟悉ArrayList提供的常用方法。
 */
public class ArrayListDemo1 {
    public static void main(String[] args) {
        // 1、创建一个ArrayList的对象
        ArrayList list = new ArrayList();

        list.add("黑马");
        list.add("黑马");
        list.add("Java");

        System.out.println(list);

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

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

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

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

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

        list.add(1, "html");
        System.out.println(list);

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

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

3. ArrayList应用案例 ✏️

ArrayList应用案例1

接下来我们做个案例,用来往ArrayList中存储自定义的对象,先阅读下面的案例需求:

1662623794937
1662623794937

分析需求发现:

  1. 在外卖系统中,每一份菜都包含,菜品的名称、菜品的原价、菜品的优惠价、菜品的其他信息。那我们就可以定义一个菜品类(Food类),用来描述每一个菜品对象要封装那些数据。
  2. 接着再写一个菜品管理类(FoodManager类),提供展示操作界面、上架菜品、浏览菜品的功能。
  • 首先我们先定义一个菜品类(Food类),用来描述每一个菜品对象要封装那些数据。
public class Food {
    private String name;	//菜品名称
    private double originalPrice; //菜品原价
    private double specialPrice; //菜品优惠价
    private String info; //菜品其他信息

    public Food() {
    }

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

    public String getName() {
        return name;
    }

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

    public double getOriginalPrice() {
        return originalPrice;
    }

    public void setOriginalPrice(double originalPrice) {
        this.originalPrice = originalPrice;
    }

    public double getSpecialPrice() {
        return specialPrice;
    }

    public void setSpecialPrice(double specialPrice) {
        this.specialPrice = specialPrice;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}
  • 接下来写一个菜品管理类,提供上架菜品的功能、浏览菜品的功能、展示操作界面的功能。
public class FoodManager{
    //为了存储多个菜品,预先创建一个ArrayListArrayList;
    //上架菜品时,其实就是往ArrayList中添加菜品对象
    //浏览菜品时,其实就是遍历ArrayList中的菜品对象,并打印菜品对象的属性信息。
    private ArrayList<Food> foods = new ArrayList<>(); 
    //为了在下面的多个方法中,能够使用键盘录入,提前把Scanner对象创建好;
    private Scanner sc = new Scanner(System.in);
   
    /**
     1、商家上架菜品
     */
    public void add(){
        System.out.println("===菜品上架==");
        // 2、提前创建一个菜品对象,用于封装用户上架的菜品信息
        Food food = new Food();
        System.out.println("请您输入上架菜品的名称:");
        String name = sc.next();
        food.setName(name);

        System.out.println("请您输入上架菜品的原价:");
        double originalPrice = sc.nextDouble();
        food.setOriginalPrice(originalPrice);

        System.out.println("请您输入上架菜品的优惠价:");
        double specialPrice = sc.nextDouble();
        food.setSpecialPrice(specialPrice);

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

        // 3、把菜品对象添加到ArrayList容器中去
        foods.add(food);
        System.out.println("恭喜您,上架成功~~~");
    }

    /**
       2、菜品;浏览功能
     */
    public void printAllFoods(){
        System.out.println("==当前菜品信息如下:==");
        for (int i = 0; i < foods.size(); i++) {
            Food food = foods.get(i);
            System.out.println("菜品名称:" + food.getName());
            System.out.println("菜品原价:" + food.getOriginalPrice());
            System.out.println("菜品优惠价:" + food.getSpecialPrice());
            System.out.println("其他描述信息:" + food.getInfo());
            System.out.println("------------------------");
        }
    }
    /**
    3、专门负责展示系统界面的
    */
    public void start(){
        while (true) {
            System.out.println("====欢迎进入商家后台管理系统=====");
            System.out.println("1、上架菜品(add)");
            System.out.println("2、浏览菜品(query)");
            System.out.println("3、退出系统(exit)");
            System.out.println("请您选择操作命令:");
            String command = sc.next();
            switch (command) {
                case "add":
                    add();
                    break;
                case "query":
                    printAllFoods();
                    break;
                case "exit":
                    return; // 结束当前方法!
                default:
                    System.out.println("您输入的操作命令有误~~");
            }
        }
	}
}
  • 最后在写一个测试类Test,在测试类中进行测试。其实测试类,只起到一个启动程序的作用。
public class Test {
    public static void main(String[] args) {
        FoodManager manager = new FoodManager();
        manager.start();
    }
}

运行结果如下:需要用户输入add、query或者exit,选择进入不同的功能。

1662624841469
1662624841469

好了,如果你能够把这个案例写出来,说明你对面向对象的思维封装数据,以及使用ArrayList容器存储数据,并对数据进行处理这方面的知识已经运用的很熟悉了。


来做点作业巩固一下吧!!!✏️ 💪