java知识精要(二)
集合
Iterable v.s. Iterator
两者都是接口,在Collection继承的是Iterable。
Iterable表达了集合具备迭代访问的能力,而Iterator表示实现,可以从小到大也可以从大到小。
https://zhuanlan.zhihu.com/p/52366312
另外,我们在遍历集合时,尽量用iterator这种方式,可以在遍历中,修改集合,参考
使用Iterator需注意两点:a. 获取到Iterator变量后,仅能遍历一遍; b. itr.next()后,仅能删itr.remove()一次。Comparable v.s. Comparator
https://www.cnblogs.com/skywang12345/p/3324788.html
new 父类构造器(实参列表) or 实现接口() {
...
}
new Comparator<E>(){
public int compare(E o1, E o2){
}
}
- 集合
集合需多用用
优先队列用法
Queue用法:实例化用的是LinkedList
List的sort实现及使用,Comparator实现为内部静态类
泛型
应该将List<E>看做一个具体类型,不真实存在的逻辑类型
List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass() );
结果?
因此,类的static成员是不可以使用类型参数的。
public class R<T>{
static T info; //错误
static void test(T msg); // 错误
}
二维泛型只能一层层具体化
List<List<Integer>> list = new ArrayList<List<Integert>>();
?, ? extends type, ? super type
a. 通配符与继承关系
List<Object>与 List<String>之间无继承关系。
void test(List<Object> l)传入List<String>将编译报错通配符、通配符上下限都可以理解为对继承关系的补充。
void test(List<?> l)函数可以接收List<Integer>, List<String>等
void test(List<? extends Numbers> l)函数可以接收List<Integer>, List<Double>等。b. 理解下列代码,其中Rect为Shape子类
void addRect(List<? extends Shape> shapes){
shapes.add(0, new Rect());
}
异常
异常设计目的是让业务逻辑与异常处理逻辑分离。
java程序运行过程中出现异常时,系统自动生成一个异常对象,该对象被提交给java运行时;
Java运行时收到异常对象后,寻找合适的catch块,如果未找到,Java程序退出。
- try...catch...finally
finally代码块一定会被执行,除非try or catch中调用了System.exit
try or catch中的return, throw将在finally代码块之后执行
int funcA() {
int len = 0;
try {
Class clazz = Class.getName("com.holidays");
return len;
} catch (Exception ex) {
ex.printStackTrace();
return len;
} finnally {
len = 10; // 注意try or catch中已经调用return,返回值已经准备好,此处再对len赋值没有意义。但是如果此处是return 10,那么还是会返回10
}
}
void funcB() {
System.out.println(funcA()); // 打印出0
}
异常体系
Throwable
-> Error
-> Exception
-> RuntimeException
-> others... :checked异常必须显示处理
如果接口中定义的方法抛出了异常,子类override时,可以抛出该异常或其子异常 或者不抛出;如果override的父类方法没有抛出异常,子类不可以抛出try with resource
try (
// open resource,此处定义的局部变量在try块中可见
// 此处resource需要是AutoClosable
) {
// 业务逻辑
} catch () {
}
java知识精要(二)的更多相关文章
- java知识精要(一)
一.java数组 (疯狂java讲义 第4.5 ~ 4.6章节) 1) 声明形式: type[] arrayName; 推荐方式 type arrayName[]; 2) 初始化: 方式一: type ...
- Java提高篇(三二)-----List总结
前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识 ...
- Java知多少(112)数据库之删除记录
删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...
- Java知多少(111)数据库之修改记录
修改数据表记录也有3种方案. 一.使用Statement对象 实现修改数据表记录的SQL语句的语法是: update表名 set 字段名1 = 字段值1,字段名2 = 字段值2,……where特 ...
- Java知多少(110)数据库之插入记录
插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...
- Java进阶(五十二)利用LOG4J生成服务日志
Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...
- Java知多少(14)数组
如果希望保存一组有相同类型的数据,可以使用数组. 数组的定义和内存分配 Java 中定义数组的语法有两种: type arrayName[]; type[] arrayName; type 为Java ...
- Java知多少(34)final关键字:阻止继承和多态
在 Java 中,声明类.变量和方法时,可使用关键字 final 来修饰.final 所修饰的数据具有“终态”的特征,表示“最终的”意思.具体规定如下: final 修饰的类不能被继承. final ...
- Java知多少(84)图形界面之布局设计
在界面设计中,一个容器要放置许多组件,为了美观,为组件安排在容器中的位置,这就是布局设计.java.awt中定义了多种布局类,每种布局类对应一种布局的策略.常用的有以下布局类: FlowLayout, ...
随机推荐
- 【JZOJ6214】【20190614】tetris
题目 这是一道和俄罗斯方块有关的有趣题目 底面宽度为\(N\),高度无限,初始时方块高度为\(A_i\) 你可以决定每次会下落一个\(1 \times K\)或者\(K \times 1\)的方块 你 ...
- 【CF241E】Flights
[CF241E]Flights 题面 洛谷 题解 对于原来的图,如果一条边不出现在\(1\)到\(n\)的路径上面,直接\(ban\)掉即可. 那么考虑一条边\(u\rightarrow v\),一定 ...
- Quartus RTL Simulation
今天在做某个module的RTL Simulation时,发现之前的do文件有问题,导致信号没有导入.将sim中的XXX_tb设置成了XXX所致.改正后无误. 可参考: https://www.cnb ...
- 安装supervisor 失败 :/usr/bin/python: bad interpreter: No such file
以前在安装python 双版本时将python改为了python2所以找不到python,打开那个echo_supervised_conf然后把 #!/usr/bin/python 改为如图就可以了
- Excel中筛选两个表中相同的数据和快速填充一列的公式
将两个工作表放在一个文件中,使用if函数和countif函数判断 =if(判断条件countif(区域,条件),真值,[假值]) 实例 =if(countif(Sheet2!$A$1:$A$44,A2 ...
- 关于js函数解释(包括内嵌,对象等)
常用写法: function add(a,b) { return a + b; } alert(add(1,2)); // 结果 3 当我们这么定义函数的时候,函数内容会被编译(但不会立即执行,除非我 ...
- Automated Generation of VNF Deployment Rules Using Infrastructure Affinity Characterization
标题:Automated Generation of VNF Deployment Rules Using Infrastructure Affinity Characterization 使用基础结 ...
- UnityVR案例 - VR僵尸大战(HTC VIVE)
使用HTCvive设备开发的一款射击类游戏(Unity5.6.3),玩家在游戏中使用手枪.手榴弹或者技能杀死僵尸. 亮点功能:手势识别,语音唤醒(关键词识别) 手势识别:玩家使用手柄在游戏中绘制事先录 ...
- 解析prototxt文件的python库 prototxt-parser(使用parsy自定义文件格式解析)
解析prototxt文件的python库 prototxt-parser https://github.com/yogin16/prototxt_parser https://test.pypi.or ...
- linux下如何使用adb连接在qemu中运行的安卓系统?
1. 运行安卓系统, 如下: $sudo qemu-system-x86_64 -m 4096 -boot d -enable-kvm -smp 3 -net nic -net user,hostfw ...