我开始用Java编程,我想知道是否相当于C++ EDCOX1(0)的存在。

对谷歌的快速搜索表明它没有,但有人能告诉我是否存在类似的东西吗?在Java中?我正在努力使我的代码更可读。

例如,我希望能够编写myArray[PROTEINS],而不是myArray[0]。

在现代C++中,应该使用一个类型化的常数,而不是一个

是的,定义为C样式。在C++中使用const代替。参见Scott Meyers《有效C++》一书,第1条。

不,因为没有预编译程序。但是,在您的情况下,您可以实现以下相同的事情:

class MyClass

{

private static final int PROTEINS = 0;

...

MyArray[] foo = new MyArray[PROTEINS];

}

编译器会注意到,PROTEINS永远不会改变,所以会内联它,这或多或少是您想要的。

注意,常量的access修饰符在这里并不重要,因此如果您想在多个类中重用相同的常量,那么它可以是public或protected,而不是private。

注释空间太小,所以这里有更多关于使用static final的信息。正如我在对andrzej答案的评论中所说,只有primitive和String被直接编译为文本代码。要证明这一点,请尝试以下操作:

您可以通过创建三个类(在单独的文件中)来看到这一点:

public class DisplayValue {

private String value;

public DisplayValue(String value) {

this.value = value;

}

public String toString() {

return value;

}

}

public class Constants {

public static final int INT_VALUE = 0;

public static final DisplayValue VALUE = new DisplayValue("A");

}

public class Test {

public static void main(String[] args) {

System.out.println("Int   =" + Constants.INT_VALUE);

System.out.println("Value =" + Constants.VALUE);

}

}

编译这些并运行测试,其中打印:

Int    = 0

Value  = A

现在,将Constants更改为每个值都不同,只需编译类Constants。当您再次执行Test时(不重新编译类文件),它仍然打印INT_VALUE的旧值,但不打印VALUE的旧值。例如:

public class Constants {

public static final int INT_VALUE = 2;

public static final DisplayValue VALUE = new DisplayValue("X");

}

在不重新编译Test.java的情况下运行测试:

Int    = 0

Value  = X

请注意,与static final一起使用的任何其他类型都作为参考。

类似于C/C++ EDCOX1,16 ED/EDOCX1,17,一个常数文字或一个通过EDCOX1(7)定义的原语,用于一个常规的Java EDCOX1×19条件,并对EDCOX1(20)进行评估,这会导致编译器在EDCOX1×19块内的语句中删除字节码(它们不会被生成)。

private static final boolean DEBUG = false;

if (DEBUG) {

...code here...

}

"…code here…"处的代码不会编译为字节代码。但如果你把DEBUG改成true,那就是。

绝对是一个+1只是为了努力!

只想补充说,对于EDCOX1,2,S,Java不做同样的事情。

static final int PROTEINS = 1

...

myArray[PROTEINS]

您通常会在类本身中放置"常量"。请注意,编译器可以优化对它的引用,所以不要更改它,除非您重新编译所有的使用类。

class Foo {

public static final int SIZE = 5;

public static int[] arr = new int[SIZE];

}

class Bar {

int last = arr[Foo.SIZE - 1];

}

编辑周期…SIZE=4。还要编译Bar,因为您的编译器可能刚刚在上一个编译周期中编写了"4"!

Java没有通用的EDCOX1×2预处理器指令。

对于常量,建议将其声明为static finals,如in

private static final int PROTEINS = 100;

这样的声明将由编译器内联(如果值是编译时常量)。

还请注意,公共静态最终常量字段是公共接口的一部分,它们的值不应更改(因为编译器将它们内联)。如果确实更改了该值,则需要重新编译引用该常量字段的所有源。

好吧,私有static finals实际上不是公共接口的一部分。:)对于public static finals来说,这是真的。

@妈妈,没错。我最初是公开写的,但后来没有更新答案就改变了。

Java有一个预处理器,它提供了诸如PostgresJDBC定义、αIFIFF、αIFNDEF等多个指令,例如,TeaStudio使用它为不同的情况生成源代码,而不复制代码。

Java原语专业生成器支持EDCOX1、26、EDCOX1、27和EDCOX1×28个块,这些块允许在Java代码中执行某种宏生成,类似于在这个答案中提到的Java注释预处理器。

JPSG有Maven和Gradle插件。

最可读的解决方案是使用静态导入。那么您就不需要使用AnotherClass.constant。

编写一个常量为public static字段的类。

package ConstantPackage;

public class Constant {

public static int PROTEINS = 1;

}

然后在需要常量的地方使用静态导入。

import static ConstantPackage.Constant.PROTEINS;

public class StaticImportDemo {

public static void main(String[]args) {

int[] myArray = new int[5];

myArray[PROTEINS] = 0;

}

}

要了解有关静态导入的更多信息,请参阅此堆栈溢出问题。

最简单的答案是"没有直接的获取方法,因为没有预编译程序"但你可以自己做。使用类,然后将变量定义为最终变量,以便可以在整个程序中将其假定为常量

不要忘记将final和variable用作public或protected not private,否则您将无法从该类外部访问它。

java的define,关于预处理器:Java中的#define相关推荐

  1. 在c语言中预处理命令行都以井号开头,以井号开头的行和gcc预处理器输出中的'#1“ac”'之类的数字是什么意思?...

    以井号开头的行和gcc预处理器输出中的'#1"ac"'之类的数字是什么意思? 我使用打印出C预处理器的输出 gcc -E a.c 输出包含许多行 # 1 "a.c&quo ...

  2. c语言中字符串比较指令,如何在C条件预处理器指令中比较字符串

    CAVEAT:并非所有的编译器都以相同的方式实现C ++ 11规范.以下代码可在我测试过的编译器中使用,而许多注释者使用其他编译器. 引用Shafik Yaghmour的回答:在编译时计算C字符串的长 ...

  3. define定义的函数如何引用_「C与指针心得」25.预处理器-宏函数

    感谢您的阅读与点赞!欢迎关注:「大猫玩程序」,查看C语言系列文章 上一节讲了一些系统的预定义宏,这一节来讲一讲 宏定义.宏函数. 预处理常量 define: 预处理器指令从#开始,到最后第一个换行符为 ...

  4. 如何在C预处理器中可靠地检测Mac OS X,iOS,Linux,Windows? [重复]

    本文翻译自:How to detect reliably Mac OS X, iOS, Linux, Windows in C preprocessor? [duplicate] This quest ...

  5. C++Primer::头文件设计基本原则 与 预处理器介绍

    1.学会编写自己的头文件 有多个文件组成的程序需要一种方法连接名字的使用和声明,在C++中就是通过头文件实现的.C++程序使用头文件包含的不仅仅是类定义. 为了允许把程序写成独立的逻辑块,C++支持所 ...

  6. 《C Primer Plus》第十六章——C预处理器和C库

    文章目录 C预处理器和C库 本章内容 翻译程序的第一步 明示常量:#define 记号 重定义常量 在#define中使用参数 用宏参数创建字符串:#运算符 预处理器黏合剂:##运算符 变参宏:... ...

  7. C | C预处理器和C库

    目录 一.翻译程序的第一步 二.明示常量:#define 2.1 记号 2.2 重定义常量 三.在#define中使用参数 3.1 用宏参数创建字符串:#运算符 3.2 预处理器黏合剂:##运算符 3 ...

  8. 【《C Primer Plus》读书笔记】第16章:C预处理器和C库

    [<C Primer Plus>读书笔记]第16章:C预处理器和C库 16.1 翻译程序的第一步 16.2 明示常量:#define 16.2.1 记号 16.2.2 重定义常量 16.3 ...

  9. 16.C预处理器和C库

    文章目录 C预处理器和C库 16.1翻译程序的第一步 16.2明示常量:#define 16.3在#define中使用参数 16.3.1用宏参数创建字符串:#运算符 16.3.2预处理器黏合剂:##运 ...

最新文章

  1. WebSocket客户端连接不上和掉线的问题以及解决方案
  2. 机器学习 聚类篇——python实现DBSCAN(基于密度的聚类方法)
  3. [JS] - 判断IE6和IE7
  4. mysql 查询语句_MySQL相关(一)- 一条查询语句是如何执行的
  5. ctf里的拼图工具_CTF比赛工具pwntools介绍
  6. CSS实现左侧固定大小,右侧自适应的布局
  7. nginx+iis、NLB、Web Farm、Web Garden、ARR
  8. 傲腾机器Linux,【收藏】傲腾装机必看!
  9. ce修改面板属性_鬼谷八荒ce教程 教你如何修改属性+灵石+物品+时间等方法
  10. 超硬核!数据结构学霸笔记,考试面试吹牛就靠它
  11. 最新服务器CPUe5,看这里!2019 至强 Xeon E5 服务器系列 CPU 天梯图分享
  12. MongoDB聚合操作MongoDB常用聚合管道聚合$project$match$count$group$unwind$limit$skip$sort$lookup用法及操作案例
  13. unity Google 广告接入 SDK Android
  14. Filco圣手二代双模蓝牙机械键盘|科大讯飞鼠标连接Mac方法
  15. Windows软件清单
  16. 第二次信奥考试试题及题解(部分)
  17. 小红书负面笔记下沉怎么办
  18. CS61A Proj 3
  19. 订单能否按时交期?制造企业必须面对这几个问题
  20. 同济大学计算机硕士生能拿到户口,上海这4所大学的应届生,毕业可直接“落户”,考生有福了...

热门文章

  1. vert.x_使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务
  2. wso2 esb_使用WSO2 ESB构建制造服务总线(MSB)
  3. Java的内置垃圾收集如何使您的生活更美好(大部分时间)
  4. javacv 人脸检测_使用JavaCV进行手和手指检测
  5. [MEGA DEAL] Ultimate Java开发和认证指南(59%折扣)
  6. 在没有适当上下文的情况下引发异常是一种不良习惯
  7. 架构大型企业Java项目–我的虚拟JUG会话
  8. Apache Mesos:编写您自己的分布式框架
  9. 如何安全使用SWT的显示器asyncExec
  10. 停止尝试使用内部DB框架模拟SQL OFFSET分页!