八、常用API
全称:Application Programming Interface:应用程序编程接口
也就是别人写好的程序可以直接调用
注意事项:
- 如果当前程序中,要调用自己所在包下的其他程序,可以直接调用。 (同一个包下的类,互相可以直接调用)
- 如果当前程序中,要调用其他包下的程序,则必须在当前程序中导包,才可以访问! 导包格式:import 包名.类名:
- 如果当前程序中,要调用Java提供的程序,也需要先导包才可以使用,但是lava.lang包下的程序是不需要我们导包的,可以直接使用
- 如果当前程序中,要调用多个不同包下的程序,而这些程序名正好一样,此时默认只能导入一个程序,另一个程序必须带包名访问
1. String
java.lang.String 代表字符串,内部封装了字符串数据以及处理字符串的方法
1.1 String创建对象封装字符串数据的方式
方式一:双引号引用的内容
String name = “小鱼”
方式二:调用String类的构造器初始化字符串对象
*注意:方式一和方式二创建方式不同,方式一在栈,指向堆里面同一块内容,方式二在堆里面创建相同的内容,地址是不同的。方式一创建相同的内容==为true,方式二为false
public class StringDemo1 {
public static void main(String[] args) {
// 方式一:使用双引号
String name = "小鱼";
System.out.println(name);
// 方式二:调用gouzaoq
String s1 = new String();
System.out.println(s1);
String s2 = new String("小鱼");
System.out.println(s2);
char[] chars = {'a', 'b', 'c'};
String s3 = new String(chars);
System.out.println(s3);
byte[] bytes = {97, 98, 99};
String s4 = new String(bytes);
System.out.println(s4);
}
}
1.2 String常用方法
注意:
String字符串内容一旦声明,就不能修改,修改String内容是引用传递,指向改变,会产生大量的垃圾空间——相同的字符串内容,内存中存一份
两种创建字符串的方式不同,因为上述原因,new出来的匿名字符串还没有保存在变量池(堆内存中的字符串常量池)中,intern()操作之后是在对象池,于直接赋值的字符串指向相同
问题:其他类是否是同样的机制,如果是的话,不同学生名字相同、成绩相同该如何区分?————应该是不可变类型有的
public class StringDemo2 {
public static void main(String[] args) {
String s = "小鱼0135";
// System.out.println(s[1]); // JAVA字符串不能用索引访问 要用charAT()方法
for (int i = 0; i < s.length(); i++) {
// s.length().fori
char c = s.charAt(i);
System.out.println(c);
}
// 1. 获取字符串长度
System.out.println(s.length());
// 2. 获取字符串某个位置的值
System.out.println(s.charAt(1));
// 3. 将字符串转化为字符数组
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i++) {
System.out.print(ch[i] + " ");
}
// 4. 判断字符串的内容是否一样,一样就返回true
String s1 = "小鱼0135";
System.out.println(s); // 字符串是引用类型,但是内部有机制,直接输出不是地址,而是内容——如何获取字符串的地址???——toString()方法重载
System.out.println(s1);
System.out.println(s == s1); // true
String s2 = new String("黑马");
String s3 = new String("黑马");
System.out.println(s2 == s3); // false
System.out.println(s1.equals(s)); // true
// 5. 忽略大小写比较字符串内容
String s4 = "Ab2";
String s5 = "ab2";
System.out.println(s4.equalsIgnoreCase(s5)); // true
// 6. 截取字符串内容(包前不包后)
String s6 = s1.substring(0, 2);
System.out.println(s6);
// 7. 截取字符串从指定位置到结尾
String s7 = s1.substring(1);
System.out.println(s7);
// 8. 把字符串中的某个内容替换成新内容,并返回新的字符串对象
String s8 = s1.replace("0135", "");
System.out.println(s8);
// 9. 判断字符串中是否包含某个关键字——精准匹配
boolean xiaoyu = s.contains("小鱼");
System.out.println(xiaoyu); // true
// 10. 判断字符串是否以某个字符串开头
System.out.println(s.startsWith("小鱼")); // true
// 11. 分割字符串,将字符串按照某个指定内容分割成多个字符串,放到一个字符串数组中返回
String s9 = "yyy,xxx,ggg";
String[] name = s9.split(",");
for (int i = 0; i < name.length; i++) {
System.out.println(name[i]);
}
// 打印字符串地址
System.out.println(s.getClass().getName() + "@" + System.identityHashCode(s));
}
}
参考学习:
https://blog.51cto.com/u_16213643/7255947
1.3 String注意事项
String对象的内容不可改变,被称为不可变字符串对象——“……”该方式写出的字符串对象,会在堆内存中的字符串常量池中存储,相同内容的字符串只存储一份
new创建的字符串对象,每new一次都会产生一个新的对象放在堆内存中
为什么这么设计——节约内存
计算机内存原理
2. ArryList
集合——一种容器,用来装数据的,类似于数组
为什么用集合, 不用数组——数组一旦定义 ,长度就固定了;集合大小可变,开发中用的更多
集合种类很多——每个集合对应一种需求
ArrayList集合——创建、方法(增删改查)、特点
ArrayList——泛型类,也就是可以通过修改E创建指定类型的容器;若创建对象时不写这个<>,表示可以存储任意类型的对象
特点:长度可变,增删元素长度就会改变——对迭代变量进行控制 / 倒序遍历
2.1 创建
ArrayList中的数据类型(尖括号中)必须是引用数据类型,因此若要存入int、char等基本数据类型时,则要使用他们的包装类
基本类型 | byte | short | int | long | float | double | char | boolean |
---|---|---|---|---|---|---|---|---|
包装类 | Byte | Short | Integer | Long | Float | Double | Character | Boolean |
2.1 常用方法
public class ArrayListDemo1 {
public static void main(String[] args) {
// 1. 创建一个ArrayList的集合对象
ArrayList list = new ArrayList();
// 什么都想存Objiect
// ArrayList<Object> list = new ArrayList();
list.add("黑马");
list.add(666);
list.add('a');
System.out.println(list);
// 2. 约束集合存储的范围
ArrayList<String> list1 = new ArrayList<String>(10);
System.out.println(list1);
ArrayList<String> list2 = new ArrayList<>(); // JDK1.7后支持
list1.add("2");
list1.add("xx");
// System.out.println(list1[0]); // 0没有这种中操作
// 3. 在集合中的某个索引位置添加一个数据——这个位置处要有值
// list1.add(3, "aaa"); // 报错,意思就是超过范围了
System.out.println(list1);
// 4. 根据索引获取集合中某个索引位置处的值
System.out.println(list1.get(0));
System.out.println(list1.size());
// 5. 删除元素
// 5.1 根据索引删除某个元素,并返回被删除的元素
System.out.println(list1.remove(1));
// 5.2 根据元素删除
System.out.println(list1.remove("2"));
// 尖括号中必须是引用数据类型,若要存入int、char等基本数据类型,要使用包装类
ArrayList<Integer> list3 = new ArrayList<>();
list3.add(1);
list3.add(2);
list3.add(3);
System.out.println(list3.get(0));
System.out.println(list3.remove(0));
// list3.remove(2); // 想要删除的是特定对象,是引用数据类型,跟元素的具体内容无关,而是需要地址一致
}
}
注:基本数据类型及其对应的包装类
基本数据类型是数据,包装类可以有方法,牺牲性能和空间来换取功能多。——集合和泛型都不支持基本数据类型,只能支持引用数据类型