16. Java面向对象的三个特征与含义

封装

封装:Java将现实中的对象抽象成一个类,并对它的属性和方法进行屏蔽保护,只允许特定的类可以访问,其它的进行隐藏,这个过程叫做封装。

继承

继承:当两个类的关系是is-a的时候,可以考虑使用继承。它是一种层次结构,类的重用方式。当一个新类从现有类中派生出来,这个过程叫做继承。新类继承了原有类的属性和方法。缺点是继承树过于庞大之后,会导致子类继承后负担重,很多不需要的成员变量也被继承下来,整个类结构过于臃肿。

多态

多态:允许不同类的对象对同一消息做出不同的响应。灵活抽象行为共享的优势。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。

多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。

class A {
    public void show(){
        System.out.println("This is A.");
    }
}

class B extends A{
    public void show(){
        System.out.println("This is B.");
    }
}

class C extends A{
    public void show(){
        System.out.println("This is C.");
    }
}

class Main {
    public static void main(String[] args) {
        A a = new A();
        a.show();
        A b = new B();
        b.show();
        A c = new C();
        c.show(); 
    }
}

输出

This is A.
This is B.
This is C.
2016/9/29 11:56 上午 posted in  Java

15. Exception与Error包结构。常见的OOM和SOF

Java提供了两种错误的异常,分别为Exception和Error,它们继承自共同的父类Throwable。

Error

Error表示程序在运行期间出现了非常严重的错误,且这个错误是不可恢复的。将导致程序终止执行。如OutOfMemoryError、ThreadDeath。错误发生时,JVM一般会终止程序的运行。

Exception

Exception表示可恢复的异常,编译可以捕获。

1.检查异常(checked exception)
编译阶段发生,编译器强制在程序里捕获这类异常,放入try代码块中,把对异常的处理代码放到catch块中。常见的有IOException和SQLException。一般在以下情况中使用:
1)异常的发生并不导致程序出错,进行处理后可以继续执行后续的操作。
2)程序依赖于不可靠的外部条件,如IO。

2.运行时异常(runtime exception)
编译器不强制进行捕获。若不捕获的话,由JVM来处理。常见的运行时异常包括NullPointerException、ClassCastException、ArrayIndexOutOfBoundsException、StoreException、BufferOverflowException、ArithmeticException。

出现运行时异常之后,系统会将异常一直往上次抛出,知道遇到处理代码位置。若没有处理代码,则抛到最上层。多线程run()方法抛出,线程终止,或单线程main()方法抛出,整个程序退出。

2016/9/29 10:8 上午 posted in  Java

14. try catch finally,try里有return,finally还执行么

finally中的内容一定会执行的

try{
    return 0;
} catch(Exception e){
    return 1;
} finally{
    return 2;
}

finally中的return会覆盖try,catch中的return,所以最后返回的是finally中的值

class Main{
    public static String lem(){
        System.out.println("lem");
        return "return from lem";
    }
    
    public static String foo(){
        int x = 0;
        int y = 5;
        try {
            System.out.println("start try");
            int b = y/x;
            System.out.println("end try");
            return "return from try";
        } catch (Exception e) {
            System.out.println("catch");
            return lem() + "| return from catch";
        } finally {
            System.out.println("finally");
            return "return from finally";
        }
    }
    
    public static void main(String[] args) {
        String v = foo();
        
        System.out.println(v);
    }
}

输出:

start try
catch
lem
finally
return from finally
2016/9/28 17:49 下午 posted in  Java