• 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修饰词用法:

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

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

     
     
     
     
     
     
     
  • 相关阅读:
    关于指针的定义格式
    C# 调用Qt编写的控件
    Qt中的泛型容器
    Qt之自定义属性Q_PROPERTY
    QT——键盘事件(捕获按键事件)
    Qt 嵌入浏览器 QWebEngineView实现浏览器基本功能
    QT TextEdit 自适应窗口大小,填满窗口 ——基于 函数
    为什么用QWebEngineView开发的浏览器速度很慢
    Qt5.9使用QWebEngineView加载网页速度非常慢,问题解决
    QJson QxORM QtWebApp TreeFrog
  • 原文地址:https://www.cnblogs.com/LJTbozai/p/3201556.html
Copyright © 2020-2023  润新知