java基础知识整理

时间:2021-02-14 19:42:42

一。构造方法,构造代码块,静态代码块,静态方法的区别:

public class HelloB extends HelloA {
public static void main(String[] args) {
new HelloB();
}
public HelloB() {
System.out.println("构造方法");
}
{
//
System.out.println("构造代码块");
}
static {
System.out.println("静态代码块");
}

}


构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一个代码块。只要对象一建立。就会调用这                   个代码块。

构造函数: 是给与之对应的对象进行初始化。它具有针对性。

静态代码块:静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先
于主方法执行。
静态方法: 被调用时候才执行(静态代码块是自动执行的), 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法

          1.执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。其中静态代码块只执行一次。构造代码块在每次创建对象是都会执行。

          2. 构造代码块的功能:(可以把不同构造方法中相同的共性的东西写在它里面)。例如:比如不论任何机型的电脑都有开机这个功能,此时我们就可以把这个功能定义在构造代码块内。

二:成员变量与静态变量的区别:

1.  成员变量所属于对象。所以也称为实例变量。

     静态变量所属于类。所以也称为类变量。

2.  成员变量存在于堆内存中。

     静态变量存在于方法区中。

3.  成员变量随着对象创建而存在。随着对象被回收而消失。

      静态变量随着类的加载而存在。随着类的消失而消失。

4.  成员变量只能被对象所调用 。

     静态变量可以被对象调用,也可以被类名调用。

三:final关键字特点

1:这个关键字是一个修饰符,可以修饰类,方法,变量。

2:被final修饰的类是一个最终类,不可以被继承。

3:被final修饰的方法是一个最终方法,不可以被覆盖。

4:被final修饰的变量是一个常量,只能赋值一次。

四:抽象类特点  

     1:抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰(可以描述类和方法,不可以描述变量)。

     2:抽象方法只定义方法声明,并不定义方法实现。

     3:抽象类不可以被创建对象(实例化)。

     4:只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。

  注意:抽象类不可以与以下关键字共存。

  1).private :因为一个abstract方法需要被重写,所以不能修饰为private;

  2).final:因为一个abstract方法需要被重写。被final修饰的方法是不能被重写的,所以不能同final共存;   3).static:因为一个abstract方法没有方法体。静态方法需要对方法体执行内容分配空间,
     所以不能同static共存;(abstract 是没有实现的,不能产生对象,而是static是属于类的,类本身是已经存在的对象)
  4).synchronized: 是同步的,然而同步需要具体的操作才能同步,但, abstract是只有声明没有实现的
    (即,使用synchronized关键字的是需要有具体的实现同步的操作的,但是使用abstract
     是只有声明而没有实现的,这样就产生了冲突)
  5).native:他们本身的定义就是冲突的,native声明的方法是移交本地操作系统实现的,
     而abstract是移交子类对象实现的,同 时修饰的话,导致不知道谁实现声明的方法

五:接口(interface).

  1. 接口中的成员都有固定的修饰符。

       成员变量:public static final

       成员方法:public abstract

 2. 接口中有抽象方法,说明接口不可以实例化。接口的子类必须实现了接口中所有的抽象方法后,

    该子类才可以实例化。否则,该子类还是一个抽象类。

 3. 类与类之间存在着继承关系,类与接口中间存在的是实现关系。

     继承用extends ;实现用implements

抽象类和接口的区别:

1:抽象类只能被继承,而且只能单继承。

       接口需要被实现,而且可以多实现。

2:抽象类中可以定义非抽象方法,子类可以直接继承使用。

     接口中都是抽象方法,需要子类去实现。

3:抽象类使用的是 is a 关系。

     接口使用的 like a 关系。

4:抽象类的成员修饰符可以自定义。

     接口中的成员修饰符是固定的。全都是public的。


六.Arraylist与LinkedList与Vector区别:

      ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。

      LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。

      Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。