zoukankan      html  css  js  c++  java
  • JAVA总结之关键字static和final

    问题描述:

      Java中有两个修饰符关键字static和final,用来修饰成员变量和方法。其中static表示静态的意思,被这个关键字修饰的方法和变量,则表示在Java虚拟机加载类的时候就加载了这个变量和方法,并且它与对象无关,它直属于类;其中final表示最终的意思,被这个关键字修饰的方法,则表示这个方法不能被重写,被这个关键字修饰的变量,则表示这个变量不能被改变。static和final的区别,当你懂得它们的含义,就知道它们的区别了,其实它们是两个不同的概念,哪有区别之分。为了更清晰的解释它们的含义,下面附上测试代码:

     1 package com.test;
     2 
     3 public class Test {
     4 
     5     /**
     6      * @param args
     7      * static和final关键字测试样例
     8      */
     9     public static void main(String[] args) {
    10         // TODO Auto-generated method stub
    11         MyClass myClass1 = new MyClass();
    12         MyClass myClass2 = new MyClass();
    13         /*
    14          * 由于j被static关键字修饰,则表示变量j直属于类,不属于对象,所以这里变提示警告
    15          * 警告:The static field MyClass.j should be accessed in a static way
    16          */
    17         System.out.println("输出myClass1对象信息:");
    18         System.out.println("i = " + myClass1.i);
    19         System.out.println("j = " + myClass1.j);
    20         System.out.println("k = " + myClass1.k);
    21         System.out.println("输出myClass2对象信息:");
    22         System.out.println("i = " + myClass2.i);
    23         System.out.println("j = " + myClass2.j);
    24         System.out.println("k = " + myClass2.k);
    25         myClass1.setJ();
    26         /*
    27          * 当我们改变myClass1对象的变量j的时候,myClass2对象的变量j也被改变
    28          * 这更加体现了被static修饰的变量是直属于类的
    29          */
    30         System.out.println("输出myClass1对象信息:");
    31         System.out.println("i = " + myClass1.i);
    32         System.out.println("j = " + myClass1.j);
    33         System.out.println("k = " + myClass1.k);
    34         System.out.println("输出myClass2对象信息:");
    35         System.out.println("i = " + myClass2.i);
    36         System.out.println("j = " + myClass2.j);
    37         System.out.println("k = " + myClass2.k);
    38     }
    39     
    40 }
    41 
    42 class MyClass{    
    43      public final double i = Math.random();
    44      public static double j = Math.random();
    45      public double k = Math.random();
    46      
    47      /*这里会报错,并提示去掉i变量的final修饰
    48      The final field MyClass.i cannot be assigned
    49      public void setI(){
    50          i = 1.0;
    51      }*/
    52      
    53      public void setJ(){
    54          j = 1.0;
    55      }
    56 }

    输出结果:

    输出myClass1对象信息:
    i = 0.8121042271613893
    j = 0.7588637394635798
    k = 0.7289219433108298
    输出myClass2对象信息:
    i = 0.2939051021116923
    j = 0.7588637394635798
    k = 0.23782874599220116
    输出myClass1对象信息:
    i = 0.8121042271613893
    j = 1.0
    k = 0.7289219433108298
    输出myClass2对象信息:
    i = 0.2939051021116923
    j = 1.0
    k = 0.23782874599220116
  • 相关阅读:
    TCP/IP 协议简介
    制作html的旋转太极图
    Redis高可用
    RFID固定资产管理系统解决方案
    为什么要用三维数据可视化?
    Java单元测试技巧之PowerMock
    技术干货 | 如何在 Library 中使用/依赖 mPaaS?
    云原生的进一步具象化
    【阿里云EMR实战篇】以EMR测试集群版本为例,详解 Flink SQL Client 集成 Hive 使用步骤
    【实践案例】Databricks 数据洞察 Delta Lake 在基智科技(STEPONE)的应用实践
  • 原文地址:https://www.cnblogs.com/atp-sir/p/6380756.html
Copyright © 2011-2022 走看看