java8--面向对象 下(疯狂java讲义3) 复习笔记
1、如果一个包装类和一个基本类型比较大小,或者是两个基本类型进行比较大小,直接用==就好;
如果是两个包装类进行比较大小,那么使用equals(),返回值是true,false,或者使用Xxx.compare(),返回值是1,0,-1。(这里的equals()方法,已经被包装类重写过了,不是Object的equals())
2、==和equals方法的区别
当使用==来判断两个变量是否想等时,比较的是栈内存中的值,如果两个变量是基本类型变量,且都是数值类型,那么栈内存中个存放的是基本类型变量的值,所以只要两个基本类型变量的值想等,就会返回true。但对于两个引用类型变量,由于栈内存中存放的是变量的引用,所以只有当这两个引用类型变量指向同一个对象是,==才会返回true。==不可用于比较类型上没有父子关系的两个对象。
equals()方法是Object类的一个实例方法,但这个方法和==没区别。不过String类和基本类型的包装类重写了这个equals()方法,不再比较引用对象的引用地址,而是比较所引用的值。
3、类成员
static 关键字修饰的成员是类成员,有类变量、类方法、静态初始化块三部分,static关键字不能修饰构造器。static修饰的类成员属于整个类。除了这三个,类中还可以包括构造器和内部类(包括接口、枚举),内部类可以用static修饰。
null对象可以访问它所属类的类成员。
对static关键字而言:类成员(包括方法、初始化块、内部类和枚举类)不能访问实例成员(包括成员变量、方法、初始化块、内部类和枚举类)。因为类成员的作用域是属于类的,类成员的作用域比实例成员的作用域更大,完全可能出现类成员已经初始化完成,但实例成员还不曾初始化的情况,如果允许类成员访问实例成员,将会引起大量错误。
4、final修饰符
final修饰的变量获得初始值后不能被重新赋值,因此final修饰成员变量和修饰局部变量时,是有区别的。
final成员变量:
与普通成员变量不同的是,final修饰的成员变量必须由程序员显示的初始化,系统不会对final成员进行隐式初始化。
final修饰的类变量在声明时或静态初始化块中指定初始值。
final修饰的实例变量,在声明时或非静态初始化块中或构造器中指定初始值;
final局部变量:
系统不会对局部变量进行初始化,局部变量必须由程序员显示初始化。因此使用final修饰局部变量时,既可以在定义时指定默认值,也可以不指定默认值。如果final 修饰的局部变量在定义时没指定默认值,则可以在后面的代码中对该fianl变量赋初始值,但只能一次,不能重复赋值。
final修饰基本类型变量和修饰引用类型变量的区别:
当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变。但对于引用类型变量而言,它保存的仅仅是一个引用,final只保证这个引用类型变量所引用的地址不变,即一直引用同一个对象(使用final修饰的引用类型变量不能被重新赋值),但这个对象完全额可以发生改变(即可以改变引用类型变量所引用对象的内容)。
final方法
final修饰的方法不可被重写。如果不希望子类重写某个方法,可以使用final修饰该方法。
final类
final类不可以有子类(不可被继承)。
不可变类
使用private和final修饰符类修饰该类的成员变量。
提供带参数构造器
不提供setter方法
如果有必要,重写Objcet类的hashCode()和equals()方法。
缓存不可变类的实例
如果程序经常需要使用相同的不可变类实例,则应该考虑缓存者在不可变类的实例。毕竟重复创建相同的对象没有太大的意义,而且加大系统开销。
缓存是软件设计中一个非常有用的模式,缓存的实现方式有很多种,不同的实现方式可能存在较大的性能差别。但是,盲目乱用缓存也会导致系统性能下降,缓存的对象会占用系统内存,所以缓存一个重复使用概率不大的实例,就弊大于利。
5、抽象类
abstract 修饰的方法必须重写才有意义,所以abstract不能和private 或 final一起使用.
6、接口
接口里不能保护普通方法,接口里所有的方法都是抽象方法 ;java8对接口进行了改进,允许在接口中定义默认方法,默认方法可以提供方法实现.
接口是从多个相似类中抽象出来的规范,接口不提供任何实现.接口体现的是规范和实现分离的哲学.
接口通常是定义多一组公用方法.
接口完全支持多继承,一个接口可以直接继承多个父接口,但接口只能继承接口,不能继承类.
一个类可以实现多个接口,如果一个类实现了多个接口,那么这个类的对象就可以直接赋值给多个父类变量,这就是Java提供的模拟多继承.
由于接口定义的是一种规范,因此接口里不能包含构造器和初始化块定义.接口里可以包含成员变量(只能是静态常量),方法(只能是抽象实例方法,类方法(1.8),或默认方法(1.8)),内部类(包括内部接口,枚举)定义.
系统自动为接口里的成员变量添加public static final修饰符.
所以接口里定义int MAX = 50;和定义 public static final int MAX = 50;的意义是一样的.
7、内部类
java8--面向对象 下(疯狂java讲义3) 复习笔记的更多相关文章
- java8--集合(疯狂java讲义3复习笔记)
1.集合分四类:set,map,list,queue 位于java.util包下. 集合类和数组的区别,数组可以保存基本类型的值或者是对象的引用,而集合里只能保存对象的引用. 集合类主要由两个接口派生 ...
- 《疯狂Java讲义》学习笔记——第2章 理解面向对象
面向对象的三种基本特征:继承,封装,多态 UML(统一建模语言) 2.1 面向对象 2.1.1 结构化程序设计简介 图2.1 结构化软件的逻辑结构示意图 从图2.1可以看出,结构化设计需要采用自顶向 ...
- java8--类加载机制与反射(java疯狂讲义3复习笔记)
本章重点介绍java.lang.reflect包下的接口和类 当程序使用某个类时,如果该类还没有被加载到内存中,那么系统会通过加载,连接,初始化三个步骤来对该类进行初始化. 类的加载时指将类的clas ...
- 《疯狂java讲义》笔记 1-5章
1.编译语言和解释语言理解,摘自李刚老师的<疯狂Java讲义>第三版: 就是说,Java和.net都是编译型有事解释型语言.编译型就是根据不同平台编译成不同的可执行机器码,编译过程中会进行 ...
- 《疯狂java讲义》读后感
<疯狂java讲义·第三版>,全书共851页,18章. 目录如下: 第1章 Java语言概述与开发环境 第2章 理解面向对象 第3章 数据类型和运算符 第4章 流程控制与数组 第5章 面向 ...
- 《疯狂Java讲义第4版》PDF+代码+课件 电子书pdf 分享
<疯狂Java讲义(第4版)>是<疯狂Java讲义>的第4版,第4版保持了前3版系统.全面.讲解浅显.细致的特性,全面新增介绍了Java 9的新特性. <疯狂Java讲义 ...
- 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题
调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...
- 【Java】-NO.16.EBook.4.Java.1.005-【疯狂Java讲义第3版 李刚】- 枚举
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.005-[疯狂Java讲义第3版 李刚]- 枚举 Style:EBook Series:Java Si ...
- 【Java】-NO.16.EBook.4.Java.1.007-【疯狂Java讲义第3版 李刚】- Java基础类
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.007-[疯狂Java讲义第3版 李刚]- Java基础类 Style:EBook Series:J ...
- 【Java】-NO.16.EBook.4.Java.1.008-【疯狂Java讲义第3版 李刚】- 集合/容器
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.008-[疯狂Java讲义第3版 李刚]- 集合 Style:EBook Series:Java Si ...
随机推荐
- POJ 1887 Testing the CATCHER
Testing the CATCHER Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 13396 Accepted: 4 ...
- 2013 年 acm 长春现场赛
A - Hard Code Hdu 4813 题目大意:给你一坨字符串,让你输出其栅栏密码的解码形式 思路:水题模拟 #include<iostream> #include<cstd ...
- 刷题总结——road(ssoi)
题目: 题目背景 SOURCE:NOIP2016-RZZ-1 题目描述 有 N 个城市,这些城市通过 M 条无向边互相连通,每条边有一个权值 Ci ,表示这条边的长度为 2^(Ci) ,没有两条边的长 ...
- uva 10515 规律打表
Problem G Power et al. Input: Standard Input Output: Standard Output Finding the exponent of any num ...
- HDU 5001 Walk (暴力、概率dp)
Walk Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Sub ...
- 使用selenium抓取淘宝的商品信息
淘宝的页面大量使用了js加载数据,所以采用selenium来进行爬取更为简单,selenum作为一个测试工具,主要配合无窗口浏览器phantomjs来使用. import re from seleni ...
- go--time包
格式化字符串 转 时间戳 ////获取本地location toBeCharge := "2015-01-01 00:00:00" //待转化为时间戳的字符串 注意 这里的小时和分 ...
- 如何选择 IT 技术书籍
★第1招:看网上评论 首先,上一些权威的图书网站,看看大伙儿的评价如何(要相信群众的眼睛是雪亮的).对于英文书籍,我一般上亚马逊网站去看看:中文书籍则上豆瓣网.这两个网站都提供星级评分,一般 > ...
- Java面向对象练习题
1.猜数字游戏: 一个类A有两个成员变量v.num,v有一个初值100. 定义一个方法guess,对A类的成员变量v,用num进行猜. 如果大了则提示大了,小了则提示小了.等于则提示猜测成功. 在ma ...
- Maven自动部署(SCM-SVN/Git)(maven-scm-plugin/maven-release-plugin插件的使用)
以下内容引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/maven_deployment_automation.html ...