《Java面向对象》

前言

笔记中所有知识点皆来自《java面向对象思想与程序设计》一书,记录下的都是对于自己的查漏补缺。

一. 学习方法

刻意练习:只在学习区练习、大量重复训练、持续获得有效的反馈、精神高度集中

1.模仿并重复练习

像英语完形填空一样,遮住一行代码,一段代码,或一个方法一个类。经过若干次重复,
可以对问题求解策略有一个从整体到局部,再从局部到整体的认知

2.科学规划和严格执行

避免低水平简单重复,走出舒适区。
重复同一问题的求解,主动尝试不同的路线,不同的算法、不同的语言、不同的设计思路来解决。
将同一语言用在不同课程中,以其他专业课程中的问题为项目,进行分析求解。有助于计算思维形成。

3,建立反馈机制

从自己和别人成功及失败中积累经验。通过团体学习、集体讨论实现有效反馈。

二. 编译式语言和解释式语言

1.编译式语言工作过程:编辑器–(源程序) -->编译器–生成可执行程序–>操作系统->执行动作
2.解释式语言工作过程:编辑器–(源程序)–>解释器–>执行动作
3.java语言工作过程:编辑器–(源程序)-—>java编译器javac (处理成字节码文件)–>java 虚拟机jvm -->执行的动作
4.java介于编译和解释之间式中间,是一种混合形式,本质上还是解释式语言

三.精通之路

拓展阅读:
《HeadFIrst设计模式》《java Language Specification》,《Thinking in java》,《Effective java中文版》《重构改善既有代码设计》

简单来讲:研究技术、完成项目。

四.基本数据类型

byte(字节型),short (短整型),int(整型),long(长整型),float(单精度型),char(字符型),Boolean(布尔型),double(双精度型)
精度由低到高byte->short->char->int->long->float->double
:不同数据混合运算时,低精度的会先转换成高精度在与高精度进行运算,最后得到的数据类型是高精度类型
低精度赋给一个高精度变量是可以的,反之则不行。可以通过强转解决,例如:

int a; 
a=1.0;//会报错
//加上int强转
a=(int)1.0;

求余数:a%b = a - a/b*b。:这里的a、b必须都是整型

第五章–类设计进阶

final修饰类,该类不能被继承
final修饰方法,该方法不能被重写
final修饰的属性不能被修改,需在一开始设置初始值。

同一类对象的不同行为称为多态性。

抽象类:至少有一个抽象方法,可以定义非抽象方法。因为需要子类来实现抽象方法,所以不能用final修饰。
java中类只能单继承,但一个类可以实现多个接口。
泛化就是继承,接口泛化就是多重继承。

第六章–异常处理机制

Except异常分为可查和不可查
可查:编译时能检查出来
不可查:编译时无法检查出,一般由程序逻辑错误引起。
除RuntimeException以外都是可查异常。

try—catch——finally
无论是否捕获或处理异常,finally语句都会被执行。由catch时,可以没有finally,没有catch时,finally一定要有。

面试题有一个:finally是在return语句执行结束之前还是之后?
答案:之前

第七章 – 基础类库

自动装箱:将基本类型数据自动转换为对应包装类的对象的过程。
例:Integer i = 2; 2是一个基本数据类型,将其赋给i前先用Integer.valueOf(2)自动生成一个Integer对象然后再赋给i。

自动拆箱:将包装类的对象自动转换为对应的基本类型数据的过程。
例 :int x = i; i和x不是同一类型,在赋值前,用i.intValur()得到i所表示的整型数后再赋给整型变换x。

什么是反射机制

对于任意一个类,都能够获取它的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。
即一种能够程序运行时能够获取类的信息和调用对象的方法的功能。
意义:使java具有更强的动态性。(还是很迷。。)

第八章 – 集合类

泛型

泛型:即“参数化类型”,就是对类型进行参数化,在调用使传入具体的类型。

class 泛型类名 <类型参数列表>
{
//类体
}

如常见的class Object <T> {}就是泛型类。

泛型方法定义:
[访问限定词]<类型参数列表>方法类型 方法名(类型参数名... 参数名)
{
//.......
}
类型参数后加 ...  ,表示这是可变参数(可以传入不同类型)。

集合

集合:把一组元素按照一定的数据结构进行存储管理的容器。
特点:1.可以动态调整空间,不像数组是写死了的。
2.提供多种数据结构和算法,减少编排工作量。
3.集合类都是经过详细设计和优化的,可以提高程序的处理速度和质量。
注意:集合类不支持简单数据处理,需要先对简单数据类型进行装箱处理。(貌似现在会自动对简单数据类型进行装箱处理)
例如:

Vector  vec = new Vector();
	int i= 1;
	vec.add(i);	//会自动转为Integer类型
      集合类中存放的都是对象的应用而不是对像本身。

List集合

LIst集合接口:一组有序元素的集合,可以使用索引或顺序访问其中的元素。也称线性表。
常用类:ArrayLIst、LinkedList、Vector、Stack

ArrayList

ArrayList:数组列表,采用的是数组结构来存储数据。较于数组不同的是,ArrayList可以动态调整空间。一般分配的空间
会大于实际存储的数据个数,便于添加和插入元素。但插入、删除元素需要进行数据移动等内存查找,所以查询速度快,
增删速度较慢。
ArrayList如何实现动态扩展
当分配的空间用尽时,会重新分配一个更大的连续地址空间,并把数组的数据复制到新的空间中,然后将对象引用指向新空间的首地址。

vector

Vector:和ArrayList实现原理相同,但使用了synchronized方法来保证线程安全,所以性能上比ArrayList要差。

stack

Stack:继承自Vector,通过push、pop、取堆栈顶点的peek方法,empty、searh(在堆栈中查找项并确定到堆栈顶距离的方法)
这五个方法对Vector进行扩展,实现了后进先出的堆栈结构。

LinkedList

LinkedList:采用双向链表数据结构。每个节点存储数据,除保存元素对象之外,还保存了指向前后节点的指针。
当查询时需要逐一向前或像后遍历,所以查询速度很慢。但是插入和删除数据只需记录本节点的前后节点即可,所以增删较快。

注意:Vector已不建议使用,Stack有了更好的替代集合类Deque。List集合类中可以添加重复的元素。

Set

Set集合接口:存储的元素时唯一和无序的。也称为数学集合。快速查找和防止重复元素跟=更有优势。

HashSet

HashSet:内部数据结构采用HashMap。每存储一个元素都会生成一个对应的整数标识——散列码(hashcode)。
根据这个散列码确定元素的所在存储位置,实现快速查询。
缺点:保存的元素无任何特定顺序,既不按字母排序也不按添加顺序排序。
解决:java提供了一个新的HashSet类——LinkHashSet类,通过一个链表来维护元素的添加顺序。

11.I/O流

流:无结构化的数据组成的序列,流中的格式没有任何格式和含义,只是以字节或字符流入或流出。
按输出方向划分:输入流(读操作)和输出流(写操作)
按操作数据分:字节流字符流
字节流和字符流的区别是:字节流按8位传输以字节为单位输入输出数据,字符流按16位传输以字符为单位输入输出数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值