【Java】Java复习笔记-第三部分
修饰符abstract
抽象的,定义框架不去实现,可以修饰类和方法
abstract修饰类:
会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型
抽象类就相当于一个类的半成品,需要子类继承并覆盖其中的抽象方法,这时子类才又创建实例的能力,如果子类没有实现父类的抽象方法,那么子类也要为抽象类。
abstract修饰方法:
会使这个方法变成抽象方法,也就是只有声明而没有实现,实现部分以";"代替,需要子类继承实现。
抽象方法代表了某种标准,定义标准,定义功能,在子类中去实现功能(子类继承了父类并需要给出从父类继承的抽象方法的实现)。
方法一时间想不到怎么被实现,或有意要子类去实现而定义某种标准,这个方法可以被定义为抽象。
注意:
有抽象方法的类一定是抽象类。但是抽象类中不一定都是抽象方法,也可以全是具体方法。
接口(interface)
- 接口的定义:接口从本质上说是一种特殊的抽象类。
- 关键字interface。
- 在接口中,所有的方法为公开、抽象的方法:public abstract
- 在接口中,所有的属性都是公开、静态的常量:public static final
- 接口与接口之间可以多继承,用extends,多个之间用逗号隔开。
- 接口中没有构造方法,不能用“new 接口名”来实例化一个接口,但可以声明一个接口。
接口的实现:
关键字implements
一个类实现一个接口必须实现接口中所有的方法,否则其为抽象类,并且在实现类中的方法要加上public(不能省略)。
类中的默认修饰符:default。
接口中的默认修饰符:public。
一个类除了继承另一个类外(只能继承一个类),还可以实现多个接口(接口之间用逗号分隔)。
接口的作用:
间接实现多继承:用接口来实现多继承并不会增加类关系的复杂度。因为接口不是类,与类不在一个层次上,是在类的基础上进行再次抽象。
接口可以抽象出次要类型,分出主、次关系类型,符合看世界的一般方法。
接口隔离,与封装性有关。一个对象都有多个方面,可以只展示其中几个方面,其他的都隐藏。因此可以看为“更高层次的封装”,把 一个大接口做成若干个小接口。
通过接口制定标准(最重要的作用)
接口:制定标准。
接口的调用者:使用标准。
接口的实现类:实现标准。
解耦合作用:把使用标准和实现标准分开,使得标准的制定者和实现者解除偶合关系,具有极强的可移植性
例:sun公司提供一套访问数据库的接口(标准),java程序员访问数据库时针对数据库接口编程。接口由各个数据库厂商负责实现。
接口编程的原则
尽量针对接口编程(能用接口就尽量用接口)
接口隔离原则(用若干个小接口取代一个大接口)
注意:
接口中没有构造器,也没有main方法
封装类
- Java为每一个简单数据类型提供了一个封装类。
- 除int和char,其余类型首字母大写即成封装类。
- int Integer
- char Character
最常用的两个封装类Integer和Double
jdk1.4之前基本类型和封装类的转化是需要构造器去转化的,到了jdk1.5是自动进行转化的
int、Integer和String之间的转化(最常用的)
int i=1; Integer in = new Integer(i); //int --> Integer int i = in.intValue(); //Integer --> int String str = String.valueOf(i); //Int --> String int ii = Integer.parseInt(str); //String --> int String s = in.toString(); //Integer --> String Integer inte = Integer.valueOf(str); //String --> Integer
Object类
hashCode():
返回该对象的哈希码值
hashCode 的常规协定是:
在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。
如果根据 equals(Object) 方法,两个对象是相等的,那么在两个对象中的每个对象上调用 hashCode 方法都必须生成相同的整数结果。
toString():
返回该对象的字符串表示。
通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂。建议所有子类都重写此方法。
equals()
指示某个其他对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y)始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。对于任何非空引用值 x,x.equals(null) 都应返回 false。
注意:
当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
String、StringBuffer和StringBulder
String:
不可改变的Unicode字符序列
池化思想,把需要共享的数据放在池中,用一个存储区域来存放一些公用资源以减少存储空间的开销。
在String类中,以字面值创建时,会到Java方法空间的串池中去查找,如果没有则会在串池里创建一个字符串对象,并返回其地址赋给对象变量,如果有就返回串池中字符串的地址,并把这个地址赋给对象变量。
如果是new,则会在堆空间中创建String类的对象,不会有上述的过程
如:
String s1 = "abc"; //新创建,字符串常量池中没有该串,则会在池中创建一个串"abc" String s2 = "abc"; //串池中已经存在"abc",则s2会去指向"abc"而不会去创建一个新的 String s3 = new String("abc"); //直接在堆中去开辟一个新的空间,而不会去池中查找
类中的具体方法查看下Api文档。
调用任何String中的方法,不会改变String自身,除非重新赋值。
StringBuffer:
可改变的Unicode字符序列
允许并发操作,是线程安全的
String类在进行字符串连接时会显得效率很低,就是因为它所产生的对象的属性是不能够修改的,当连接字符串时也就只能创建新的对象。
对于很多字符串连接时,应当使用StringBuffer类,使用这个类的对象来进行字符串连接时就不会有多余的中间对象生成,从而优化了效率。
例:对于字符串连接String str = "A" + "B" + "C" + "D";
产生:"AB"、"ABC"、"ABCD"
在串池中产生的"AB"、"ABC"明显是多余对象,浪费空间。
解决方案:
String s = null; StringBuffer sb = new StringBuffer("A"); sb.append("B"); sb.append("C"); sb.append("D"); s = sb.toString();
StringBulder:
可改变的Unicode字符序列
操作同StringBuffer,只是不支持并发操作,非线程安全的
集合
保存多个其他对象的对象,不能保存简单类型
List:有序(存放元素的顺序),可重复的集合
ArrayList:实质就是一个会自动增长的数组
查询效率比较高,增删的效率比较低,适用于查询比较频繁,增删动作较少的元素管理的集合。
加载大批量的数据时,先进行手动扩容(就是调用ensureCapacity(int minCapacity)方法),这样可以提高效率。
LinkedList:底层是用双向循环链表来实现的
查询效率低,但是增删效率很高,适用于增删动作的比较频繁,查询次数较少的元素管理的集合
Set:无序的,不允许有重复元素的集合
HashSet:
Object类中的hashCode()的方法是所有类都会继承的方法,这个方法会算出一个Hash码值返回,HashSet会用Hash码值去和数组长度取模,对象的模值(这个模值就是对象要存放在数组中的位置,和数组的下标相同)相同时才会判断数组中的元素和要加入的对象的内容是否相同,如果不同才会再找位置添加进去,相同则不允许添加。
如果数组中的元素和要加入的对象的hashCode()返回了相同的Hash码值,才会用equals()方法来判断两个对象的内容是否相同。
注意:
要存入HashSet的集合对象中的自定义类必须覆盖hashCode()、equals()两个方法,才能保证集合中元素不重复。
TreeSet:
可排序的Set
SortedSet接口是Set的子接口,TreeSet是SortedSet接口的实现类,他可以对集合中的元素进行排序。
将自定义类的对象存放在TreeSet中,这个类需要实现了Comparable接口,TreeSet可以自动过滤掉重复元素所以不在需要重载hashCode()方法,TreeSet会根据比较规则判断元素内容是否相同,不同则会存入,TreeSet会在元素存入时就进行排序。
Comparable接口:
也叫做可比较接口,这个接口在java.lang包下,只要根据指定类型的排序规则实现了这个接口,就是可排序的。
这个接口中只定义了一个 compareTo(Object o) 方法,该方法的返回值类型是整型,如果当前对象大于参数对象就返回正数,当前对象等于参数对象就返回0,当前对象小于参数对象就返回负值,这样写就是升序排列,反之则是进行降序排列。
Comparator接口:
比较器Comparator接口,是另一种对自定义类型对象的集合整体排序的方法,存在于java.util包下。
这个接口中定义了一个 compare(Object o1,Object o2) 方法来比较两个对象,这个方法的返回值定义和上面介绍的那个方法是一样。
利用这种方式,则在创建集合的时候把定义好的比较器作为参数,构造一个集合
Map:
存放key-value对(有关系的两个对象,一个做key,一个做value,同时存入)
HashMap:基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键
遍历:
先调用keySet()得到key的set集合,
再迭代遍历key的set集合,
根据key得到value。
Hashtable:
同HashMap,一般不使用
HashMap与Hashtable的区别:
HashMap:非线程安全,不支持并发控制,允许空的键值对。
Hashtable:是线程安全,支持并发控制,不允许有空的键值对。
SortedMap接口:
Map的子接口,按某一特定排序规则来存放所加入的键值对
实现类:TreeMap类。
Key值的排序规则,同SortedSet接口实现类TreeSet
注意:
key一般是8种基本类型的封装类或者是String类,拿自己自定义的类作为Key没有意义。
key不可重复,value可以重复
转载于:https://www.cnblogs.com/lcw/p/3204041.html
【Java】Java复习笔记-第三部分相关推荐
- Java NIO 学习笔记(三)----Selector
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- Java基础复习笔记系列 七 IO操作
Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...
- java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略
java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略 GC需要完成的三件事情:哪些内存需要回收.什么时候回收.如何回收 垃圾回收器在对堆进行回收前,首先要确定那些对象存活,哪些对象已经死去,判断的 ...
- Java Web 实习笔记(三)
Java web实习笔记目录导航 1. Java Web 实习笔记(一) 2.Java Web 实习笔记(二) 3.Java Web 实习笔记(三) 4.Java Web 实习笔记(四) 一.Use ...
- 黑马程序员Java教程学习笔记(三)
学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(三) 面向对象:设计对象.注意事 ...
- 算法复习笔记(三)分治法
算法复习笔记(三)分治法 1.引入语 分治法划分对策: 子问题与原问题相比:问题性质一致,问题规模不同 求解一般分为三个阶段: 1.划分:直到问题足够小可以直接求解为止 2.求解: 3.合并:将子问题 ...
- 面向对象程序设计(JAVA)复习笔记(上)
文章目录 一.JAVA语言基础知识 变量和常量 标准输入输出 数组 数组的声明 数组的创建 数组元素的初始化 数组的引用 多维数组 二.类和对象的基本概念 面对对象程序设计方法概述 类的声明 对象的声 ...
- Java入门教程笔记(三)
Java入门教程笔记(一) Java入门教程笔记(二) 对前两份笔记的补充: static关键词: 被static关键词修饰的变量或者方法可以不依赖于某个特定的对象存在 被static关键词修饰的方法 ...
- 《微型计算机原理与接口技术》复习笔记(三)
使用教材为 <微型计算机原理与接口技术>(慕课版) 孙丽娟.李爱群.陈燕俐.周宁宁.邓玉龙编著 微机原理复习笔记一 微机原理复习笔记二 微机原理复习笔记四 微机原理复习笔记三 1. 存储器 ...
最新文章
- 作为程序员,你在编程中吃了哪些数学的亏?
- Ubuntu16.04 安装ftp
- 让PHP更快的提供文件下载 【转】
- 用 Shell 脚本访问 MySQL 数据库
- 冷启动问题:如何构建你的机器学习组合?
- 27.4. /etc/bandwidthd.conf
- Oracle分页排序数据混乱原因及解决
- 在并发中练习 Boost.Multiprecision多线程环境相关的测试程序
- java 8 永久代_Java8内存结构—永久代(PermGen)和元空间(Metaspace)
- 你都知道么?Android中21种drawable标签大全
- Docker默认网络管理
- 长沙理工大学校园网客户端无法卸载解决办法
- 如何用openweather显示html,如何显示openweathermap天气图标
- python培训来袭_从入门到精通!2020年Python最佳学习路线重磅来袭!
- MongoDB:The Definitive Guide CHAPTER 2 Getting Started
- jQuery Mobile中导航栏navbar的data-*选项
- 局域网内抢带宽的工具 破解版 【PSP流量限制软件】
- 仿百度统计html模板,YJHL仿百度统计 | CNZZ统计友盟源码
- H5微信中棋牌游戏域名防封解决方案
- 【程序员思维修炼】读书笔记
热门文章
- 静脉阻塞指标+补充笔记
- java8中的lambda用法实例
- xfce4的面板只能看见日期没法看见具体时刻
- 修改cockpit端口
- ubuntu16.04下面流畅运行pycharm设置
- ASSERT: “QGLFunctions::isInitialized(d_ptr)“ - Runtime Exception
- 深度学习(四)——RNN, LSTM, 神经元激活函数进阶
- 机器学习基础:最优化方法
- 【Linux就该这么学 20期培训笔记 01】部署虚拟环境安装linux系统
- SQL Server里PIVOT运算符的”红颜祸水“