A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨佳名 高级黑马   /  2015-12-28 22:25  /  439 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨佳名 于 2016-1-5 14:32 编辑

面向对象:
它是一种编程思想,是相对于面向过程而言的。
它更符合我们的思考习惯,把复杂的事情简单化,让我们从程序的执行者变成程序的指挥者。
举个例子:我们去北京,首先考虑住房问题,而用面向对象的思想来说,我可以找一个中介,调用中介的找房子功能,让中介去帮我找房子,找到了告诉我就行了。让原本一个复杂的东西,变得简单化,让我们从执行者变成了指挥者。
面向对象有3大特性:封装、继承、多态。
封装:就是把功能的实现隐藏起来,对外提供公共的访问方式。
它的好处:把实现隐藏,仅仅对外提供公共的访问方式。提高了代码的复用性。让我们的程序变得更安全。
private是封装的一种体现形式,像类、方法等,这都是封装的体现。
继承:当多个类中含有相同的内容,我们把它抽取出来,组成一个类,然后再让这多个类与这个类产生一个关系,这样这多个类就具备了这些功能。这个关系就叫做继承。
继承的好处:提高的代码的复用性;提高了代码的维护性;让类与类产生了关系,是多态的前提。
它的弊端:打破了封装性;因为让类与类间产生了关系,让类的耦合性增加。
继承的设计理念:是类与类间存在is a的关系。与接口不同,实现关系是like a的关系。
举个例子:如果说黑马程序员是一个抽象类的话,那么黑马精神就可以看成是一个接口。在考入黑马程序员之前,我可以具备"黑马精神",我有这个功能,即是has a的关系。而当我考入了黑马程序员,我就成了它的一员,就是继承了它,是is a的关系。
多态:指的是同一事物在不同时刻表现出的不同状态。它有3个前提:1、存在继承或者实现关系。2、存在方法的重写。3、存在父类或父接口的引用指向子类对象。它分为:具体类多态、抽象类多态、接口多态。关于多态中成员的访问特点,只有成员方法是"编译看左边运行看右边",因为只有方法,存在方法的重写;成员变量和静态方法,都是"编译看左边运行也看左边"。
多态的好处:提高了程序的扩展性。提高了程序的维护性。
它的弊端:父类不能直接使用子类的特有功能。


集合:
collection是单列集合的顶层接口,它是存储数据的一个容器,与数组不同,它的长度是可变的,而且只能存储引用数据类型的数据。可以存储不同类型的数据。它有2个儿子:list和set。List元素的特点是,元素有序可以重复。它又有3个儿子。ArrayList、Vector、LinkedList。ArrayList底层数据结构是数组,查询快增删慢、线程不安全效率高,Vector底层数据结构也是数组,查询快增删慢,但它线程安全所以效率低。LinkedList底层数据结构是链表,查询慢增删快,线程不安全效率低。
Set元素的特点是:元素无序、唯一。它有两个儿子:HashSet、TreeSet。HashSet底层数据结构是哈希表,由两个方法保证元素唯一:hashCode()和equals()。TreeSet底层数据结构是二叉树,它根据元素比较的返回值是否是0来判断元素是否唯一。有两种方式实现:1、让元素具备比较性,元素所在的类实现Compareable接口,重写compareTo方法。2、让集合具备比较性,集合实现Comparator接口,重写compare方法。
Map集合是双列集合的顶层接口,元素以键值对形式存储。键唯一、值可以重复。

HashMap底层数据结构是哈希表,与HashSet保证元素唯一性相同。
TreeMap底层数据结构是二叉树,与TreeSet保证元素唯一性相同。
另外:HashMap允许使用null键和null值,线程不安全效率高。而Hashtable不允许使用null键和null值,线程安全效率低。


IO流。
分为字节流和字符流。
字节流:可以一次读一个字节,也可以一次读一个字节数组。
字节输入流:InputStream
字节输出流:OutPutStream
由于都是抽象类,所以使用它的子类
FileInputStream
FileOutputStream
想要高效:
BufferedInputStream
BufferedOutputStream
字符流:一次读一个字符,一次读一个字符数组。
字符输入流:Reader
字符输出流:Writer
字节流通向字符流的桥梁:InputStreamReader
字符流通向字节流的桥梁:OutputStreamWriter
它的子类
FileReader
FileWriter
想高效:有一次读一行、一次写一个字符串的方法
BufferedReader
BufferedWriter



异常:异常就是程序执行出现不正常的情况。java通过类的形式,来描述异常,把异常封装成对象。
Throwable是异常体系的超类,它有两个子类来描述异常的情况。
Error:很严重的问题,比如内存溢出,这不是靠我们写代码能解决的,所以不由我们处理。
Exception:由我们来处理的异常。它又分为两大类:编译时异常和运行时异常。
运行时异常:即RuntimeException及其子类。当发生时,系统希望程序停止。因为出现了无法继续运算的情况,需要我们在程序停止之后,对代码进行修改。
比如:IndexOutOfBoundsException(数组角标越界异常)、ClassCastException(类型转换异常)等。
编译时异常:即非RuntimeException及其子类,就是存在安全隐患的,要标识出去给调用者进行处理,否则就会编译失败。比如:IO流中经常见到的IOException。
对于异常的处理,有两种方法:1、不处理,用throws在方法声明上抛出去,抛给调用者,让调用者处理。(如果一直抛,最终抛给JVM)。2、用try...catch...finally语句处理。
当我们在写异常的时候,该有RuntimeException还是非RuntimeException呢?
我们看当发生异常时,能不能由我们来解决。如果不能解决需要修正代码,就继承RuntimeException。如果能处理,就继承Exception,对其处理后,程序即可继续执行。

小小面试题:
throw和throws的区别:
throw:用在方法体内,跟的是一次对象名;只能抛出一个一次对象名;表示抛出异常,由方法体内的语句处理;throw表示跑出了异常,执行throw一定抛出了某种异常。
throws:用在方法声明后面,跟的是异常类名;可以跟多个异常类名,用“,”隔开;表示跑出一次,由方法的调用者来处理;表示出现异常的可能性,并不一定是会发生这样的异常。



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马