`

oop 的基础知识

阅读更多

面向对象的三大特征: 封装、继承、 多态

 

一、面向对象高级: 修饰符:

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;
 }

 

六、网络编程

略。

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics