java中的常量,是否必须定义为static final的呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的常量,是否必须定义为static final的呢相关的知识,希望对你有一定的参考价值。

final关键字定义常量,就使得他在被定义后无法再对此进行赋值。而有时候定义的常量是个随机数,这时为了保证不使每次初始化后常量改变,就需要加static了。在同一个对象中是不需要的。被static修饰的变量可以不通过对象用类名直接访问,且只被分配一次内存,节约内存。实质上,就是一个全局变量。static定义的类。。。不知道你指的是不是类中的静态方法。方法的话,和变量一样,可以用类名直接调用,但是不能直接访问这个类除静态外的变量和方法。如果是静态类的话,普通类是不支持声明为静态类的,只有内部类才可以。能直接作为一个普通类使用,不需要实例外部类。作用就很多了,它可以在他所属类创建之前就被访问,最常用的例子就是main方法了。他会独立于该类的任何对象。 参考技术A 是必须 final,而不是static final

————————————本回答被提问者采纳

Java开发知识之Java的枚举

        Java开发知识之Java的枚举

一丶什么是枚举

  枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C++中都是用const关键字.

枚举跟C++概念都是一样的.就是特定的常量而已.

二丶Java中的枚举

    java中的常量.一般都是final定义.但是我们讲过.final定义的常量.初始化的时候可以每次给不同的值.

所以加上static 才能保证其内存不会改变.一般常量都是定义在接口中给我们使用的.

可能需要连续定义.

例如:

  public final static int a = 1;

  public final static int b = 2;

  public final static int c = 3;

....

  枚举就是管理一组常量的一个结构而已.

据图语法如下:

    

权限修饰符 enum关键字 枚举名称{
     枚举常量,
     枚举常量,
     枚举常量  
}

枚举常量的定义

  枚举名称  常量;

具体使用如下代码:

类代码:

  

public class MyTestenum {

    public MyTestenum() {
        // TODO 自动生成的构造函数存根
    }
    public enum NUMBER{
        N_NUMBER1,
        N_NUMBER2,
        N_NUMBER3
    }

}

外部new对象.并且使用enum定义常量.

public static void main(String[] args) throws MyException {
        MyTestenum t = new MyTestenum();
        NUMBER n = NUMBER.N_NUMBER1; //定义枚举常量n,必须初始化,可以为null也可以是枚举中的常量.
        switch(n) {
        case N_NUMBER1:
            System.out.println("1");
            break;
        case N_NUMBER2:
            System.out.println("2");
            break;
            
        case N_NUMBER3:
            System.out.println("3");
            break;
        }
    }

可以看到.我们可以直接使用 枚举 定义枚举变量. 并且赋值其中一个枚举常量.

但是我们又有疑问了. 我们的枚举常量并没有初始化.但是为什么程序不出错.而且还打印了1;

原因是. 枚举常量.默认就是从0开始.

 

三丶枚举作为方法传递

  我们可以定义枚举常量.规定只接受什么类型的枚举.

public class MyTestenum {

    public MyTestenum() {
        // TODO 自动生成的构造函数存根
    }
     enum NUMBER{
        N_NUMBER1 ,
        N_NUMBER2 ,
        N_NUMBER3 
    }
    
    public static void doit(NUMBER c) {
        switch(c) {
        case N_NUMBER1:
            break;
        case N_NUMBER2:
            break;
        case N_NUMBER3:
            break;
        }
    }

}

使用:

  

public static void main(String[] args) throws MyException {
        MyTestenum.doit(NUMBER.N_NUMBER1);
        
        
    }

我们要传入枚举常量才可以.

四丶枚举的高级用法

    我们知道.JAVA是一个面向对象的程序. 我们定义的枚举.其实已经默认继承了一个类

枚举类型可以看做一个类,其中的成员也都被默认使用 final public static 修饰了.所以枚举名称(变量)

其实就是一个引用.他继承了父类.则有父类的方法可以使用.

常用方法;

  

代码举例以values()为例.遍历枚举成员

    public static void main(String[] args) throws MyException {
        MyTestenum.doit(NUMBER.N_NUMBER1);
        NUMBER n = null;
        for(int i = 0; i < n.values().length;i++) {
            System.out.print(" " + n.values()[i]);
        }
        
    }

使用方法返回了一个数组. 又使用链式方法.调用了 length求数组成员. 下面则进行遍历.

五丶知识总结

    1.定义枚举关键字

      enum 名称{成员,成员};

      1.枚举定义的成员. 默认都是 public static  final 修饰的. 其成员是一个常量.且内存不可以更改.

    2.枚举方法.

      枚举可以当参数传递给方法使用.

    3.枚举高级用法

      枚举可以看成一个类.他的成员都是它的实例. 它集成子java.lang.Enum类. 我们可以使用方法进行遍历.

例如values():返回枚举数组. 可以进行遍历枚举.并且输出结果.

 

 

  

  

以上是关于java中的常量,是否必须定义为static final的呢的主要内容,如果未能解决你的问题,请参考以下文章

java 静态变量和静态常量

Static在类中的作用

java中的符号常量怎么理解?为啥是使用固定的public static final修饰?

JAVA常量定义时就要初始化吗?

Java中的final关键字

java接口中可以定义常量变量吗