二、包
1. 什么是包
在学习API类之前,我们先要学习包。因为Java官方提供的类有很多,为了对这些类进行分门别类的管理,别人把写好的类都是放在不同的包里的。
包其实类似于文件夹,一个包中可以放多个类文件。
建包的语法格式:
//类文件的第一行定义包
package com.itheima.javabean;
public class 类名{
}
2. 在自己的程序中,调用其他包中的程序,需要注意下面一个问题
-
如果当前程序中,要调用自己所在包下的其他程序,可以直接调用。(同一个包下的类,互相可以直接调用)
-
如果当前程序中,要调用其他包下的程序,则必须在当前程序中导包, 才可以访问!
导包格式:
import 包名.类名
-
如果当前程序中,要调用Java.lang包下的程序,不需要我们导包的,可以直接使用。
-
如果当前程序中,要调用多个不同包下的程序,而这些程序名正好一样,此时默认只能导入一个程序,另一个程序必须带包名访问。
三、String类
1. String类概述
Java为了方便我们处理字符串,所以给我们提供了一个String类来代表字符串,这个类就是java.lang
包下。
按照面向对象的编程思想,对于字符串的操作,只需要创建字符串对象,用字符串对象封装字符串数据,然后调用String类的方法就可以了。
2. String创建对象
接下来我们打开String类的API,看一下String类的对象如何创建。如下图所示
String类的API中,有这么一句话:“Java程序中的所有字符串字面值(如"abc")都是字符串的实例实现”。这里所说的实例实现,其实指的就是字符串对象。
意思就是:所有Java的字符串字面值,都是字符串对象。
- 所以创建String对象的第一种方式就有了
String s1 = "abc"; //这里"abc"就是一个字符串对象,用s1变量接收
String s2 = "黑马程序员"; //这里的“黑马程序员”也是一个字符串对象,用s2变量接收
- 创建String对象还有第二种方式,就是利用String类的构造方法创建String类的对象。
我们前面学习过类的构造方法,执行构造方法需要用到new关键字。new String(参数)
就是在执行String类的构造方法。
下面我们演示通过String类的构造方法,创建String类的对象
// 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);
3. String类的常用方法
public class StringDemo2 {
public static void main(String[] args) {
//目标:快速熟悉String提供的处理字符串的常用方法。
String s = "黑马Java";
// 1、获取字符串的长度
System.out.println(s.length());
// 2、提取字符串中某个索引位置处的字符
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("-------------------");
// 3、把字符串转换成字符数组,再进行遍历
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.println(chars[i]);
}
// 4、判断字符串内容,内容一样就返回true
String s1 = new String("黑马");
String s2 = new String("黑马");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
// 5、忽略大小写比较字符串内容
String c1 = "34AeFG";
String c2 = "34aEfg";
System.out.println(c1.equals(c2)); // false
System.out.println(c1.equalsIgnoreCase(c2)); // true
// 6、截取字符串内容 (包前不包后的)
String s3 = "Java是最好的编程语言之一";
String rs = s3.substring(0, 8);
System.out.println(rs);
// 7、从当前索引位置一直截取到字符串的末尾
String rs2 = s3.substring(5);
System.out.println(rs2);
// 8、把字符串中的某个内容替换成新内容,并返回新的字符串对象给我们
String info = "这个电影简直是个垃圾,垃圾电影!!";
String rs3 = info.replace("垃圾", "**");
System.out.println(rs3);
// 9、判断字符串中是否包含某个关键字
String info2 = "Java是最好的编程语言之一,我爱Java,Java不爱我!";
System.out.println(info2.contains("Java"));
System.out.println(info2.contains("java"));
System.out.println(info2.contains("Java2"));
// 10、判断字符串是否以某个字符串开头。
String rs4 = "张三丰";
System.out.println(rs4.startsWith("张"));
System.out.println(rs4.startsWith("张三"));
System.out.println(rs4.startsWith("张三2"));
// 11、把字符串按照某个指定内容分割成多个字符串,放到一个字符串数组中返回给我们
String rs5 = "张无忌,周芷若,殷素素,赵敏";
String[] names = rs5.split(",");
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
}
}
4. String的注意事项
在上一节,我们学习了字符串的一些常用方法,在实际工作中用这些方法解决字符串的常见问题是完全足够的,但是在面试时可能会问一些原理性的东西。
所以把字符串原理性的内容,就当做注意事项来学习一下。一共有下面的2点:
- 注意事项1:String类的对象是不可变的对象
我们先看一段代码,分析这段代码的结果
以上代码中,先定义了一个String变量 name第一次赋值为“黑马”;
然后对name
变量记录的字符串进行两次拼接,第一次拼接“程序员”
,第二次拼接“播妞”
;我们发现得到的结果是:黑马程序员播妞
这里问题就来了,你不是是说:**String类的对象是不可变的字符串对象吗?**我看name的值变了呀!!!
下面我们就解释一下,String是不可变对象到底是什么含义。
需要注意的是:只要是以“”
方式写出的字符串对象,会在堆内存中的字符串常量池中存储。
执行第一句话时,会在堆内存的常量池中,创建一个字符串对象“黑马”
,然后把“黑马”
的地址赋值给String name
当执行第二句话时,又会再堆内存的常量池中创建一个字符串“程序员”
,和“黑马”
拼接,拼接之后还会产生一个新的字符串对象”黑马程序员“
,然后将新产生的“黑马程序员”
对象的地址赋值给String name
变量。
此时你会发现,之前创建的字符串对象“黑马”
内容确实是没有改变的。所以说String的对象是不可变的。
- 注意事项2:字符串字面量和new出来字符串的区别
- 只要是以
“...”
方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只存储一份。如下图一所示 - 但通过
new
方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中。如下图二所示
- 只要是以
- 总结一下,字符串的注意事项。
1. String是不可变字符串对象
2. 只要是以“...”方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只存储一份;
3. 但通过new方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中。
string笔试题
四、ArrayList类
1. ArrayList快速入门
学习完String类之后,接下来再学习一个类——叫ArrayList。
ArrayList表示一种集合,它是一个容器,用来装数据的,类似于数组。那有了数组,为什么要有集合呢?
因为数组一旦创建大小不变,比如创建一个长度为3的数组,就只能存储3个元素,想要存储第4个元素就不行。而集合是大小可变的,想要存储几个元素就存储几个元素,在实际工作中用得更多。
然后集合有很多种,而ArrayList只是众多集合中的一种,跟多的集合我们在就业班的课程中再学习。如下图所示:
集合该怎么学呢?1. 首先你要会创建集合对象,2. 然后能够调用集合提供的方法对容器中的数据进行增删改查,3. 最后知道集合的一些特点就可以了。
2. ArrayList常用方法
想要使用ArrayList存储数据,并对数据进行操作:
-
第一步:创建ArrayList容器对象。一般使用空参数构造方法,如下图所示:
-
第二步:调用ArrayList类的常用方法对容器中的数据进行操作。常用方法如下: