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
  • 相关阅读:
    使用hibernate实现树形结构无限级分类
    专家看台:盛大架构师周爱民回顾职业历程,分享十项建议
    开始运行命令大全
    rsvp.exe,AdskScSrv.exe ,avp.exe
    Web2.0 编程思想:16条法则
    李嘉诚:性格才是命运的决定因素
    中兴笔试题目
    管理Websphere的10个有用命令
    我的程序语言实践
    20200514:实现分布式Session的过程是怎样的?
  • 原文地址:https://www.cnblogs.com/atp-sir/p/6380756.html
Copyright © 2011-2022 走看看