head first java原文_Head First Java

条件语句

&和|可以用作条件语句,但是是长连接,左右两边的表达式必须都执行完!这和&&和||不同,&&和||是短连接,只要左边的表达式已经能够计算出整个表达式的结果,右边的表达式就不会执行!

继承、重载、多态

重载和多态不是一个概念:

重载:类内的、横向的关系;两个方法名称相同,但参数不同,返回类型可以不同(但不能只改变返回类型),存取权限可以不同(因为重载的两个方法之间没有更多的关系,与继承和多态无关)。

多态:类间(父类和子类)的、纵向的关系;继承自父类的方法并覆盖重写,方法名称相同,参数相同,返回类型相同或为该返回类型的子类(且子类保证能执行父类的一切行为),存取权限相同或更为开放。

关于返回类型和存取权限的不相同情况,可以从子类的声明不能影响父类中声明的使用方式这一角度来看,因为多态的目的就是使用父类作为引用而不关心子类的实现,,所以子类的声明不能使得父类中的声明所体现的使用方式无法使用。因而,返回类型子类不能超出父类的声明,而存取权限子类不能限制父类的声明。

调用method:

编译器根据引用类型来判断哪些method可以调用,而不是对象真正的类型。但是在调用哪个版本时,是根据对象的真正类型寻找最近的版本。

为什么会允许创建Object对象?

因为有时候就是需要创建一个通用的对象,一个轻量化的对象,最常见的是在线程的同步化中。

super、this

每个构造函数可以选择调用super()或this(),但不能同时调用,且它们必须是构造函数的第一条语句(父类构造函数是子类构造函数执行的第一步,父类必须先于子类构造)。

输出格式化

普通格式化

格式化说明:

fe91d9420cb52fb7b3ba2abc47a04037.png

格式化例子:%1$,06.1f

1$:使用第1个参数(计数是1基的,即格式化字符串后面的第一个参数)作为浮点数进行格式化;

使用“,”分隔整数部分;

06:整数部分最少6个字符,不足部分用0补齐;

.1:小数点之后保留一位小数;

f:浮点数;

日期格式化(String.format(...))

072cc03a2c7af39d2d24637d822b166b.png

格式化中“<”表示重复利用之前用过的参数

日期类

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());

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#操作XML

已知有一个XML文件&#xff08;bookstore.xml&#xff09;如下&#xff1a; <?xml version"1.0"encoding"gb2312"?><bookstore><book genre"fantasy"ISBN"2-3631-4"><title>Oberons Legacy</title> &…

[vue] $nextTick有什么作用?

[vue] $nextTick有什么作用&#xff1f; 处理数据动态变化后&#xff0c;dom还未及时更新的问题。nexttick就可以获取到数据更新后最新的dom变化个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目…

java 覆盖和隐藏_Java方法的覆盖与隐藏的区别分析

本篇文章介绍了&#xff0c;关于Java方法的覆盖与隐藏的区别分析。需要的朋友参考下关于隐藏和覆盖的区别&#xff0c;要提到RTTI(run-time type identification)(运行期类型检查)&#xff0c;也就是运行期的多态&#xff0c;当一个父类引用指向子类对象的时候&#xff0c;请看…

20175204 张湲祯 2018-2019-2《Java程序设计》 第一周学习总结

20175204 张湲祯 2018-2019-2《Java程序设计》第一周学习总结 教材学习内容总结 -第一章Java入门要点&#xff1a; -Java的地位&#xff1a;具有面向对象&#xff0c;与平台无关&#xff0c;安全稳定和多线程等优良特性&#xff0c;是软件设计中优秀的编程语言。 -Java的特点&a…

使用线程,防止当前程序被阻塞

在编写Windows Form程序时有时需要编写一个处理大事件的函数&#xff0c;这导致了程序的运行时间变得很长&#xff0c;这时问题就出现了&#xff0c;当程序没有处理完毕之前当前窗体被锁死了&#xff0c;而且用户如果此时点击窗体的其他部分&#xff0c;便会出现没有响应的标识…

[vue] 分别说说vue能监听到数组或对象变化的场景,还有哪些场景是监听不到的?无法监听时有什么解决方案?

[vue] 分别说说vue能监听到数组或对象变化的场景&#xff0c;还有哪些场景是监听不到的&#xff1f;无法监听时有什么解决方案&#xff1f; 无法监听时的方案&#xff1a; 数组&#xff1a;改变数组的值&#xff1a;this.$set() 改变数组长度&#xff1a;arr.splice() 对象&am…

java 文本排序_如何使用Java按最高编号对文本文件进行排序

使用像TreeMap这样的有序集合&#xff0c;它按照键的自然顺序保存其条目(键值映射)。因为&#xff0c;您希望对高分进行排序&#xff0c;将分数作为键和玩家名称作为其值。// instantiate your sorted collectionMap highestScores new TreeMap();// setup a file readerBuffe…

探索未知种族之osg类生物---呼吸分解之更新循环一

上节总结 前几天我们大体上介绍完成了osg的事件循环的介绍&#xff0c;总结一下osg的时间循环主要就是得到平台(windows)的所有消息&#xff0c;并遍历所有的node的eventCallback&#xff0c;并对他们进行处理。接下来我们就要进入osg的另一个维持生命的循环---更新循环。 更新…

【EXLIBRIS】纸版书目整理 -- 大书架 上 【292 种】【327册】

为了避免往年光说不练的现象&#xff0c;提前开始整理&#xff0c;并post在这里&#xff0c;接受监督&#xff0c;&#xff1a;&#xff09;一、大书架 上 【292 种】【327册】书名存放位置出版社史记&#xff08;全本&#xff09;大书架上中州古籍出版社儒林外史大书架上岳麓书…

CSS3属性——(一)

在CSS中追加了三个属性选择器&#xff1a;[att*val]、[att^val]、[att$val] [att*val]属性选择器 如果元素用att表示的属性的值中包含用val指定的字符&#xff0c;那么该元素使用这个样式。 [att^val]属性选择器 如果用att表示的属性值的开头字符为用val指定的字符的话&#xf…

[vue] v-if和v-for的优先级是什么?如果这两个同时出现时,那应该怎么优化才能得到更好的性能?

[vue] v-if和v-for的优先级是什么&#xff1f;如果这两个同时出现时&#xff0c;那应该怎么优化才能得到更好的性能&#xff1f; v-for 的优先级更高 避免出现这种情况&#xff0c;如果实在需要&#xff0c;则在外嵌套template&#xff0c;在这一层进行v-if判断&#xff0c;然…

JSP实战型程序连载:通用数据库连接JavaBean

package online;import java.sql.*;public class DBConn {private static String rootpath "web发布路径";private String sample "sample";private Connection con null;private Statement stmt null;ResultSet rs null;/**************************…

java变换变量赋值_Java变量的类型转换

在程序中&#xff0c;当把一种数据类型的值赋给另一种数据类型的变量时&#xff0c;需要进行数据类型转换。根据转换方式的不同&#xff0c;数据类型转换可分为两种:自动类型转换和强制类型转换。自动类型转换自动类型转换也叫隐式类型转换&#xff0c;指的是两种数据类型在转换…

字符串的拼接

再字符串的拼接的时候对一些字符需要进行转译&#xff0c;要不然会出现问题 var btn <button class"jui-form-button" type"button" οnclick"save_msg(\ json[i].id \,\ json[i].template \,document.getElementById(\disab i \).value,do…

[vue] vue在组件中引入插件的方法有哪些?

[vue] vue在组件中引入插件的方法有哪些&#xff1f; 插件通常用来为 Vue 添加全局功能。插件的功能范围没有严格的限制——一般有下面几种&#xff1a;添加全局方法或者属性。如: vue-custom-element添加全局资源&#xff1a;指令/过滤器/过渡等。如 vue-touch通过全局混入来…

]英文资料大全

语法 http://www.dailygrammar.com/ adventuretv,提供视频资料&#xff0c;内容多是各地的风土人情&#xff0c;很不错。 http://www.adventuretv.com/ 纽约时报&#xff0c;网上看新闻的好地方 http://www.nytimes.com/ 英文MP3下载的好地方 http://www.mp3raid.com/archiv…

java linearlayout_LinearLayout属性用法和源码分析

对于一个View(ViewGroup)来说实现无非于三个流程&#xff0c;onMeasure(测量)&#xff0c;onLayout(定位)&#xff0c;onDraw(绘制)&#xff0c;接下来就对这三个部分一一分析但是首先还是对LinearLayout变量进行介绍1.LinearLayout变量其实LinearLayout变量与上篇属性篇中关联…

[vue] vue实例挂载的过程是什么?

[vue] vue实例挂载的过程是什么&#xff1f; render, 没有则去编译编译vdom对实例进行watch个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

如何进行.NET高效开发

sugar 2006-03-12 13:53 转载于:https://www.cnblogs.com/SCOTT-SUN/archive/2006/06/02/416077.html

Linux 系统更改界面显示详解

1,修改配置文件 # inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/…