1.final关键字(不可二次赋值)
一.单例:
package Test; public class Test { public static void main(String[] args) { System.out.println(Student.getStudent()); System.out.println(Student.getStudent()); } } class Student{ private static Student t; private Student() { //构造器私有化 } public static Student getStudent() { if (t == null) { t = new Student(); } return t; } }
运行结果:
Test.Student@3b07d329
Test.Student@3b07d329
parse:解析,剖析
二.抽象类abstract
1.抽象类和抽象方法
(有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法。)
规则:
抽象类和必须使用abstract修饰,抽象方法也是,抽象方法不能有方法体。
抽象类不能被实例化,无法使用new关键字来调用抽象类的抽象类的构造器创建抽象类的实例
......
2.抽象类的应用
抽象类在实际项目中有许多应用场景,例如:
定义通用的模板类,让子类实现特定的行为。
将公共的方法和属性提取到抽象类中,避免重复编写代码。
强制子类实现特定的方法,确保代码的一致性和可靠性。
三.接口interface
接口是一种规范。
接口里面不能包含构造器和初始化块定义。
接口里的成员变量只能是静态常量,接口里的方法只能是抽象方法,类方法,默认方法或私有方法。
四.Java集合
1.Collection
Collection接口是List,Set,Queue接口的父接口(单列集合)
List:
- 有序集合(存取顺序)
- 元素可以重复
- 有索引
set:
- 无序集合元素
- 不可重复(集合)
- 无索引
HashSet类:利用Hash算法来储存集合中的元素。
特点:
- 无序,
- 不是同步的,如果多线程同时访问一个HashSet,必须使用代码来满足其同步性。
- 集合元素可以时null
判断两个元素相等时,是两个对象通过equals()方法比较相等,并且HashCode()方法返回只也相等
遍历方式:(因为set集合无索引,所以使用更加通用的遍历方式)
不要在遍历中更改集合中的值
迭代器遍历(集合专用遍历方式):
Iterator:
Collection <String> coll = new ArrayList<>();
coll.add("111");
coll.add("222");
coll.add("333");
coll.add("444");
//2.迭代器获取对象
Iterator<String> iterator = coll.iterator();
while(iterator.hasNext()){
String t = iterator.next();
System.out.println(t);
}
}
增强for遍历
for (String s : coll) {
System.out.println(s);
}
这其中的s是个第三方变量
lambda表达式
coll.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
coll.forEach(s -> System.out.println(s));
2.Map集合(双例集合)
public static void main(String[] args) {
Map<String, String> map =new HashMap<>();
map.put("aaa","AAA");
map.put("bbb","BBB");
map.put("ccc","CCC");
map.put("ddd","DDD");
map.put("eee","EEE");
Set<String> keys = map.keySet();
for (String s : keys) {
String value = map.get(s);
System.out.println(s + "= " + value);
}
}
遍历map,key是一个set集合,通过key查找value