《Java基础二》

静态代码块:

static {初始化静态变量的语句};当类被载入时,静态代码块被执行,且只执行一次。

单态设计模式:

所谓单体设计模式,就是保证类在虚拟机中只保存一个实例。首先,要实现只有一个实例,必须保证类外不能构造类的实例,即用private修饰。有由于static静态量能保证只被实例化一次。且加final修饰,即声明为:

private static final (变量类型)变量名 = 变量初始化/类初始化方法。

然后建立public方法,供外界调用:

public (type)getinstance (){return ;}实现单态。

nested classes (嵌套类):

所谓嵌套类即内部类,如果在类A中定义了一个类B,则类B为类A所知,却不被A类的外部所知,即从作用域方面说明嵌套类的作用范围。优点:嵌套类可以直接访问和引用其外部类中所有的变量和方法,就像外部内中的其他非static成员功能一样。也可以声明为private或protected类型的访问控制属性。如:

class Outer{private class Inner{}}

外部类中的方法也可以访问内部类的实例。

含有嵌套类的成员变量的访问方法:public class Outer{private int size;public class Inner{private int size; public void fun(int size){++size;//fun方法中的size+1

++this.size;//Inner中的size+1

++Outer.this.size;//Outer中的size+1}}}

嵌套类被外部类的外部访问:

Outer outer = new Outer();

Outer.Inner inner = Outer.new Inner();

inner.方法。

继承:

super--this

由软件复用的思想,Java引入了继承extends.class A{} class B extends A{}

在构造子类时,使用super(参数列表)进行父类构造函数的调用,即为父类构造函数传参。实现子类实例。

如果子类中没有显式的调用父类的构造方法,也没有使用this关键字调用重载的其它构造方法,则在子类产生实例对象时,系统默认调用父类无参数的构造方法,即子类的无参(默认)构造方法可以不包含构造代码(即super();方法可以省略)。

继承下类的转换:

子类可被自动提升为父类,父类通过强制转换可以降级为子类(编译通过,但是程序员必须自己为此带来的后果负责);A instanceof B,A是否是B的子类,A是否实现了接口B.

没有指针,如何“传地址”:

Java有内存自动回收机制(自动运行,一般不必程序员直接进行内存的管理。但可以通过System.gc()方法启动Java垃圾回收器。强迫进行垃圾回收。即内存的释放)。Java这一机制使其摒弃C指针成为了可能(底层JVM实现依然使用了指针,在虚拟机的层面上,程序员不必考虑指针的问题。)。但是在实际处理问题时,需要构建类似指针的功能结构,如方法需要传递地址。这是Java采用传递引用(refrence)的方式。method(Object obj){}//java是完全面向对象的语言(面向类)

方法的重写:

在子类中以相同的方法名、参数列表和返回值的方法进行父类方法的覆盖——方法的覆盖(重写)。也可以通过super关键字制定访问父类的public方法。如:super().method();

final关键字:

在Java中声明类,属性和方法的时候可以使用关键字final。final标记的类不能被继承,即最终类;final标记的方法不能被子类重写;final标记的变量(成员变量或局部变量)即成为常量,只能被赋值一次,且必须在声明的同时显式的赋值,只能在类内部使用,而不能在类的外部被访问。方法中定义的内嵌类只能访问该方法的final类型的局部变量。

抽象类与接口:

抽象类:含有抽象方法的类

当一个类中出现形如:”(返回类型)(参数列表);”的方法时,(注:该形式不同于”(返回类型)(参数列表){}”方法体为空的方法)。表示类中声明了一个方法而并没有实现它。Java要求这样的方法必须添加abstract关键字修饰:

即:abstract (返回类型) (参数列表);

而含有抽象方法的类必须声明为抽象类,Java要求这样的类必须添加abstract关键字修饰:

即:abstract class (类名){}

而抽象类中可以包含非抽象的方法;

要继承一个抽象类:

如:abstract class B {}; class A extends B {}子类

必须重写抽象类中的所有抽象方法,否则子类也必须声明为抽象类:abstract class A extends B {}

接口:类的统一和规范,要想实现该接口,就必选具备接口声明的所有方法,否则就不具备这类接口的功能。

接口:

当一个类中所有的方法都为 abstract (返回类型) (参数列表); 型的抽象方法时,Java提供关键字interface用于修饰这样的结构。声明一个这样的数据类型:

可用形如:interface A{abstract (return type) (arguments list);}这样的方式。Interface类型中的方法默认为public型,成员默认为public static类型,所以书写内部抽象放法时可以省略public, 但在实现接口时,(class D )必须声明内部方法为public访问属性;接口中变量默认为public static final,不可被实现该接口的类访问。可以使用关键字implements(class A implements B{})实例化一个接口对象, A a = new A(){实现抽象方法}

Java是一种单继承的面向对象的语言。所以对类的继承,Java只能是单继承的,但对接口并没有要求。所以Java可以继承多个接口(extends)。

如:interface A{…} interface B extends A, C, D…{}

也可以继承类的同时实现接口的方法。

如:class A extends B implements C {}这是一种对单继承的扩展。

Object类:

Object类Java中所有类的父类,在方法进行对象参数传递时通常需要将形式参数类型定义为Object类型;Object类具有equals方法,通过继承,每个类都会有一个equals方法。使用未被重写的equals方法判断连个类的实例是否相等,结果是没有实际意义的。

多态:

当子类继承或重写父类的方法后,调用父类方法:如传入参数为父类/子类型对象实例,将调用父类的方法;调用子类方法:如传入参数为父类/子类类型对象实例,将分别调用父类方法和子类方法。面向对象语言称之为多态。

应用程序不必为每一个派生类(子类)编写功能调用,只需要对抽象类进行处理,提高程序的复用性。

派生类的功能可以被基类的方法或引用变量调用,向后兼容,可以提高程序的可扩充性和可维护型。

Java异常处理:

throws关键字:

程序员甲编写的类和方法被程序员乙引用,假如被引用的程序会出现异常,方法或类该如何通知使用它的程序员?Java为之引入throws关键字。即:让编译系统检查,确保会出现异常的方法或类在被引用时进行了异常处理。否则编译器将禁止程序通过编译,Java的安全机制。throws抛出异常可以进行层级传递,直到被能处理该异常的catch(){}方法捕获。但是,最迟捕获者为main方法。

异常类:

Java为所有的异常定义了Exception异常基类。所有的异常在定义时必须extends(继承)Exception(异常基类),重写Exception定义的方法或者使用super()方法,调用Exception的构造方法。method()throws异常类{},该异常类可以是异常基类Exception或者是程序员自定义的任何继承于异常基类的异常类。

try{}catch(Exception ex){}finally{}:

try{可能发生异常的语句块}catch(Exception ex(异常类实例)){捕获的异常实例ex的方法}finally{程序善后语句}.finally中的语句会在非极端情况下总是被执行(极端举例:System.exit(status);).而异常处理块之后的语句会在普通情况不被执行(如提前的return()).

自定义异常类的定义及抛出:

class ExceptionA extends Exception{super(…);}//调用父类的构造函数

(访问限定符) (类型) method B throws ExceptionA{if(…){throw ExceptionA;}…}//可以抛出多个异常

捕获异常的技巧:”子集异常在前,母集异常在后”。由异常捕获机制决定。异常捕获”三段式”相当于“switch()case:break;”当前面的异常捕获机制捕获到异常后(异常匹配),后面的catch(){}将不会被执行,而跳转到finally{}语句块或者机制之后的语句之执行。

异常的一些细节:

一个方法被重写时,重写它的方法必须抛出相同的异常或异常的子类;如果父类抛出多个异常,重写方法必须抛出这些异常的一个子集,即不能抛出新的异常。

posted on 2011-02-27 21:13  谁家的猫啊  阅读(248)  评论(0编辑  收藏  举报

导航