static关键字解析
1、static方法:
又叫静态方法,不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为就没有可以依附的对象。因此在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。但是在非静态成员方法中是可以访问静态成员方法/变量的。若想在不创建对象的情况下调用某个方法,就可以将这个方法设置为static。
2、 static变量:
也称静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。static成员变量的初始化顺序按照定义的顺序进行初始化。
3、static代码块
静态代码块可优化程序性能。static代码块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。可优化程序性能原因是因为它的特性:只会在类加载的时候执行一次。
注意事项:
1、static关键字不会改变变量和方法的访问权限;
2、静态成员变量虽然独立于对象,但是不代表不可以通过对象去访问,所有的静态方法和静态变量是可以通过对象访问 (只要访问权限足够);
3、 static是不允许用来修饰局部变量。
abstract关键字解析
1、abstract类:
1)不可被实例化,抽象类只能声明引用,不能创建对象 ;
2)抽象类有构造器 (凡是类都有构造器) ;
2、abstract方法(只声明,不实现):
1)格式:没方法体,如:public abstract void hello();
2)抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法 ;
3)若子类继承抽象类,并重写了所有的抽象方法,此类就是一个可被实例化的实体类;
4)若子类继承抽象类,没有重写所有的抽象方法,意味着此类中仍有抽象方法,那么此类必须声明为抽象的。
注意事项:
1、有抽象方法的类一定是抽象类,但是抽象类中不一定要有抽象方法,抽象类中可以有构造方法;
2、子类继承抽象类,如果子类不想成为抽象类,就必须实现父类中声明的所有抽象方法。
interface关键字解析
interface类(接口)特点:
- 接口中所有的方法都是抽象的且abstract关键字是可以省略的;
- 所有的方法都是public修饰,也可以省略;
- 接口内的成员变量,只能是public static final 类型的(原因:多实现的、OCP原则)。
- 接口不能有构造方法。
- 接口中只有两种类型的成员,一种是public abstract 类型的方法,一种是public static final 类型的变量。
abstract与interface关键字的区别:
要点 | abstract(抽象类) | interface(接口类) | |
不同点 | 构造方法 | 可以有 | 不能有 |
普通成员变量 | 可以有 | 不能有 | |
普通方法 | 可以有 | 必须是抽象的 | |
访问修饰符 | public,protected | public | |
静态方法 | 可以有 | 不能有 | |
静态成员变量访问类型 | 任意 | 必须是public static final | |
实现/继承的个数 | 只能继承一个 | 可以实现多个 | |
相同点 | 都有抽象方法,抽象类中可以没有抽象方法 | ||
只能用来继承/实现 | |||
不能使用new关键字创建对象 |