zoukankan      html  css  js  c++  java
  • static & final & public & private

    final的用法:

    1、final类

    final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就设计为final类。 final方法不能被子类的方法覆盖,但可以被继承。

    2、final方法

    如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
    使用final方法的原因有二:
    第一、把方法锁定,防止任何继承类修改它的意义和实现。
    第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

    3、final变量(常量)    (java中的变量分为成员变量和局部变量,成员变量类似于C语言中的全局变量,可以被其他的类引用,除非使用了private关键字,则只能在类的方法中被调用。)

    (成员变量分为实例变量和静态变量,实例变量没有被static修饰,是与对象相挂钩,使用时必须先声明一个对象,然后由对象调用,而被static修饰的静态成员变量则不需要,直接使用类即可调用。static可以修饰类,修饰方法,修饰成员变量,但是方法里的变量或者方法的参数不可以使用static修饰)

    局部变量不允许范围内定义两个同名变量,但是却允许同时存在同名的局部变量和实例变量,此时,当在定义局部变量的方法内部,局部变量将会覆盖实例变量。

    用final修饰的成员变量表示常量,只能被赋值一次,赋值后值无法改变!并且如果使用final声明成员变量时必须在定义的时候同时附上初值,否则编译出错。
    final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
    从下面的例子中可以看出,一旦给final变量初值后,值就不能再改变了。
    另外,final变量定义的时候,可以先声明,而不给初值,这种变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是,final空白在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。

    4、final参数

    当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
    注:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
    final不能用于修饰构造方法。
     
    static的用法:
     
    Java中用static修饰符修饰的方法被称为静态方法,本文我们来看看Java中static静态方法的用法特点。Java的static静态方法是属于整个类的类方法。不用static修饰符限定的方法,是属于某个具体类对象的方法。static方法使用特点如下: 

      (1)引用这个方法时,可以使用对象名做前缀,也可以使用类名做前缀; 

     (2)static方法不能被覆盖,也就是说,这个类的子类,不能有相同名、相同参数的方法; 

     (3)static方法只能访问static方法,不能访问非static方法,但非static方法可以访问static方法; 

     (4)static方法只能访问static数据成员,不能访问非static数据成员,但非static方法可以访问static数据成员; 

     (5)main方法是静态方法。在Java的每个Application程序中,都必须有且只能有一个main方法,它是Application程序运行的入口点。 

     (6)static方法是属于整个类的,它在内存中的代码段将随着类的定义而分配和装载。而非static的方法是属于某个对象的方法,在这个对象创建时,在对象的内存中拥有这个方法的专用代码段;
     
    static还可以用来修饰类,但是只能修饰一个内部类,普通类是不允许声明为静态的,只有内部类才可以。被static修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。实名内部类若包含静态成员方法,则该类必须声明为静态类内部类;若非静态实名内部类包含静态成员变量(即静态成员域),则该静态成员变量还需声明为final属性。

    java类修饰词和内部类:
    控制属性:
                      同一类内      同一包内      子类       所有类
    public             可                可           可           可
    protected       可                 可          可           不可
    default            可                可         不可         不可
    private            可              不可         不可        不可

    注:当成员声明为private时,内部类也不可访问外部类的私有成员。

    abstract: 1.修饰类、接口、成员方法。不管是否被abstract修饰,接口总是有抽象属性。 2.若修饰类,则该类不能生产实例。 3.抽象方法只能在抽象类或接口中定义,不能再飞抽象类中定义;抽象方法只被定义而不实现,即不含方法体。 4.抽象类的子类和实习接口的类:若为非抽象类,则在定义时必须覆盖其父类或接口内的所有抽象方法;若为抽象类,则可以覆盖部分或者不覆盖。

    fianl: 1.修饰非抽象的类、类或接口的成员域和类的非抽象的成员方法。 2.若修饰类,则该类不能派生出子类。 3.若修饰成员域,a.若成员域还被static修饰,则成员域只能在定义时赋值,而且之后不能修改;b.若只被final修饰而未被static修饰,则该成员域只能在定义时或构造方法中赋值,而且只能赋值一次之后不能修改。 4.若修饰成员方法,则该方法不能被子类覆盖。

    static:
    1.同一类内,静态成员方法不能直接(即不通过类名)引用本类的非静态成员变量和非静态成员方法,但可直接引用静态成员。
    2.所有实例共用一个静态成员变量,即在一个实例中对静态成员变量修改,其他实例中的静态成员变量也同时 被系统修改。
    3.静态成员可通过类名和实例名两种方法访问。
    4.static可修饰实名内部类,但不可修饰普通类(即与内部类相对应的外部类)和匿名内部类。
    5.实名内部类若包含静态成员方法,则该类必须声明为静态类内部类;若非静态实名内部类包含静态成员变量(即静态成员域),则该静态成员变量还需声明为final属性。


    inner class(内部类):
    1.分为实名内部类(有类名)和匿名内部类(没有类名)。实名内部类除了声明为static时用法与普通类不同,其他用法相似;匿名内部类不能用static和abstract修饰,不能包含静态成员方法,不能派生出子类,实名内部类均可以。实名内部类还可被private和protected修饰。
    2.实名内部类:
    a.在自己或者外部类中定义实例:实名内部类名 实例名;在外部类之外的类中定义实例:外部类名.实名内部类名 实例名;。
    b.创建静态实名内部类的实例对象:new 外部类名.内部类名(构造方法参数列表);创建非静态实名内部类的实例对象:外部类实例名.new 实名内部类名(构造参表);若在自己或者外部类中定义,则上面的外部类名可以省略。
    c.实名内部类(静态或非静态的)的静态成员的访问方式:外部类名.实名内部类名.静态成员名;或者 内部类实例名.成员名;。
    非静态成员:内部类实例名.成员名;。
    3.内部类可多重嵌套定义。

    private修饰词用法:

    使用对象:成员对象或成员方法

    介绍:被修饰的成员只可以在定义它的类中被访问

     
     
     
     
     
     
     
  • 相关阅读:
    BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )
    BZOJ 2134: 单选错位( 期望 )
    BZOJ 1030: [JSOI2007]文本生成器( AC自动机 + dp )
    BZOJ 2599: [IOI2011]Race( 点分治 )
    BZOJ 3238: [Ahoi2013]差异( 后缀数组 + 单调栈 )
    ZOJ3732 Graph Reconstruction Havel-Hakimi定理
    HDU5653 Bomber Man wants to bomb an Array 简单DP
    HDU 5651 xiaoxin juju needs help 水题一发
    HDU 5652 India and China Origins 并查集
    HDU4725 The Shortest Path in Nya Graph dij
  • 原文地址:https://www.cnblogs.com/LJTbozai/p/3201556.html
Copyright © 2011-2022 走看看