一,什么是api
1.全称应用程序编程接口,就是java自己写好的程序,给程序员调用的,方便完成一些功能
2.API文档:程序使用说明书
二,String
1.是什么?
String是字符串类型,它定义的变量可以指向一个字符串对象
2.String是不可变字符串
3.String创建对象的方式
(1)直接用双引号围起来String name="黑马";
(2)new构造器得到的字符串对象
public String() //创建一个空白字符串对象,不含有任何内容
public String(String origins)//根据传入的字符串内容,来创建字符串对象
public String(char[] chs)//根据字符数组的内容,来创建字符串对象
public String(byte[] chs)//根据字节数组的内容,来创建字符串对象
(3)两种方式的区别*
双引号给出的字符串对象,存在于对内存中的常量池中,相同的内容只会存储一份
new字符串每new一次都会在堆内存中产生一个字符串对象
public class Test{
public static void main (String[] args){
String s1="abc";
String s2="abc";
System.out.println(s1==s2);//true
}
}
public class Test{
public static void main(String[] args){
char[] chs={'a','b','c');
String s1=new String(chs);
String s2=new String(chs);
System.out.println(s1==s2);//false
}
}
public class Test2{
public static void main(String[] args){
String s1=new String("abc");
String s2="abc";
System.out.println(s1==s2);//false
/**
第一行代码实际上创建了两个对象,一个“abc”在堆内存中的常量池中,另一个new出一个对象在堆内存中;第二行代码实际上创建了0个对象,因为“abc”常量池中已有(不会重复,节约内存)
*/
}
}
public class Test3{
public static void main(String[] args){
String s1="abc";
String s2="ab";
String s3=s2+"c";
System.out.println(s1==s3);//false
/**
s2在常量池中,在计算s3时会用常量池中的"ab"与"c"在堆内存中进行运算,计算结果放在堆内存中(s3不是直接由""引用起来的,不会在常量池中)
*/
}
}
public class Test4{
public static void main(String[] args){
String s1="abc";
String s2='a'+'b'+'c';
System.out.println(s1==s2);//true
/**
Java存在编译优化机制,程序在编译时:"a"+"b"+"c"会直接转成"abc"
*/
}
}
4.String的常用方法(常用API)
判断字符串内容
(1)背景:==判断字符串是判断地址的,这样会引起很多业务问题。
(2)必要性:判断字符串开发中更多时候希望判断内容一样就返回true,不在乎地址是不是一样,此时需要用equals方法。
//方法名 说明
public boolean equals(Object anObject)//将此字符串与指定对象进行比较,只关心字符内容是否一致!
public boolean equalseIgnoreCass(String anObjectString)//将此字符串与指定对象进行比较,忽略大小写比较字符串,只关心字符串内容是否一致!
(3)结论:之后只要是字符串进行内容比较,那必须使用字符串的equals方法
(4)结论2:什么时候用==比较?基本数据类型的比较,那就用==(基本数据类型里面就存的数据,引用数据类型不行,字符串记录的是地址)
其他常用方法
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++) {
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);
System.out.println(s1.equals(s2));
//5.忽略大小写比较字符串内容
String c1="34AeFG";
String c2="34aEfg";
System.out.println(c1.equals(c2));
System.out.println(c1.equalsIgnoreCase(c2));
//6.截取字符串内容(包前不包后)
String s3="Java是最好的编程语言之一";
String r3=s3.substring(0,8);
System.out.println(r3);
//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("张三二"));
//11,把字符串按照某个指定内容分割成多个字符串,做到一个字符串,放到一个字符串数组中返回给我们
String rs5="张无忌,周芷若,段素芳,赵敏";
String[] names=rs5.split(",");
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
}
}
三,ArrayList
1.集合:代表的是一种容器,存储数据,类似于数组
2.集合的特点:大小可变,类型可以不固定,功能更加强大,适合做元素个数不能确定,同时存在的业务场景
3.ArrayList是什么?是一种集合
元素可以重复的,元素存在索引
4.如何构建ArrayList的对象代表一个集合容器,存储数据
public ArrayList();
ArrayList list=new ArrayList();
5.泛型:集合都是支持泛型的
(1)ArrayList<E>
(2)约束集合在编译阶段只能操作某种数据类型
ArrayList<String> list=new ArrayList();
ArrayList<Student> list=new ArrayList();
ArrayList<Movie> list=new ArrayList();
ArrayList<Integer> list=new ArrayList();//不能填int
/**
注意:1.集合和泛型都不支持基本数据类型,只能支持引用数据类型 2.以后定义集合都应该采用泛型
*/
//问题:我们的集合就是要什么都存
ArrayList list=new ArrayList();
ArrayList<Object> list=new ArrayList();//推荐这样写(什么类型都可)
(java一共有8种基本数据类型,分别为:byte、short、int、long、float、double、char、boolea。其对应的对象(包装类型)分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean)
6.ArrayList的常用方法
//方法名 说明
public boolean add(E e)//将指定的元素追加到此集合的末尾
public void add(index,E element)//在此集合中的指定位置插入指定元素
public E get(int index)//返回索引处的元素
public int size()//返回集合中的元素个数
public E remove(int index)//删除指定索引处的元素,返回被删除的元素
public boolean remove(Object O)//删除指定位置的元素,返回删除是否成功
public E set(int index,E element)//修改指定索引处的元素,返回并修改的元素
7.ArrayList遍历并删除元素
从前往后边遍历边删除存在问题:可能会存在漏掉元素,删除元素后,马上后退一步i--就可以了,从后往前遍历,边遍历边删除没毛病
8.ArrayList存储自定义类型的对象
ArrayList<Student> list=new ArrayList();
ArrayList<Movie> list=new ArrayList();
//注意:集合容器中存储的是每个对象的在堆内存中的地址!