(一)泛型
定义泛型:能够使多种数据类型实现功能,避免转换
泛型分类:
1.泛型类
2.泛型方法
泛型数组
具体应用:
1.定义一个泛型类和泛型方法:
class GenericTest{
int age;
T a1;
T a2;
//泛型方法
public void test(T a1,T a2){
this.a1 = a1;
this.a2 = a2;
System.out.println(a1.equals(a2));
}
}
(二)Set集合
特点:
1.集合里面对象不能重复 如果重复添加不进去内部使用HashMap来实现 键值对 键key不能重复 如何实现?每添加一个对象计算这个对象的hash值(整数)如果对象相同hash值也相同
2.集合是无序的 添加的顺序和存储的顺序无关 使用了默认排序
HashSet names = new HashSet<>();
names.add("jack" );
//names.add("jack" ); --->就不会被添加进去
names.add("merry" );
names.add("abc" );
System.out.println(names);
效果图.png
可见重复的元素并未添加进去,并且会根据默认的排序方式进行排序
(三)可以排序的集合 Treeset
方法:treeset
方式一:采用匿名类
TreeSet score = new TreeSet<>(new Comparator() {
@Override
public int compare(Person person, Person t1) {
return person.compareTo(t1);
}
});
方式二:采用Lambda表达式
TreeSet score = new TreeSet<>((Person p1,Person p2)->p1.compareTo(p2));
Person p1 = new Person("jack",20);
Person p2 = new Person("jack",30);
Person p3 = new Person("rose",20);
score.add(p1);
score.add(p2);
score.add(p3);
System.out.println(score);
(四)HashMap
存储数据的特点:键key-值value对
key不能重复 可以是任意对象类型 通常使用字符串String
1.添加对象:
HashMap score =new HashMap<>();
score.put("Chinese",89);
score.put("Math",94);
score.put("English",92);
如果键相同,代表更改对应的值
score.put("Chinese",91);
System.out.println(score);
key:Chinese的值改变了
效果图.png
2.获取键值对的个数
score.size();
3.获取所有的key
System.out.println(score.keySet());
4.获取所有的值(value)
System.out.println(score.values());
5.获取Entry键值对
System.out.println(score.entrySet());
6.获取一个键对应的值
System.out.println(score.get("English"));
7.键值对的遍历
方式一:通过遍历key来得到每一个key对应的值
for(String key:score.keySet()){
//通过key得到值
int s =score.get(key);
System.out.println("key"+key+"value"+s);
}
获取到每一个键值对
效果图.png
方式二:通过Entryset 得到Entry对象的集合
一个Entry管理一个键值对 getKey getValue
Set> entrys =score.entrySet();
for (Map.Entry entry:entrys){
//的到Entry对应的key
String key =(String) entry.getKey();
//获取entry对应的值
Integer value = (Integer) entry.getValue();
}
(五)异常处理
作用:处理运行过程中出现的不可控的错误 使程序更健壮
异常处理方式一:try------catch----finally
try{
执行代码 可能会出现异常
一旦出现异常 系统自动为我们创建一个异常类 并抛出
}catch (ArithmeticException e){
如果需要自己处理异常就catch
} catch (FileNotFoundException e) {
如果有多个异常可以使用多个catch来捕获
如果有多个异常 catch的顺序是从小到大
}finally{
不管有没有异常finally都会被执行
资源回收 比如:网络链接 数据库链接 I\O流
}
需要注意的是:如果异常出现后面的代码将不执行所以try代码块不要抓太多代码
异常处理方式二:使用throws抛出异常
class TException {
public static void test() throws FileNotFoundException{
FileReader fr = new FileReader("");
}
}
异常处理方式三:当特殊情况出现 自己可以选择使用throw抛出异常
public static void test3()throws PXDException{
throw new PXDException("自己的异常类:无所作为");
}
效果图.png
异常处理方式四:自定义异常
1.需要创建一个继承Exception的类
2.提供一个无参构造方法
3.提供一个有参构造方法 参数是一个字符串
class PXDException extends Exception{
//提供一个无参构造方法
public PXDException(){}
//提供一个有参构造方法 参数是一个字符串
public PXDException(String desc){
super(desc);
}
}
(六)今日小结:
每天所学很零碎,但是通过这样系统的整理之后,就感觉有了许多头绪,也舒服多了。可是在具体运用上肯定还不行,缺乏练习,再过一段实际完完全全进入实战,心里还是很担心的,感觉记不住啊,真的太多东西了,不过还是要坚持下去,总会出效果的。