head first java原文_Head First Java
条件语句
&和|可以用作条件语句,但是是长连接,左右两边的表达式必须都执行完!这和&&和||不同,&&和||是短连接,只要左边的表达式已经能够计算出整个表达式的结果,右边的表达式就不会执行!
继承、重载、多态
重载和多态不是一个概念:
重载:类内的、横向的关系;两个方法名称相同,但参数不同,返回类型可以不同(但不能只改变返回类型),存取权限可以不同(因为重载的两个方法之间没有更多的关系,与继承和多态无关)。
多态:类间(父类和子类)的、纵向的关系;继承自父类的方法并覆盖重写,方法名称相同,参数相同,返回类型相同或为该返回类型的子类(且子类保证能执行父类的一切行为),存取权限相同或更为开放。
关于返回类型和存取权限的不相同情况,可以从子类的声明不能影响父类中声明的使用方式这一角度来看,因为多态的目的就是使用父类作为引用而不关心子类的实现,,所以子类的声明不能使得父类中的声明所体现的使用方式无法使用。因而,返回类型子类不能超出父类的声明,而存取权限子类不能限制父类的声明。
调用method:
编译器根据引用类型来判断哪些method可以调用,而不是对象真正的类型。但是在调用哪个版本时,是根据对象的真正类型寻找最近的版本。
为什么会允许创建Object对象?
因为有时候就是需要创建一个通用的对象,一个轻量化的对象,最常见的是在线程的同步化中。
super、this
每个构造函数可以选择调用super()或this(),但不能同时调用,且它们必须是构造函数的第一条语句(父类构造函数是子类构造函数执行的第一步,父类必须先于子类构造)。
输出格式化
普通格式化
格式化说明:
格式化例子:%1$,06.1f
1$:使用第1个参数(计数是1基的,即格式化字符串后面的第一个参数)作为浮点数进行格式化;
使用“,”分隔整数部分;
06:整数部分最少6个字符,不足部分用0补齐;
.1:小数点之后保留一位小数;
f:浮点数;
日期格式化(String.format(...))
格式化中“<”表示重复利用之前用过的参数
日期类
java.util.Calendar:set(...)中的月份是零基的,所以0表示一月份,并且set是有延迟的。
异常
try/catch是用来处理真正的异常,是程序员无法预测或防止的执行期失败状况,而不是程序的逻辑错误,而runtimeexception大部分都是程序的逻辑问题,属于非检查异常(unchecked,编译器不检查)。
输入输出
串流(InputStream/OutputStream)
设计原则:
面向对象设计:每个类只要做好一件事情就行了。
所以java的输入/输出API带有连接类型的串流,代表来源与目的地之间的链接,连接串流将串流与其他串流连接起来。
一般来说,串流要两两连接才有意义——其中一个表示连接(输入的来源或输出的目的地),另一个表示要被调用方法(高层API,读取出真正的高层次数据类型或输出真正的高层次数据)。
比如FileOutputStream用于想文件写入字节,但我们通常并不直接写字节,而是以对象层次的观点来写入,所以需要高层次的连接串流处理高层次的对象数据到字节流的连接。
于是这样就可以通过不同的组合来达到最大的适应性,而不必在一种串流类中考虑所有可能的情况(这是不可能的)。
序列化
标记接口:
Serializable接口又被成为marker或tag类的标记用接口,所有需要被序列化的类都需要声明实现该接口,而实际上没有任何方法需要被实现,只是用来标记,告诉JVM这个类可以被序列化。
而一个类被序列化时,其内部所有的成员变量也将被序列化,因此它的成员变量也必须是能被序列化的,即实现了Serializable接口。
过滤:
如果某个成员变量不需要序列化,则使用关键字transient标记一下,序列化将跳过这个变量。
指向不变性:
序列化会区分两个变量指向的对象是否相同,如果序列化时两个变量指向同一个对象,则反序列化时这两个变量依然指向同一个对象。
父类与子类:
不可序列化的父类(非final)可以有可序列化子类,但是当对象被反序列化时,父类的构造函数将和创建新的对象一样执行(可序列化类的构造函数不会被执行),属于该不可序列化父类及其祖先类的成员变量将被构造函数初始化,但是被可序列化子类重载的成员变量将按照子类中的定义(是否transient)进行序列化和反序列化。
static:
静态变量不会被序列化,反序列化后静态变量会维持类中原本的样子,而非存储时的值。
序列化版本serialVersionUID:
在类中显式地保存这个ID,则可以保证可序列化的类在演化后依然保持相同的ID,从而在经历了不损坏序列化的演化后该类依然能够反序列化之前序列化的数据(新加的变量将使用默认值)。
泛型
在方法参数中使用万用字符?时,编译器会阻止任何可能破坏引用参数所指集合的行为,即只读不可写:
class ChildClass extends SuperClass {
...
}
public void f(List extends SuperClass> list) {
list.get(0); // ok
list.add(new ChildClass()); // wrong
}
这样倒是可以:
public void f(List list) {
list.get(0); // ok
list.add((T) new ChildClass());
}
head first java原文_Head First Java相关推荐
- head first java勘误_Head First Java勘误
部分来自:http://blog.sina.com.cn/s/blog_563880ad0100097j.html 这是一本很好的书,不过错误很多,文字错误尚可接受,答案错误所害匪浅.以下勘误部分来自 ...
- java包(翻译自Java Tutorials)
原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/12/17/2821935.html 英文出自 http://docs.oracle.com/ja ...
- java fork_浅谈Java的Fork/Join并发框架
前几天有写到整合并发结果的文章,于是联想到了Fork/Join.因为在我看来整合并发结果其实就是Fork/Join中的Join步骤.所以今天我就把自己对Fork/Join一些浅显的理解记录下来. 1. ...
- (020)java后台开发之JAVA集合中的List接口
转载:http://blog.csdn.net/self_realian/article/details/51881977 原文写的很好.请看原文. JAVA中的集合类: JAVA中的集合类,是一种工 ...
- java add offer_图解Java中的5大队列!(干货收藏)
Java 中的队列有很多,例如:ArrayBlockingQueue.LinkedBlockingQueue.PriorityQueue.DelayQueue.SynchronousQueue等,那它 ...
- Java VS .NET:Java与.NET的特点对比
一.前言 为什么要写Java跟.NET对比? .NET出生之后就带着Java的影子.从模仿到创新,.NET平台也越来越成熟.他们不同的支持者也经常因为孰弱孰强的问题争论不休.但是本文并不是为了一分高下 ...
- 区分 JVM 内存结构、 Java 内存模型 以及 Java 对象模型 三个概念
本文由 简悦 SimpRead 转码, 原文地址 https://www.toutiao.com/i6732361325244056072/ 作者:Hollis 来源:公众号Hollis Java 作 ...
- Java报告比较日期,java 比较两个日期大小(1)
记录方便下次查看 import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; publ ...
- javascript rsa java,用javascript与java执行
RSA加密与解密
用javascript与java执行 RSA加密与解密 2009-12-12 14:58:30 出处:https://www.yqdown.com 这几天一直做安全登录,网上查了好多资料,不尽如意 ...
最新文章
- 阐述Spring security实现用户认证授权的原理----基于session实现认证的方式
- CompletableFuture java 8新增加异步处理
- 【Flink】flink sql的并行度怎么单独设置
- 实用分层模板,分分钟了解UI界面设计基本原则!
- DongLiORM 介绍
- Linux基础—5.Shell基础编程【有图有真相】
- Shell脚本查询进程存活信息
- AV_PIX_FMT_YUV420P12LE’在此作用域中尚未声明
- sql sever如何进行英文词频统计_英语语料库及词频表介绍
- 反洗钱不力,银行遭遇央行15亿天价罚单
- html表格的行合并代码,HTML代码制作的表格合并单元格教程
- python~运算符_python运算符
- 洛谷P1378 油滴扩展
- c语言编程运动会分数统计系统,东华大学数据结构设计C语言运动会分数统计系统...
- (十)打包和项目部署
- 创建制作SDK的静态库工程
- 笔记本html到电视,笔记本怎么连接液晶电视 笔记本连接液晶电视方法【详解】...
- 07SpringCloud-Elasticsearch
- Vue3分页器(Pagination)
- 利用jad破解.class文件
热门文章
- 前端学习(3195):虚拟dom的创建方式1的js
- [html] 能否做到禁止打印页面?如果可以那要怎么做?
- [vue] 说说组件的命名规范
- 工作281:时间戳转换问题
- 前端学习(2783):封装myrequest并绑定到全局
- 前端学习(2530):使用computed获取数据
- 前端学习(2460):粉丝管理
- 第八十六期:“程序员锁死服务器导致公司倒闭”案正式开庭审理
- 第二十八期:Notepad++ 新 Logo 出炉,官网全新改版采用自适应设计
- NB-IOT/Lora/Zigbee/WIFI/蓝牙无线组网方式的对比