黑马程序员--基础复习2012.8.3

---------------------- android培训java培训、期待与您交流! ----------------------

继承:

1.      提高代码复用性

2.      让类与类之间产生关系,有了关系,才有了多态的特性

注意:不能为了简化代码而继续.java只支持单继承,支持多层继续,也就是一个继承体系。

必须是类与类之间有所属关系才可以继承。所属关系is-a ;

查阅父类功能,创建子类对象使用功能。

 

Super代表父类对象的引用

 

覆盖

1.      子类覆盖父类,必须保证子类权限大于父类权限。

2.      静态只能覆盖静态

重载:只看同名函数的参数列表

重写:子父类方法要一模一样

 

子类中所有构造函数默认第一行都是super();

子类的所有构造函数,默认都会访问父类中的空参数构造函数

当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访问的父类的构造函数。

 

final,修饰符

1.      可以修饰类,函数,变量

2.      被final修饰的类不可以被继承。为了避免被继承,被子类覆写功能。

3.      被final修饰的方法不可以被覆写

4.      被final修饰的变量是一个常量只能赋值一次,即可以修饰成员变量,又可以修饰局部变量

5.      内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量

 

抽象类

当多个类中出现相同功能,但是功能主体不同

这时可以进行向上抽取,只抽取功能定义,而不抽取功能主体

 

抽象类的特点

1.      抽象方法一定在抽象类中

2.      抽象方法和抽象类都必须被abstract关键字修饰

3.      抽象类不可以用new创建对象。因为调用抽象方法没有意义。

4.      抽象类汇总的方法要被使用,必须由子类覆写所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,则该子类还是一个抽象类

 

接口,interface

接口格式

1.      接口中常见定义:常量,抽象方法

2.      接口中的成员都有固定修饰符    

a)        常量: public static final

b)       方法:public abstract

接口中的成员都是public

不可创建对象,因为有抽象方法,需被子类实现,子类对接口汇总的抽象方法全都覆盖后,子类才可以实例化,否则子类是一个抽象类。可以被类多实现

接口的特点:

1.  接口是对外暴露规则

2.  接口是程序的功能扩展

3.  接口可以用来多实现

4.  类与接口直接是实现关系,而类可以继承一个类的同时实现多个接口

5.  接口与接口之间也可以有继续关系

 

 

多态:可以理解为事物存在的多种体现形态。

多态的体现

       父类引用指向了自己的子类对象。

       父类的引用也可以接收自己的子类对象。

多态的前提

       必须是类与类之间有关系。要么继承,要么实现。

       存在覆盖

多态的好处

       多态的出现大大的提高了程序的扩展性

多态的弊端

       提高了扩展性,但是只能使用父类的引用访问父类中的成员。

多态的应用

 

在多态中成员函数的特点

       在编译时期,参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过。

       在运行时期,参阅对象所属的类中是否有调用的方法。

       成员函数在多态调用时,编译看左边,运行看右边。

在多态中成员变量的特点,无论编译和运行都参考左边(引用型变量的类型)

在多态中,静态成员函数的特点,无论编译和运行都参考左边。

 

内部类访问规则:

1.  内部类可以直接访问外部类中的成员,包括私有;内部类中持有了一个外部类引用this

2.  外部类要访问内部类,必须建立内部类对象。

访问格式

1当内部类定义在外部类的成员位置上,而且非私有,可以访问外部其他类

可以直接建立内部类对象

       外部类名.内部类名 变量名=外面了对象.内部类对象

2当内部类在成员位置上,就可以被成员修饰符所修饰,比如

Private:将内部类在外部类中进行封装

Static:内部类就具备static特性

只能直接访问外部类中的static成员。出现了访问限制。

当内部类中定义了静态成员,该内部类必须是static

外部类中的静态方法访问内部类时,内部类也必须是static的

 

异常体系

       Throwable

              Error

              Exception

                     RuntimeException

 

Throws使用在函数上,后面跟异常来,可以跟多个用逗号隔开

Throw使用在函数内,后面跟异常对象

 

Finally:一定执行的代码块

关闭资源

异常覆盖:

1.      子类在覆盖父类是,如果父类的方法抛出异常,那么子类覆盖方法,只能抛出父类的异常或者该异常的子类。

2.      如果父类方法抛出多个异常,那么子类在覆盖方法时只能抛出父类异常的子集

3.      如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。如果子类方法发生了异常,只能进行try处理。

Finally只有一种情况不会执行,当执行到System.exit(0);

 

进程:正在进行中的程序。

每个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。

线程:就是进程中第一个独立的控制单元。线程在控制着进程的执行。

一个进程至少有一个线程。

 

创建线程的第一种方式:继承Thread类,重写run方法,调用start方法(启动线程,调用run方法)。

创建线程的第二种方式:定义类实现Runnable接口,然后实现该接口的run方法,通过Thread类建立线程对象,将Runnable接口的子类对象作为实际参数传递给thread类的构造函数,调用thread类的start方法

 

join抢夺CPU执行权,当前线程暂停执行,直到抢夺线程执行完毕。

yield 暂停当前线程对象,并执行其他线程

 

线程状态

      

 

String类覆写了Object类中的equals方法,该方法用于判断字符串是否相同。

String常量池,在方法区中

StringBuffer是字符串缓冲区,是一个容器。

1.  长度可变化

2.  字节操作多中数据类型

3.  最终会通过toString方法别变成字符串

StringBuilder和StringBuffer类似。1.5版本出现,StringBuffer线程同步,StringBuilder线程不同步。单线程下StringBuilder效率较高,在多线程使用StringBuffer。

 

集合

集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

数组虽然也可以存储对象,但是长度是固定的;集合长度是可变的。

数组中可以存储基本数据类型,集合只能存储对象。

 

集合中存储的都是对象的引用(地址)。

 

迭代器,就是集合的取出元素的方式。

在迭代时,不可以通过集合对象的方法操作集合中的元素

 

/**

 *Conllection

 *  |--List:元素是有序的,元素可以重复。因为该集合体系有索引。

 *     |--ArrayList:底层的数据结构使用的是数组结构,查询速度快,增删慢。线程不同步。

 *     |--LinkedList:链表结构,增删速度快,查询慢

 *     |--Vector:底层是数组数据机构。线程同步。枚举是Vector特有的取出方式。

 *  |--Set:元素无序,元素不可以重复

 *     |--HashSet:哈希表机构

 *         通过元素的两个方法保证元素唯一性,hashcode和equals来完成

 *         如果元素的hashcode值相同,才判断equals是否为true

 *         线程非同步

 *     |--TreeSet

 *         可以对Set集合进行排序

 *         底层数据结构是二叉树

 *         保证元素唯一性依据

 *         TreeSet排序的第一种方式:让元素自身具备比较性。

 *         元素实现Comparable接口,覆盖compareTo方法。(自然顺序,默认顺序)

 *         TreeSet排序的第二种方式:让集合自身具备比较性。

 *         比较器。

 *         定义一个类,实现Comparator接口,覆盖compare方法。

 *

 *         当两种方式都存在时以比较器为主。

 *hashcode+ equals

 *

 *List

 *  特有方法,凡是可以操作角标的方法都是该体系特有的方法。

 */

 

/*

 * Map

 *  |--hashtable 底层是哈希表数据结构,不可以存入nullnull JDK1.0

 *  |--HashMap 底层是数据结构,允许使用null键和null值,效率高JDK1.2

 *  |--TreeMap 底层是二叉树,线程不同步,可以用于给Map集合中的键进行排序

 * Map的两种取出方式:

 * 1.keySet:map所有的键存入到set集合,因为set具备迭代器

 *         以迭代方式取出所有的键,再根据get方法,获取每个键对应的值

 * 2.entrySet:map集合中的映射关系存入到set集合汇总,而这个关系就是Map.entry();

 *

 * Set底层使用Map集合

 */

高效/方便书写/安全

泛型:用于解决安全问题,是一种类型安全机制

       好处:将运行期出现的ClassCastException,转移到编译时期,方便解决问题,让运行时期问题减少,安全。

              避免强制转换

泛型通常使用在集合框架中。

 

泛型类,当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展,现在定义泛型来扩展。泛型类定义的泛型在整个类中有效。

泛型方法,让不同方法可以操作不同类型,而起类型还不确定。

静态方法不可以访问类上定义的泛型。如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。

泛型定义在接口上

泛型限定


---------------------- android培训java培训、期待与您交流!

----------------------详细请查看:http://edu.csdn.net/heima

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值