由上我们可以看出,String类具有不可变性,其字符串发生改变后会创建新的位置来存储;而StringBuild和StringBuffer是在原有对象上进行修改,其位置不变.
异常处理还是没有太会
Calendar类是一个抽象类,需要通过调用getInstance()静态方法获取一个Calendar对象
Calendar c=Canlendar.getInstance();
int year=c.(Calendar.YEAR);
使用getTime()方法获取Date对象,还可以通过getmelnMIllis()方法获取毫秒
Date date =c.getTime();
Collection接口时List、Set和Queue的父接口
常用方法为:add,remove
List接口,有序可重复,被称为序列,可以精确控制每个元素的插入位置,或删除某个位置元素
ArrayList是List接口的实现类,底层由数组实现,被称为数组序列
有填充色的三个集合使用频率高
字符串的String substring( int index)方法,是截取从index开始到最后的字符,返回一个新字符串。
获取字符串的长度是length()方法而不是length属性
用try-catch和try-catch-finally来处理异常
若有多个异常,可分别用不同的catch捕获处理
处理多个异常注意异常捕获的顺序,小的在前,大的在后
阻止程序正常运行,称为异常
Exception和Error的共同父类是Throwable
检查异常包括:IO异常,SQL异常
PS:字节是计算机存储信息的基本单位,1 个字节等于 8 位, gbk 编码中 1 个汉字字符存储需要 2 个字节,1 个英文字符存储需要 1 个字节。所以我们看到上面的程序运行结果中,每个汉字对应两个字节值,如“学”对应 “-47 -89” ,而英文字母 “J” 对应 “74” 。同时,我们还发现汉字对应的字节值为负数,原因在于每个字节是 8 位,最大值不能超过 127,而汉字转换为字节后超过 127,如果超过就会溢出,以负数的形式显示。
“==” 和 equals() 有什么区别呢?
==: 判断两个字符串在内存中首地址是否相同,即判断是否是同一个字符串对象
equals(): 比较存储在两个字符串对象中的内容是否一致
Java 中字符串的不变性
String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。如下所示:
运行结果:
字符串的内存空间示意图:
1、 通过 String s1="爱慕课"; 声明了一个字符串对象, s1 存放了到字符串对象的引用,在内存中的存放引用关系如下图所示:
然后通过 s1="欢迎来到:"+s1; 改变了字符串 s1 ,其实质是创建了新的字符串对象,变量 s1 指向了新创建的字符串对象,如下图所示:
2、 一旦一个字符串在内存中创建,则这个字符串将不可改变。如果需要一个可以改变的字符串,我们可以使用StringBuffer或者StringBuilder(后面章节中会讲到)。
3、 每次 new 一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用 ”==” 比较时也为 ”false” ,如果只需比较内容是否相同,应使用 ”equals()” 方法(前面条件运算符章节讲过哦~~)
搜索
复制
11
要使用collections的sort方法,元素要实现Comparable接口
Comparable接口
Comparator接口
练习要求
set的contains方法,看hashcode和equals,所以对象最好重写hashcode和equals方法
Contains方法,使用equals方法判断,所以要重写对象的equals方法,来定义是否相等
泛型集合中,不能添加泛型规定的类型及其子类型以外的对象,否则会报错
泛型不能为基本类型
1
public class HelloWorld {
public static void main(String[] args) {
double m = 78.5;
//将基本类型转换为字符串
String str1 = Double.toString(m) ;
System.out.println("m 转换为String型后与整数20的求和结果为: "+(str1+20));
String str = "180.20";
// 将字符串转换为基本类型
Double a = Double.valueOf(str) ;
System.out.println("str 转换为double型后与整数20的求和结果为: "+(a+20));
}
}
超出ArrayList范围会报异常
package com.imooc.collection;
import java.util List;
public class ListTest {
//用于存放备选课程List
public List coursesToSelect;
public ListTest() {
this.courseToSelect = new ArrayList();
}
//用于往coureToSelect中添加备选课程
public void testAdd() {
//创建一个课程对象,并通过调用add方法,添加到备选课程List中
Course cr1 = new Course("1" , "数据结构");
courseToSelecr.add(cr1);
Course temp =(Course) courseToSelect.get(0);
System.out.println("添加了课程" + temp.id + ":" + temp.name);
}
public static void main (String[] args) {
ListTest It = new ListTest();
It.testAdd();
}
}
Course cr2 new Course("2","C语言");
courseToSelect.add(0,cr2);
Course temp2=(Course) courseToSelect.get(0);
System.out.println("添加了课程" + temp2.id + ":" + temp2.name);
}
Course cr3 = new Course("3","test");
courseToSelsct.add(4,cr3);
}
Integer包装类的常用方法
keySet()返回的是一个key的集合;<br><br><br><br>
EntrySet()返回值是所有键值对的一个集合;<br><br><br><br>
<br><br><br>
Entry类是Map的一个内部类,其泛型是和当前使用的Map是相同的;
Set<Entry<xxx,xxx>> set name = mapName.entrySet();//将返回内容放入带有泛型为Entry<xxx,xxx>的set中
<br><br><br>
entrySet的返回类型为Entry类的类型,返回值可以用set<Entry>来接收,<br><br><br>
如果map定义了泛型,则也要在上述接收的set中的Entry中说明:如写成:set<Entry<xxx,xxx>><br><br><br>
<br><br><br><br>
Set、List的添加 、修改、删除方法类似<br><br><br><br>
添加——add/addAll<br><br><br><br>
修改——set<br><br><br><br>
删除——remove/removeAll<br><br><br><br>
<br><br><br><br>
Map<br><br><br><br>
添加:使用的是put——put(key, value)<br><br>
修改:同样使用的也是put方法——是对指定key的value进行修改,put(key, newValue);<br><br>
获取Map中的对象,使用的是get方法——get(key),返回值是key对应的value;value是什么类型的就用什么类型接收;<br>
删除:使用的是remove方法——通过的是删除key的方式删除整个对象;如:MapName.remove(key1);