一。构造方法,构造代码块,静态代码块,静态方法的区别:
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;
所以不能同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区别:
LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。
Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。