zoukankan      html  css  js  c++  java
  • 面向对象之static与final关键字

          final关键字和static关键字

              final关键字

       final:在翻译过来的意思就是最后的,最终的,不可改变的意思。在Java中同样也是这个意思。那到底什么时候可以用到final来修饰呢?都知道,继承的应用提高了代码的复用性,通过继承,子类可以对父类的方法进行重写,那如果有些父类中的方法是固定的,不想让子类进行重写,要解决这个问题就要用到final关键字,final关键字可以用来修饰类,类的成员,以及局部变量。

      1、修饰类:final修饰的类是最终类,不能有子类,不能被继承,但是可以继承其他类,使用的方式不变,可以创建对象,调用方法。

      2、修饰方法:final修饰的方法不能被子类重写。

      3、修饰变量:修饰变量的时候也分几种情况

         a、修饰局部变量:修饰的变量称为常量,只能被赋值一次,赋值后终生不变。所以final一般做固定值的修饰。

         b、修饰引用变量:变量保存的是内存的地址,被final修饰后就不能再重新创建。(因为如果再次用new进行创建就会再次产生新的地址),但是地址内的对象属性值可以修改。

         成员变量的两种赋值方式:一种是定义时直接赋值,另一种是通过构造方法赋值(注意:不能用set方法进行赋值)。但是一般都是直接赋值,不通过构造方法赋值。

         c、修饰成员变量:修饰成员变量,固定住的不是内存中的默认值,固定住的是手动赋给成员变量的值。如:final int a=1;

     1 package com.oracle.demo01;
     2 /*final修饰类:(太监类)
     3     被final修饰的类不能被继承,但可以继承别的类
     4 final修饰成员方法:
     5     1.该方法可以被子类继承,但不能被重写
     6     2.从父类那里继承继承来的方法,重写后可以加final关键字
     7 final修饰变量(基本类型还是引用数据类型):
     8     一次赋值  终身不变
     9 final修饰成员变量:
    10     1.成员变量的初始值不能为系统赋的默认值(需要手动赋初始值)
    11     2.可以通过构造方法赋值
    12     3.一次赋值终身不变*/
    13 public class Test {
    14     public static void main(String[] args) {
    15         Zi zi=new Zi();
    16         zi.method1();
    17         zi.method2();
    18         final int a=1;
    19         final Fu fu=new Fu();
    20         //System.out.println(a);
    21     }
    22 }

    static关键字

       定义类的时候,类中都会有相应的属性和方法,然而对这些方法的使用,都是通过创建本类的对象进行调用的,当调用对象的某个方法时,这个方法没有访问到对象的特有数据时,方法创建这个对象有些多余,但是不创建这个对象,方法又调用不了,那这种情况如何解决呢?这是我们就要用到static关键字了。Static是静态修饰符,一般用来修饰类中的成员。

    static的特点:

       1、被static修饰的成员变量属于类,不属于这个类的某个对象。也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量。

    代码演示

     1 class Demo {
     2 
     3     public static int num = 100;
     4 
     5 }
     6 
     7  
     8 
     9 class Test {
    10 
    11     public static void main(String[] args) {
    12 
    13         Demo d1 = new Demo();
    14 
    15         Demo d2 = new Demo();
    16 
    17         d1.num = 200;
    18 
    19         System.out.println(d1.num); //结果为200
    20 
    21         System.out.println(d2.num); //结果为200
    22 
    23     }
    24 
    25 }

      2、被static修饰的成员可以并且建议通过类名直接访问。

       类名.静态成员变量名

       类名.静态成员方法名(参数)

       对象名.静态成员变量名     ------不建议使用该方式,会出现警告

       对象名.静态成员方法名(参数)     ------不建议使用该方式,会出现警告

    Static注意事项:

      1、静态内容是优先于对象存在,只能访问静态,不能使用this/super。静态修饰的内容存于静态区。

      2、同一个类中,静态成员只能访问静态成员,不能直接调用非静态的。如果想要使用,要先创建对象。原因:生命周期不同,静态优于非静态存在于内存中,静态存在时,非静态还不存在。

     代码

     1 class Demo {
     2 
     3     //成员变量
     4 
     5     public int num = 100;
     6 
     7     //静态成员变量
     8 
     9     public static int count = 200;
    10 
    11     //静态方法
    12 
    13     public static void method(){
    14 
    15         //System.out.println(num); 静态方法中,只能访问静态成员变量或静态成员方法
    16 
    17         System.out.println(count);
    18 
    19     }
    20 
    21 }

    使用场景:

       成员变量使用static 根据具体的事物,具体分析问题,定义事物的时候,,将共性的数据定义为静态的成员变量。

       方法跟着变量走,如果方法中没有调用非静态成员变量,需要加静态。

    静态调用:

       多态调用:编译都看父类,如果有,编译成功,否则编译失败。运行时:静态方法运行父类中的静态方法,,非静态方法:运行子类中重写的方法。成员变量:运行编译都看父类。注意:静态方法与对象没有关系。

    定义静态常量:

      开发中,我们想在类中定义一个静态常量,通常使用public static final修饰的变量来完成定义。此时变量名用全部大写,多个单词使用下划线连接。

    定义格式:

       public static final 数据类型 变量名 = 值;

    如:

    class Company {
    
        public static final String COMPANY_NAME = "卢肖正";
    
        public static void method(){
    
            System.out.println("一个静态方法");
    
        }
    
    }

       当我们要使用静态类时,不需要创建对象,直接使用类名来访问即可: 

    1 System.out.println(Company.COMPANY_NAME); //打印姓名
    2 
    3 Company.method(); // 调用一个静态方法

    注意:   

     

       接口中的每个成员变量都默认使用public static final修饰。

      所有接口中的成员变量已是静态常量,由于接口没有构造方法,所以必须显示赋值。可以直接用接口名访问。

    如:

    interface Inter {
    
        public static final int COUNT = 100;
    
    }
    
      // 访问接口中的静态变量
    
    Inter.COUNT

    图解:

  • 相关阅读:
    Rocket broker启动失败?
    jar下载慢,maven配置国内仓库
    Linux下搭建RocketMQ环境
    几种常见css布局
    原生JS快速实现拖放
    更换 grub 主题
    安装node环境以及cnpm
    用 hexo 快速搭建博客
    关于8080端口被占用问题的解决办法。
    idea的几个常用+实用的快捷键!
  • 原文地址:https://www.cnblogs.com/2734156755z/p/9376181.html
Copyright © 2011-2022 走看看