package com.cityhero.test; public class ThreeModifier { //static静态的 // 概念:static可以修饰方法和属性,被static修的方法和属性叫静态方法/静态属性,被该类的所有对象共享 // 使用:类名.方法/属性 对象.方法/属性(编译器会给出警告,告诉你这是一个静态的方法/属性,可以直接类名.方法/属性使用) // static还可以修饰静态代码块,在类加载时,和static修饰的属性/或方法,按照定义的先后顺序,依次进行初始化工作 // 用途:例如配置文件读取,可以在类加载时执行一次就OK了,提高性能 //类加载 jvm在第一次使用某个类时,会到classpath下寻找对应的.class文件,读取并保存起来的过程.类加载的时机:new对象,new子类对象,调用static成员 // 类加载以后,其实是把类的相关信息保存在方法区,包括类的全限定名,方法和方法描述符,字段和字段描述符 // 类的class访问标志,属性信息等等这个类的信息存储起来.当我们new一个对象的时候,jvm为对象分配的内存空间实际有很多都是指向方法区的引用 // 在class文件结构中叫常量池的引用,后面会详细讲解. //final最终的 // final修饰的变量只能被赋值一次,也叫常量 // final修饰的类不能被继承,如果类被final修饰,则里面的方法都是final的 // 自然final修饰的方法不能被覆盖 // final修饰的类变量,可以在static静态代码块中赋值一次,或者初始化static属性时赋值 // final修饰的实例变量,可以在构造方法中赋值一次,且需要保证所有的构造方法都赋值了,jvm不会为两者赋默认值 //abstract抽象的 // abstract可以修饰方法,类 // 强制使用多态,不能实例化,可以声明引用 // 子类继承抽象类时,必须实现所有的抽象方法,除非子类又是抽象的 //interface接口 // 接口是特殊的抽象类 // 类时单继承,接口是多继承 // 都不可以实例化 // 接口的方法都是抽象的 // .... }