Java语言】【Java基础】Java定义常量的方式有什么

2020-10-30 15:09发布

3条回答
小小李兆佳
2楼 · 2020-10-30 15:14

采用接口(Interface)的中变量默认为static final的特性
在普通类中使用final修饰变量
采用了Java 5.0中引入的Enum类型。,也就是所谓的枚举类

我是大脸猫
3楼 · 2020-11-03 09:36

常量使用目的

1,为什么要将常亮提取出来? 2,提取出来怎么定义,定义在interface中,还是class中?有什么区别?

1)常亮提取出来有利于代码阅读,而且下次再做这种判断不用手写或复制,直接通过常量类就能得到,能够避免有的地方是username,有的地方是name来判断同一个逻辑含义相同变量问题。不过我觉得提取出来并不会有利于代码性能提升,因为常量分配在内存的常亮池中,所以内存不会出现多个相同常量字符串。总的来说提取常量主要是为了避免魔法数字和提高代码可读性。

2)常亮定义在final的class中,防止被其它类继承和实例化。定义在interface中性质也是一样,static final属性。但是interface看起来就是会被继承的。

interface中定义常量

采用接口(Interface)的中变量默认为static final的特性。

public interface ConstantInterface {  
   String SUNDAY = "SUNDAY";  
   String MONDAY = "MONDAY";  
   String TUESDAY = "TUESDAY";  
   String WEDNESDAY = "WEDNESDAY";  
   String THURSDAY = "THURSDAY";  
   String FRIDAY = "FRIDAY";  
   String SATURDAY = "SATURDAY";  
}


Enum定义常量

enum ConstantEnum {  
       SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY  
   }


普通类中定义常量

采用了在普通类中使用static final修饰变量的方法。

public class ConstantClassField {  
       public static final String SUNDAY = "SUNDAY";  
       public static final String MONDAY = "MONDAY";  
       public static final String TUESDAY = "TUESDAY";  
       public static final String WEDNESDAY = "WEDNESDAY";  
       public static final String THURSDAY = "THURSDAY";  
       public static final String FRIDAY = "FRIDAY";  
       public static final String SATURDAY = "SATURDAY";  
   }

也可以使用get方法

public class ConstantClassFunction {  
       private static final String SUNDAY = "SUNDAY";  
       private static final String MONDAY = "MONDAY";  
       private static final String TUESDAY = "TUESDAY";  
       private static final String WEDNESDAY = "WEDNESDAY";  
       private static final String THURSDAY = "THURSDAY";  
       private static final String FRIDAY = "FRIDAY";  
       private static final String SATURDAY = "SATURDAY";  
       public static String getSunday() {  
           return SUNDAY;  
       }  
       public static String getMonday() {  
           return MONDAY;  
       }  
       public static String getTuesday() {  
           return TUESDAY;  
       }  
       public static String getWednesday() {  
           return WEDNESDAY;  
       }  
       public static String getThursday() {  
           return THURSDAY;  
       }  
       public static String getFirday() {  
           return FRIDAY;  
       }  
       public static String getSaturday() {  
           return SATURDAY;  
       }  
   }


final class定义常量

public final class ConstantClassField {  
      public static final String SUNDAY = "SUNDAY";  
      public static final String MONDAY = "MONDAY";  
      public static final String TUESDAY = "TUESDAY";  
      public static final String WEDNESDAY = "WEDNESDAY";  
      public static final String THURSDAY = "THURSDAY";  
      public static final String FRIDAY = "FRIDAY";  
      public static final String SATURDAY = "SATURDAY";  
  }


推荐,使用final class定义,表面意思更清楚。虽然为了简单编码,浪尖采用的是interface。


征戰撩四汸
4楼 · 2022-03-30 15:40

1、采用接口(Interface)中变量默认为static final的特性

2、采用了Java 5.0中引入的Enum类型

3、采用了在普通类中使用static final修饰变量的方法

4、类似方法三,但是通过函数来获取常量

相关问题推荐

  • 回答 7
    已采纳

    里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象里氏代换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一...

  • 回答 8
    已采纳

    心里有个预期,然后看看是以什么目的进这家企业工作,要是赚钱的话,那就多要点,要是学习的话,可以根据情况要一个能养活自己的价格。

  • 回答 4
    已采纳

    Java中有八种数据类型,基础数据类型分别是:byte,short,int,long,float,double,char,boolean,引用数据类型分别是:数组,类和接口。方法传参的时候我们有两种,一种是形式参数(定义方法时写的参数),一种是实际参数(调用方法时给的具体值)。首先...

  • 回答 15
    已采纳

    现在的架构很多,各种各样的,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等,还有和这些架构相关的管理型的技术方法,如 DevOps、应用监控、自动化运维、SOA 服务治理、去 IOE 等等,还有很多。分布式架构其实就是分布式系...

  • 回答 10

    1、监控GC的状态使用各种JVM工具,查看当前日志,分析JVM参数的设置,分析堆内存快照和GC日志,根据实际的各区域的内存划分和GC的执行时间,判断是否需要进行优化2、分析结果、判断是否需要优化如果各项参数设置合理,系统没有超时的日志出现,GC频率也不高,...

  • 回答 6

    MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。 如果想覆盖对象工厂的默认行为,则可以...

  • 回答 6

    学vue应该要先学习javascript 的基础知识和用法。

  • 回答 8

    1、lambda是jdk8的新特性2、使用lambda的前提,必须是一个接口,接口只能有一个抽象方法3、Lambda 表达式的简单例子:// 1. 不需要参数,返回值为 5  () -> 5    // 2. 接收一个参数(数字类型),返回其2倍的值  x -> 2 * x    // 3. 接受2个参数(数...

  • 回答 4

    1、面向对象编程(OOP):OOP最重要的思想是类,类是模板,从类中构造一个对象,即创建了这个类的一个实例;2、封装:是把数据和行为结合在一起,并对对象使用者隐藏数据的实现过程,通常一个对象中的数据叫他的实例字段(instance field) ;3、继承:Java中允许在已...

  • 回答 6

    jdk1.8的新特性包括如下:一、接口的默认方法与静态方法,也就是接口中可以有实现方法二、Lambda 表达式三、函数式接口与静态导入四、Lambda 作用域在lambda表达式中访问外层作用域和老版本的匿名对象中的方式很相似。你可以直接访问标记了final的外层局部变...

  • 回答 6

    用static修饰,能节省一些内在空间,虽然很有限

  • 回答 6

    这个是在内存中存放的地址,你必须str1.equals(str2)才可以判断的。你可以输出地址看看,你这样比较的是两个地址,当然是false了。第一个直接缓存 数据共享Hello,是true。

  • 回答 6

    其实就一句话:只要是有多个线程访问并修改某个变量或是区域的话,一定要加1653上同步设置(比如同步控制语句,互斥锁,信号量,原子操作等等)。B/S结构中,如果你不编写类似Apache等的HTTP Server,那么你不用考虑线程安全这个问题。如果有多个用户访问数据库...

  • 回答 8

    同步方法  使用synchronized 修饰方法  ==》 解决线程安全问题同步代码块  synchronized(被加锁的对象){ 代码 }  ==》 解决线程安全问题锁机制Lock  ==》 解决线程安全问题   (这个例子在ex2上修改而成的)...

  • 回答 4

    当多个线程访问同一个共享数据时,有可能会出现线程安全问题

没有解决我的问题,去提问