java基础知识

1.abstract的函数只能在abstract类中

2.函数的重载

同一个类中,多个函数名相同

通过参数列表(参数类型,顺序,数目)区分它们的不同

println就是函数重载,根据不同的参数,选择不同的函数

3.构造函数

函数名与类名相同,没有返回类型,public

系统自动调用,在实例化一个对象是,调用构造函数

不能通过其他方式调用,主要完成初始化工作

补充:类中一定存在构造器;用户没有显示定义构造器,则java回默认分配无参构造器;一旦用户显示定义了构造器,不会再分配无参构造器。

4.静态初始化器

static{
  //语句  
}

特点:类初始化,所属类加入内存时运行;没有返回值,没有参数;其中的变量必须是static型的。

public class Account{
    static int AccountNo = 0;
    public Account(){
        AccountNo++;
        System.out.println("bb");
    }
    static{
        //静态初始化值
        AccountNo=1000;
        System.out.println("aa");
    }
}


public class Example{
    public static void main(String[] args){
        Account a = new Account();
        System.out.println(a.AccountNo);
        Account b = new Account();
        System.out.println(b.AccountNo);
    }
}

结果:
aa
bb
1001
bb
1002

结论:static静态类初始化器早于其他函数执行;只执行一次;在static int AccountNo=0;之后,则在这之后执行。

补充:static静态初始化器是在实例化类时执行。

 5.终结器

protected void finalize(){
    //语句
}

执行条件:当垃圾达到一定数目,且系统不是很忙是,垃圾回收线程会自动完成,所有垃圾对象的内存释放工作。

6.面向对象程序设计

封装性(隐藏细节,权限控制);继承性(类的层次结构);多态性(方法名相同,实现不同)

7.对象的内存模型

栈:存放基本数据类型和对象

堆:存放对象实例

Bird a = new Bird();

java_memory_model

final修饰的类不能被继承

final修饰成员变量,表示不能够改变,可以理解为常量

public_private

类的继承:子类不能继承父类的private方法

 

成员的覆盖:

1)变量的覆盖

  • 子类的成员变量和父类的成员变量同名
  • 变量的覆盖与类型无关,只与变量名相关
  • 当子类执行继承父类的方法时,处理的是父类的成员变量

2)函数的覆盖

  • 子类的成员方法与父类的成员方法的原型相同
  • 函数的覆盖不仅与方法名相关,而且与其参数类型、顺序、数目、返回值相关

 

构造函数的继承

  1. 子类无条件继承父类不含参构造函数
  2. 子类先执行父类的无参构造函数,再执行自己的构造函数
  3. 子类可以通过在自己构造函数中使用super关键字来调用父类的构造函数,该语句必须在子类构造函数的第一个可执行语句。
public class Swan extends Bird{
    public Swan(){
        System.out.println("Swan!");
    }
    public Swan(int num){
        System.out.prinln("Lake!");
    }
}

public class Bird{
    public Bird(){
        System.out.println("Bird!");
    }

}

public class Example{
    public static void main(String[] args){
        Swan a = new Swan();
        Swan b = new Swan(1);
    }
}

结果:
Bird!
Swan!
Bird!
Lake!
public class Swan extends Bird{
    public Swan(){
        super(1,1);
        System.out.println("Swan!");
    }
    public Swan(int num){
        super(1,1);
        System.out.prinln("Lake!");
    }
}

public class Bird{
    public Bird(){
        System.out.println("Bird!");
    }
    public Bird(int c, double s){
        System.out.println("CS!");
    }

}

public class Example{
    public static void main(String[] args){
        Swan a = new Swan();
        Swan b = new Swan(1);
    }
}

结果:
CS!
Swan!
CS!
Lake!

结论:用了super以后,就不再默认先调用父类午餐构造函数了。

null  表示空对象

this 表示当前对象的一个引用(可以理解为别名);可以调用当前对象的方法;可以调用当前对象的构造函数;把当前对象的引用作为参数传给其他方法。

super 表示当前对象的父类对象的一个引用;可以调用当前对象的父类对象的方法;可以调用当前对象的父类对象的构造函数;把当前对象的父类对象的引用作为参数传递给其他方法。

 

多态性

  • 重载
  • 覆盖
  • 父类引用指向子类对象实例:前期绑定(指编译时绑定);后期绑定(运行时绑定)

 

方法重写/覆盖 overriding

  • 一定是在子类和父类之间(与overloading)不同
  • 方法名、参数列表和返回类型都相同
  • 可见范围不能被缩小,要求子类的同名方法的访问权限不能小于父类的方法访问权限
  • 抛出的异常不能被子类放大,即子类方法抛出的异常必须和父类的同名方法抛出的异常相同,或者是父类方法抛出的异常类的子类

 

Comparable接口

所有可以“排序”的类都实现了java.lang.Comparable接口,Comparable接口中只有一个方法。

public int compareTo(Object obj);

返回0表示 this = obj;

返回正数表示 this > obj;

返回负数表示 this<obj.

实现了Comparable接口的类通过实现comparaTo方法从而确定该类对象的排序方式。

 

如何选择数据结构

衡量标准:读的效率和改的效率

Array 读快改慢

Linked 改快读满

Hash 两者之间

 

posted @ 2015-03-06 23:42  jinhuazhe2013  阅读(567)  评论(0编辑  收藏  举报