首页 > 代码库 > java中三大修饰符

java中三大修饰符

一、static

  1、属性:类变量 定义在类以内,方法以外,全类有效,全类公共一个属性

     类变量与创建对象无关,有默认值0

     使用方式  类名.类变量     System.out.println();

     作用:计数器   生成id

 

      class User{

        static int count;

        public User(){

          count++;

        }

      }

      Class Account{

        long id;

        static long num = 10000L;

        public Account(){

             id = num++;

        }

      }

      public class TestStatic{

        public static void main(String[] args){

          new User();

          new User();

          new User();

        System.out.println(User.cout);

        Account a1 = new Account();

        Account a2 = new Account();

        System.out.println(a1.id);

        System.out.pringln(a2.id);

      }

  }

/*

new Account();           调用构造方法 给id属性赋值   id  10000L   num++  10001L

new Account();     id 10001L  num++   10002L

                    id           10002L num++

*/

 

 2、方法:静态方法

      加了static的普通方法,工具方法,全类共用一个功能

      自己定义静态方法的可能性不大,一般都是使用jdk中写好的静态方法

      使用方式:类名.静态方法名称()    Math.sqrt();

      注意:

      1》覆盖  方法名,返回值,参数表一样。修饰符和父类一样或者比父类的更宽泛

      2》静态方法只能被静态方法覆盖,并且没有多态,

        引用类型是什么类型,调用的就是什么类型的方法

  3、初始化代码块   

    静态初始化代码库

    作用:给静态属性赋值

    类加载时被执行一次,只有一次

    类加载:在虚拟机第一次使用一个类的时候,需要类的相关信息加载到内存中并保存起来的过程

    类加载时,初始化静态属性,执行静态初始化代码块

    类加载时机:

      new对象进行类加载,访问静态成员,子类对象类加载触发父类对象先类加载

二、final  最终的,最后的

  变量:  常量 不能修改变量中存储的值   (基本类型值不能变,引用类型地址不能变)

      final修饰实例变量和类变量时没有默认值,需要手动赋值

      实例变量 构造方法赋值或者初始值

      类变量  初始值或者静态初始化代码块里赋值

      public static final   好伙伴

  方法: 不能被覆盖(可继承,可调用,可重载)

  类:   不能被继承

三、abstract   抽象的(约束多态语法的正确使用)

  类 不能new对象

  方法   没有实现部分  只有声明部分

  注意:有抽象方法的类一定是抽象类

     子类继承抽象类,要么选择把所有的抽象方法都实现,

     如果没有实现相应的抽象方法,要求该类也必须是抽象类

接口

  语法:

   特殊的抽象类,为多态服务,只能声明引用,不能new对象

  关键字 interface

  实现接口(继承抽象类一样) implements

  所有属性 public static final(默认)

  所有方法 public abstract(默认)

  没有构造方法

作用:

  支持多继承

    接口和接口直接多继承  extends

    类和接口直接多继承     implements

    注意:一个类只能继承一个父类,可以实现多个接口(降耦合工具)

标准:(多态)
    接口回调:在定义了接口之后,现有的接口使用者,然后在定义接口的实现者

 

====================================================

===============接口和抽象类的区别============================================================

  1. 抽象类和接口的相同点

      ①.在java语言中,接口和抽象类都不能被实例化,都位于继承树的顶端,用于被其他类实现和继承。

      ②.接口和抽象类都可以包含抽象方法。

      ③.实现接口或继承抽象类的普通子类都必须实现这些抽象方法。

  1. 抽象类和接口的不同点

      1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

      2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

      3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

      4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

      5)接口里不能定义静态方法;抽象类里可以定义静态方法。

      6)接口里不包含构造器,抽象类可以包含构造器。抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。接口里不能定义任何构

        造方法,系统也不会提供默认构造方法。

      7)接口里不能包含初始化块,但抽象类可以包含初始化块。

  1. 应用(适配器模式)

  目的:

    将一个类的接口转换成客户希望的另外一个接口。A d a p t e r 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

  原理:

 

    目标接口(Target):客户所期待的接口。

    需要适配的类(Adaptee):需要适配的类或适配者类。

    适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。

 

    技术分享

 

 

    实例:

       如果一个普通类要实现一个接口,则要覆盖此接口中的所有抽象方法。如果一个接口中定义的方法过多,但是在子类中又用不到这么多的抽象方法 ,则肯定很麻烦,所以此时需

    要一个中间的过度,但是过度类又不希望被直接使用,所以将此过度类定义成抽象类最合适(适配器),并在此抽象类中实现接口中的所有方法,方法体为空,则以后的子类直接继承

    此 抽象类,就可以根据需要选择性的覆盖父类的方法。

  

 

java中三大修饰符