- 面向对象
-
封装:
(1)类:对一类事物抽象所得到的一个概念
(2)对象:一个具体的事物
(3)构造函数:不能有返回;值方法名与类名相同;可以有多个;默认生成无参无方法体无返回值的构造函数,自己一旦定义,编译器将不再生成默认的构造函数;生成一个类对象是能且只能调用其中的一个构造函数;
(4)static:凡是static修饰的成员都是静态成员;静态成员都是属于类的;非静态的可以访问静态的;静态的不可以访问非静态的;通过类名只能访问一个类中的非私有静态成员;私有静态成员也不可以通过对象名访问;
(5)this:非静态方法默认都含有一个this指针;this代表正在调用本方法的对象class A { //每一个对象都有自己的j private static int i; int j; public static void g() { } //所有对象共用f(),用this来找到正在调用本方法的对象 public void f() { } }
(6)final:
修饰类:代表该类不能被继承
修饰方法:代表该方法可以被继承但不能被重写
修饰属性:表示该属性能且只能被赋一次值,赋值方式有两种,赋值时只能选择一种:1.定义的同时显示的初始化;2.构造函数中初始化class A{ //private final int i=10;或者下面那种初始化 public A(int j){ i=j; } }
(7)函数重载:同名不同参;返回值不能作为是否构成函数重载的依据
-
继承:
(1)定义:子类继承了父类的成员
(2)注意的问题:非私有成员才可以被子类继承;
(3)重写:
重写方法必须和被重写方法具有相同的方法名称、参数列表、返回值类型;重写方法的访问权限要大于等于被重写方法 -
多态:
(1)定义:同一代码可以随上下文的不同而执行不同的操作,俗称多态,即一个父类的引用它既可以指向父类对象也可以指向子类对象,它可以根据当前时刻指向的不同,自动调用不同对象的方法class A{ public void f(){ } } class B{ public void f(A aa){ aa.f(); } } ```
(2)注意:通过父类的引用只能访问子类从父类继承过来的成员;只有在父类的引用本身指向的就是一个子类对象时,我们才可以把父类的引用强制转化为子类的引用
class A{
public void f(){
}
}
class B extends A{
public void f(A aa){
}
public void g(A aa){
}
}
A aa=new B();
B bb=new B();
aa.f();
aa.g();//报错,通过父类的引用只能访问子类从父类那里继承过来的方法,
//不能访问子类所特有的
aa=bb;
bb=(B)aa;//父类强转子类
(3)相关知识:
- 抽象类:一个抽象类通常都含有抽象方法;只重写了抽象类部分抽象方法的类也必须要被标记为abstract不可以定义抽象类对象,但是抽象类可以实现多态
- 接口:接口中的方法都是public abstract;不可以定义接口对象,但接口却可以实现多态;重写接口方法时public不能省;
举例:
线程的创建
事件的处理
容器的组织方式
serializable接口(空接口,代表这个对象可以被序列化)
- 异常:运行时的错误
(1)分类:
- 无法处理的错误;
- 可以处理的异常:分为必须处理的异常(是Exception子类但不是RuntimeException的子类)和可处理可不处理的异常(是RuntimeException的子类)
(2)注意:
- finally{…}一定会执行,顺序不可颠倒,先捕获子类异常,再捕获父类异常,重写方法抛出异常的范围不能大于被重写方法抛出异常的范围,假设f方法抛出了A异常,则f方法有两种方式处理A异常:
1)throws A
2)try{…}catch() {…}
- 线程:
- 定义:一个程序运行时的不同执行路径
- 创建线程的方式:
1)继承Thread类
2)实现Runnable接口 - 线程的同步
1)多个线程操作同一资源,并且要求这些操作中的若干个操作不能被中断,这时就需要考虑线程同步的问题;
2)线程同步是通过synchronized来实现
3)synchronized可以修饰两种:
代码块;
方法(默认锁定的是this);
4)示例:买票 - 线程的通信
1)有时多个线程只有彼此相互协作才可以完成某个功能,这是就需要线程的通信
2)实现方式:wait 和 notify()/notifyAll()
3)示例:生产和消费
- 内部类:
- 一个类内部定义的类叫内部类,内部类的方法可以访向外部类的所有成员,外部类的方法不可以直接访问内部类的任何成员;
- 一定要明白产生内部类的原因:如果一个类A要使用B类的所有成员,并且A类不需要被除B以外的其他类访问,则我们可以把A定义成B的内部类;
- 因此几乎不存在直接生成内部类对象的问题,因此几乎不存在外部类需要访问内部类成员的问题
-
匿名类:匿名类是内部类的一种极端表现形式,匿名类可以访问外部类的所有成员和包裹本匿名类方法中的的final类型的局部变量
-
IO流
- 定义:如果一个类是用来完成程序和设备之间的数据传输,则这个类有一个特殊的称谓叫流
- 流和类的关系流一定是类,但类不一定是流
- 分类: 输入流 输出流
字节流 字符流
原始流 包裹流 - 常用流介绍
1)四大基本抽象流
InputStream OutputStream
Reader Writer
2)字节流和字符流的区别:字节流可以处理所有格式的文件,字符流只能处理文本格式的文件
3)文件流
FileInputStream File0utputStream
FileWriter FileReader
4)缓冲流
BufferedInputStream BufferedOutputStream
BufferedReader BufferedWriter
缓冲流可以提高数据传输的速度
5)转化流
OutputStreamWriter InputStreamReader
例:如何将键盘上的字符组成字符中字节赋给String对象;编程实现把用户从键盘输入的字符保存到一个String对象中
6)数据流
DataInputStream Data0utputStream
数据流可以把基本类型数据的二进制直接读入或写出;
例:编程实现将long类型数据写入byte数组然后再从byte数组中把该数据读出
7)Print流
PrintStream PrintWriter
Print流可以把基本类型数据格式化后的字符串输出
8)0bject流
ObjectOutputStream ObjectInputStream
0bject流可以把一个对象直接写入或读出
- 容器
- 定义:如果一个类是专门用来存放其他类对象的,则这个类有另外一个特殊的名称叫做容器
- 容器和类的关系:容器一定是类,但类不一定是容器
- Collection 接口
1)Set 接口:无序,不允许重复 实现类:TreeSet HashSet
2)List 接口:有序,允许重复 实现类:ArrayList LinkedList - Map 接口
1)定义:既保存数据本身,也保存数据的主键的一种接口
2)实现类:HashMap TreeMap - hashCode()和equals()方法:详见API
- Collections类
该类提供了对Collection接口实现类的排序,倒置、查找等功能 - Comparable接口
通过该接口的方法可以制订出对象之间比较的标准;凡是需要进行对象的比较排序的场合均可以考虑实现该接口 - Iterator接口
利用该接口提供的方法我们可以遍历所有容器中的元素