Java入门基础-08常用API
本章知识点总结于黑马程序员的视频课程:《Java入门基础课程》,是对上课做的笔记
目录
前言
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系统