面向对象的三大特征: 封装、继承、 多态
一、面向对象高级: 修饰符:
static 1. 修饰变量(属性);2修饰方法;3修饰代码块。
覆盖overriding 不适用于静态方法。
当static 修饰代码块是(代码块要在类的任何一个方法之外),那么这个代码块被装载进虚拟机生成对象的时候可被装载一次,以后再也不执行了。
一般静态代码块用来初始化静态成员。
static 通常用于Singleton 模式开发。
final 可以修饰类、属性、方法。
当用final 修饰类的时候,此类不可以被继承。即final 类没有子类。
当用final修饰一个属性(变量)的时候,此时的属性成为常量。
public static final 对常量进行标示。
如果一个方法前有修饰符为 private or static ,则系统会自动在前面加上final。 即private和static方法默认均为final 方法。
abstract (抽象)可以修饰类、方法。
1. 如果一个类设置为 abstract, 则此类必须被继承,此类不可生成对象。
abstract 虽然不能生成对象,但可以声明,作为编译时的类型,但不能作为运行时类型。
Final 和 abstract 永远不会同时出现。
二、java 的核心概念: 接口(interface)
接口与类属于同一层次,实际上,接口是一种特殊的抽象类。
public interface 公开接口
与类相似,一个文件只能有一个public接口,且与文件名相同。
在一个文件中不可以同时定义一个public接口和一个public 类。
一个接口中,所有的方法为 public abstract; 所有属性 public static final 常量
一个类实现一个接口格式:
class A implements IA {
}
一个了实现接口,相当于它继承一个抽象类。
类必须实现接口中的方法,否则其为 抽象类。
注意:
1. 一个类除继承另外一个类,还可以实现接口;
2.一个类可以实现多个接口,中间用“,”隔开
3.接口和接口之间可以定义继承关系,并且接口之间允许实现多继承。
interface IC extends IA, IB{}
Objec 类,是java体系中所有类的父类。
(1)、finalize() 当一个对象被垃圾回收的时候调用的方法。
(2)、toString() 利用字符串表表示对象。
(3)、 equal()
Exception(例外/异常)
java 将所有的错误封装成一个对象,其根父类为Throwable
的子类 为 : Error 和 Exception
Exception 的子类: Runtime exception(未检查异常)、非Runtime Exceptio你(已检查异常)
定义一个例外类: 继承 exception or RuntimeException
三、 集合 Collection
java.util.*
集合框架接口的分类: Collection interface、 map interfact
collection (List 接口, Set 接口——〉SortedSet 接口)
Map 接口——〉SortedMap 接口
java 中所有与集合有关的实现类都是这六个接口的实现类。
1. Collection 接口: 集合中每一个元素为一个对象,这个接口将这些对象组织在一起,形成一维结构。
2. List 接口: 元素按一定的顺序组织,List 接口中的数据可以重复。
ArrayList :动态可变数据,数据查询速度快,增删速度慢
LinkedList: 动态可变数据,查询效率低,增删快。 功能用于 堆栈 和队列
Vector : 与ArrayList 相似,但 Vector 是重量级组件,使用消耗资源较多。
结论: 在考虑并发的情况下用Vector (保证线程安全)
不并发时用ArrayList(不保证线程安全)
3. Set 接口: 元素无序,且不可重复。
Set——HashSet 实现类
遍历一个Set 的方法只有一个: 迭代器(interator)
HashSet : 元素无序,且不重复
HashSet 底层用数组;
结论: 如将自定义类用hashSet来添加对象,一定要覆盖hashCode 和equals();
覆盖原则:保证两个对象的hashcode 返回的相同的数,而且equals() 返回true
4.SortedSet : 会按照数字将元素排序, 为“可排序集合”。
SortedSet 的实现类 TreeSet: 作用自动为添加到TreeSet中的元素排序。
TreeSet不需要实现HashCode(), equals()
只要实现compareable 和 compareTo() 即可实现过滤功能。
4. Map :Key-value 是用一个不可重复的key集合对应可以重复的value集合。(eg:字典)
具体细节内容见(java 学习笔记[必看经典])
四、线程
线程有两种实现方式
1. 继承 Thread 类
class MyThread extends Thread{
public void run() {
}
}
public class TestThread {
main() {
Thread t = new MyThread();
t.start();
}
}
2. 实现 Runnable 接口
Class MyThread implement Runnable {
public void run() {
Runnable r = new MyThread();
Thread t = new Thread();
t.start();
}
}
实现同步 synchronized 同步
五、I/O 流
1. File 类,(java.io.*)
File f = new File("11.txt"); // 创建一个名为 11.txt 的文件对象
f.CreateNewFile(); // 真正地创建文件
f.CreateMkdir(); 创建目录
f.delete(); // 删除文件
f.deleteOnExit(); // 在进程退出的时候删除文件,这样的操作通常用在临时文件的删除。
List() : 显示文件名(相对路径)
ListFiles ():返回Files类型数组, 可以用getName() 来访问到文件名。
使用 isDirectory() 和 isFile() 来判断究竟是文件还是目录。
2. 使用I/O流来访问文件file 的内容。
Jvm 与外界通过数据通道进行数据交换。
分类:
按流分为 输入流和输出流
按传输单位分 字节流和字符流
还可以分为: 节点流和过滤流
节点流: 负责数据源和程序之间建立连接
过滤流: 用于给节点增加功能。过滤流的构造方式是以其他流位参数构造(这样的设计模式称为装饰模式)
字节输入流: io 包中的InputStream 为所有字节输入流的父类。
Int read(); 读入一个字节(每次一个);
read(byte[]) 返回值可以表示有效数 ,返回值-1, 表示结束。
字节流输出流: io包中的 OutPutStream 为所有字节输出流的父类。
write 和 read 对应。
/**
* get stream from file for db
* @param fileName path of file
* @return byte[] 's info
*/
public static byte[] getStreamForDB(String fileName) {
File file = new File(fileName);
int fileLength = (int) file.length();
byte[] bufferArray = new byte[fileLength];
FileInputStream inputStream;
try {
inputStream = new FileInputStream(file);
try {
inputStream.read(bufferArray, 0, bufferArray.length);
inputStream.close();
} catch (IOException exception) {
log.debug("I/O Exception when reading or closeing: "
+ exception.toString());
throw new BusinessException(exception.toString());
}
} catch (FileNotFoundException exception) {
log.debug("File not find: " + exception.toString());
throw new BusinessException(exception.toString());
}
return bufferArray;
}
/**
* get File from db
* @param fileName path of file
* @param stream in db
* @return File type's file
*/
public static File getFileFromDB(byte[] bufferArray, String fileName) {
File file = new File(fileName);
FileOutputStream outputStream;
try {
outputStream = new FileOutputStream(file);
outputStream.write(bufferArray, 0, bufferArray.length);
outputStream.close();
} catch (Exception e) {
throw new BusinessException(e.toString());
}
return file;
}
六、网络编程
略。