打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java中的static、final、abstract和interface
userphoto

2013.10.19

关注

修饰符static: 把对象相关的变成类相关的,它可以修饰属性、方法、代码块和内部类
static修饰属性(类变量):
   那么这个属性就可以用" 类名.属性名 "来访问,也就是使这个属性成为本类的类变量,为本类对象所共享。
   类加载的过程,类本身也是保存在文件中(字节码文件保存着类的信息)的,java会通过I/O流把类的文件读入JVM(java虚拟机),这个过程称为类的加载。JVM会通过类路径(CLASSPATH)来找字节码文件。需要的时候才会进行类加载,生成对象时是先加载后构造
   类变量,会在加载时自动初始化,初始化规则和实例变量相同。
   注意:
    类中的实例变量是在创建对象时被初始化的
    static修饰的属性,是在类加载时被创建并进行初始化,类加载的过程只进行一次,也就是类变量只会被创建一次。
   
static修饰方法(静态方法):
   会使这个方法成为整个类所公有的方法,可以用" 类名.方法名 "访问。
   static修饰的方法,不能直接访问本类中的非静态成员,但本类的非静态方法可以访问本类的静态成员。
   在静态方法中不能出现this关键字。
   父类中是静态方法,子类中不能覆盖为非静态方法,在符合覆盖规则的前提下,在父子类中,父类中的静态方法可以被子类中的静态方法覆盖,但是没有多态。(在使用对象调用静态方法时其实是调用编译时类型的静态方法)
   java中的main方法必须写成static的原因:在类加载时无法创建对象,而静态方法可以不通过对象调用,所以在类加载时就可以通过main方法入口来运行程序。
  
static修饰初始代码块:
   这时这个初始代码块就叫做静态初始代码块,这个代码块只在类加载时被执行一次。
   可以用静态初始代码块初始化一个类。
   动态初始代码块,写在类体中的“{}”,这个代码块是在生成对象时运行,这种代码块叫动态初始代码块。
  
单例设计模式:
一个类只允许有一个对象,保证所有引用的对象都是同一个对象。
因为只允许存在一个对象,则不允许在外面直接new出新的对象,所以应该把构造器设为private,。
在类内定义一个公开的静态方法,让使用者进行调用,通过该方法去获得一个实例。
例:
   public calss Singleton{
    private static Singleton s;
    private Singleton(){}
    public static Singleton newInstance(){
     if ( s == null)
      s = new Singleton();
     return s;
    }
   }
  
修饰符final:不允许改变,可以修饰变量、方法、类
final修饰变量:
   被fianl修饰的变量就会变成常量,一旦赋值不能改变
   常量可以在初始化时直接赋值,也可以在构造方法里赋值,只能在这两种方法里二选一,不能不为常量赋值
   常量不会有默认初始值
   锁定栈,使栈中的数据不可以改变
   静态常量只能在初始化时直接赋值
  
final修饰方法:
   被final修饰的方法将不能被其子类覆盖,保持方法的稳定不能被覆盖

final修饰类:
   被final修饰的类将不能被继承
   final类中的方法也都是final的

注意:
   final不能用来修饰构造方法
  
访问权限控制:
private:
   本类内部可以访问
   不能继承到子类
default:
   本类内部可以访问,同包其他类也可以访问。
   同包可继承
protected:
   本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问。
   能继承到子类
public:
   任何地方都可以访问
   能继承到子类

修饰符abstract:抽象的,定义框架不去实现,可以修饰类和方法
abstract修饰类:
   会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型
   抽象类就相当于一个类的半成品,需要子类继承并覆盖其中的抽象方法,这时子类才又创建实例的能力,如果子类没有实现父类的抽象方法,那么子类也要为抽象类。

abstract修饰方法:
   会使这个方法变成抽象方法,也就是只有声明而没有实现,实现部分以";"代替,需要子类继承实现。
   抽象方法代表了某种标准,定义标准,定义功能,在子类中去实现功能(子类继承了父类并需要给出从父类继承的抽象方法的实现)。
   方法一时间想不到怎么被实现,或有意要子类去实现而定义某种标准,这个方法可以被定义为抽象。

注意:
   有抽象方法的类一定是抽象类。但是抽象类中不一定都是抽象方法,也可以全是具体方法。

接口(interface):
接口的定义:接口从本质上说是一种特殊的抽象类。
   关键字interface。
   在接口中,所有的方法为公开、抽象的方法:public abstract
   在接口中,所有的属性都是公开、静态的常量:public static final
   接口与接口之间可以多继承,用extends,多个之间用逗号隔开。
   接口中没有构造方法,不能用“new 接口名”来实例化一个接口,但可以声明一个接口。

接口的实现:
   关键字implements
   一个类实现一个接口必须实现接口中所有的方法,否则其为抽象类,并且在实现类中的方法要加上public(不能省略)。
    类中的默认修饰符:default。
    接口中的默认修饰符:public。
   一个类除了继承另一个类外(只能继承一个类),还可以实现多个接口(接口之间用逗号分隔)。

接口的作用:
   间接实现多继承:用接口来实现多继承并不会增加类关系的复杂度。因为接口不是类,与类不在一个层次上,是在类的基础上进行再次抽象。
   接口可以抽象出次要类型,分出主、次关系类型,符合看世界的一般方法。
   接口隔离,与封装性有关。一个对象都有多个方面,可以只展示其中几个方面,其他的都隐藏。因此可以看为“更高层次的封装”,把一个大接口做成若干个小接口。
   通过接口制定标准(最重要的作用)
    接口:制定标准。
    接口的调用者:使用标准。
    接口的实现类:实现标准。
      解耦合作用:把使用标准和实现标准分开,使得标准的制定者和实现者解除偶合关系,具有极强的可移植性
   例:sun公司提供一套访问数据库的接口(标准),java程序员访问数据库时针对数据库接口编程。接口由各个数据库厂商负责实现。
      
接口编程的原则
   尽量针对接口编程(能用接口就尽量用接口)
   接口隔离原则(用若干个小接口取代一个大接口)
  
注意:
   接口中没有构造器,也没有main方法

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
​疯狂Java面试题
《深入理解JVM(5)——虚拟机类加载机制》
Java基础知识的27个点
java中的修饰符static与静态方法final的用法
Java面试宝典2015版(绝对值得收藏超长版)(一)
abstract class抽象类和interface接口有什么区别?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服