用来修饰类成员(方法、构造器、成员变量)
修饰符本类本包本包下的子类不同包、非子类public√√√√protected√√√ default(默认)√√ private(私有的)√注:
1)、访问控制修饰符可以用来修饰类 2)、修饰外部类,只能用public或默认(default) 3)、修饰内部类,都可以用
static,用来修饰类方法和类变量。
final,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract,用来创建抽象类和抽象方法。
synchronized和volatile主要用于线程的编程。
static变量是属于类的变量,存储在方法区中,而不再堆中,一个类的static变量只有“一份”,不随对象的创建而创建
静态变量:static修饰的成员变量
static只能修饰成员变量,不能修饰局部变量
普通成员变量是属于对象的,所以也把这些成员变量叫做实例变量
因为static变量是属于类,不是属于对象,所以不会随着对象的创建而改变,调用static变量,通过类名直接调用
静态方法:static修饰的方法
调用成员方法时,会传递一个隐式的参数(调用这个方法的对象),在成员方法中就存在了这个对象,用this表示,所以在一个类中,在成员方法中可以直接调用其他成员方法。
成员方法是属于对象的,要调用必须通过对象调用,调用static修饰的静态方法时,不会像此方法传递隐式的对象,所以在静态方法中,不可以使用this,而是通过类名直接调用方法
静态代码块:static修饰的代码块
静态代码块属于类,在类加载期间执行(在进入main方法之前),且只执行一次
静态代码块通常用来在软件中加载静态资源。静态资源:可以供多个对象共用的资源
注:
1)、成员变量的默认初始化会随着类的加载而执行,且只执行一次。
2)、如果要调用一个类的普通方法:需要先创建对象,在通过对象调用这个方法
3)、静态方法不能调用非静态方法,因为静态方法内部没有this、super
4)、非静态方法叫做实例方法,非静态的成员变量叫做实例变量
final修饰变量: final int a = 1; //a的值不可变,相当于一个静态常量final修饰方法: public final void test(){} //方法不可变,也就是方法不能被重写final修饰类: public final class 类名{} //类不能被改变,就是说类不能被继承
注:
static final 修饰静态常量:是属于类的,会在编译期被替代
命名规则:变量单词全部大写,多个但词之间用下划线隔开
方法前+ abstract:表名这个方法值声明,不实现(没有方法体)。
例:public abstract void step();
没有方法体和方法体为空是不一样的
抽象类是基于父类的,抽象类一定是一个父类,为子类提供公共的模板(数据,普通方法)(子类共有的属性)
如果一个类中有抽象方法,这个类一定是抽象类。
抽象:abstract
可以修饰方法,类
抽象类中有构造器,不可以实例化
abstract和final不可以同时修饰一个类,即不可以用final修饰一个抽象类
如果一个类继承了抽象类,那么此类必须对父类中的所有抽象方法进行重写,否则该子类也会变成一个抽象类
接口:interface 接口中的成员:抽象方法,没有普通方法;静态常量 接口中没有构造器 语法: public interface 接口名{ //静态常量 //抽象方法 } 在接口中定义的常量,默认提供public static final 修饰符 在接口中的方法,默认提供了public abstract 修饰符
实现方式:要有类对接口中的抽象方法进行重写(实现).
关键字implements: 类 implements 接口:这个类叫做实现类 表示:类会对接口中的所有抽象类进行实现(重写)。 如果类对接口中的抽象方法没有进行全部重写,这个类就变成了抽象类 --- 类似于抽象类
类的继承特点:单继承 接口的特点:多实现,一个类可以实现多个接口 A implements B,C{}
接口的继承: interface A B C A extends B B extends C 接口的继承可以是多继承 A extends B,C
接口当中的多继承,必须它们全是接口 A:抽象类 B,C:接口 A extends B,C -- ×
接口的实现,类的继承可以同时出现 必须是先继承,再实现(继承在前,实现在后)
类A,抽象类B,接口C,D A extends B implements C A extends B implements C,D
接口,抽象类不能实例化。
接口的继承: interface A B C A extends B B extends C 接口的继承可以是多继承 A extends B,C
接口当中的多继承,必须它们全是接口 A:抽象类 B,C:接口 A extends B,C -- ×
接口的实现,类的继承可以同时出现 必须是先继承,再实现(继承在前,实现在后)
类A,抽象类B,接口C,D A extends B implements C A extends B implements C,D
接口,抽象类不能实例化。
接口与抽象类的区别: 1、抽象类中可以有普通方法,但是接口中只能有抽象方法 2、抽象类中可以有常量,可以有变量,但是接口中只能有静态常量 3、抽象类中有构造方法,接口中没有构造方法 4、接口可以多继承,但是类的继承只能是单继承