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

我开始用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,否则您将无法从该类外部访问它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言中函数是怎么理解?

点击上方蓝字关注我,了解更多咨询1、C语言中的函数是一个可以重复使用的代码,用于独立完成某个功能。2、它可以接收用户传输的参数,也可以不接收,将代码段封装成函数的过程称为函数定义。如果有返回值,使用return语句返…

java g1 收集调优_Java性能调优:充分利用垃圾收集器

java g1 收集调优JVM背后发生了什么,垃圾回收如何影响Java性能? 性能调优世界是一个危险的地方,一个JVM标志失衡,事情很快就会变得繁琐。 因此 ,我们决定求助于Java性能调优专家, 单调 JVM探查器mjprof的创…

java的构造函数详解,Java构造函数与普通函数用法详解

函数也被称为方法!函数的作用及特点:1、用于定义功能,将功能封装。2、可以提高代码的复用性。函数注意事项:1、不能进行函数套用(不可以在函数内定义函数)。2、函数只有被调用才能被执行。3、基本数据类型(String、int、….)修饰的…

c语言中函数的声明和定义

点击上方蓝字关注我&#xff0c;了解更多咨询1、函数声明&#xff0c;无需实现该函数的功能。函数声明只是一个空壳&#xff0c;不会有特定的函数实现。2、函数定义&#xff0c;必须实现该函数的功能&#xff0c;要实现函数的实现。#include<stdio.h>实例//使用函数前&am…

bean注入属性_摆脱困境:将属性值注入配置Bean

bean注入属性Spring Framework对将从属性文件中找到的属性值注入到bean或Configuration类中提供了很好的支持。 但是&#xff0c;如果将单个属性值注入这些类中&#xff0c;则会遇到一些问题。 这篇博客文章指出了这些问题&#xff0c;并描述了我们如何解决它们。 让我们开始…

php 浏览器 打印控件,JavaScript_JavaScript 实现打印,打印预览,打印设置,WebBrowser是IE内置的浏览器控件 - phpStudy...

JavaScript 实现打印,打印预览,打印设置WebBrowser是IE内置的浏览器控件&#xff0c;无需用户下载.一、WebBrowser控件二、WebBrowder控件的方法 //打印WebBrowser1.ExecWB(6,1);//打印设置WebBrowser1.ExecWB(8,1);//打印预览WebBrowser1.ExecWB(7,1);关于这个组件还有其他的用…

c语言中常规函数和指针函数区别

点击上方蓝字关注我&#xff0c;了解更多咨询1、在函数名前面多了一个*号&#xff0c;而这个函数就是一个指针函数。2、其返回值是一个int类型的指针&#xff0c;是一个地址。实例#include<stdio.h>int* fun1(int* x) //传入指针 {int* tmp x; //指针tmp指向xret…

jvm崩溃的原因_JVM崩溃时:如何调查最严重错误的根本原因

jvm崩溃的原因当应用程序崩溃时&#xff0c;您可以学到什么&#xff1f; 我认为&#xff0c;“后见之明是20 /”是最喜欢的短语之一托马斯罗梅尔 &#xff0c;工程ZeroTurnaround的副总裁。 好吧&#xff0c;我实际上不确定在他的短语中占什么位置&#xff0c;但是我已经听过他…

golang web php,GitHub - kai-xx/goWeb: golang web 接口实现 -- 类似PHP的laravel

goWebgorose ormdotweb框架实现接口 -- 类似PHP的laravel项目结构说明因为 gorose orm 和 dotweb 框架 都是基于独立的组件, 所以我们可以对项目的目录做出自由的规划.在这里, 我们便规划一个遵循一般的mvc结构的项目目录.为了项目的易维护性和高可用性, 我们尽量采取成熟的架构…

jboss项目导入idea_JBoss BPM Suite快速指南–将外部数据模型导入BPM项目

jboss项目导入idea您正在从事一个大项目&#xff0c;在企业中开发规则&#xff0c;事件和流程以满足关键业务需求。 部分要求指出&#xff0c;某个业务部门将提供您的数据模型供您利用。 不会在JBoss BPM Suite数据建模器中设计此数据模型&#xff0c;但是在从业务中心仪表板…

mysql协议重传,MySQL · 源码分析 · 网络通信模块浅析

MySQL 网络通信浅析MySQL的网络通信协议主要包含以下几个层次&#xff0c;从最上层的MySQL数据包协议层到最底层的socket传输&#xff1a;| THD| Protocol| NET| VIO| SOCKET本文主要扫一下相关的代码&#xff0c;以下分析基于MySQL5.7。创建会话在MySQL5.7中对会话协议层的代码…

C语言代码优化11种实用方法

点击蓝字关注我1、选择合适的算法和数据结构选择一种合适的数据结构很重要&#xff0c;如果在一堆随机存放的数中使用了大量的插入和删除指令&#xff0c;那使用链表要快得多。数组与指针语句具有十分密切的关系&#xff0c;一般来说&#xff0c;指针比较灵活简洁&#xff0c;而…

spring boot注释_使用Spring Boot和注释支持配置Spring JMS应用程序

spring boot注释1.简介 在以前的文章中&#xff0c;我们学习了如何使用Spring JMS配置项目。 如果查看有关使用Spring JMS进行消息传递的文章介绍 &#xff0c;您会注意到它是使用XML配置的。 本文将利用Spring 4.1版本中引入的改进 &#xff0c;并仅使用Java config配置JMS项目…

obendclean php命令,ob_end_clean

用户评论:[#1]Sam Yong - hellclanner at live dot com [2011-05-04 22:14:35]Take note that if you change zlib output compression setting in between ob_start and ob_end_clean or ob_end_flush, you will get an error: ob_end_flush() failed to delete buffer zlib o…

C语言 | 简单工厂方法模式实现例子

点击蓝字关注我们1、简介简单工厂方法定义一个用于创建对象的类&#xff0c;该类接受一个参数&#xff0c;通过参数决定创建不同的对象。GOF并没有把简单工厂方法定义为23种设计模式之一&#xff0c;可以认为简单工厂方法是工厂方法的简化形式。为了体现简单工厂方法和工厂方法…

grpc 流式传输_编写下载服务器。 第一部分:始终流式传输,永远不要完全保留在内存中...

grpc 流式传输下载各种文件&#xff08;文本或二进制文件&#xff09;是每个企业应用程序的生死攸关的事情。 PDF文档&#xff0c;附件&#xff0c;媒体&#xff0c;可执行文件&#xff0c;CSV&#xff0c;超大文件等。几乎每个应用程序迟早都必须提供某种形式的下载。 下载是通…

matlab plot errorbar,如何为MATLAB errorbar plot的点和垂直线设置不同的图例?

这建立在Jens Boldsen’s answer之上,它添加了以下内容&#xff1a;>可以旋转表示图例中错误栏的线条使其垂直,或保持默认的水平方向;>该行的末尾用短线“关闭”.该方法非常通用,因为它支持&#xff1a;>任意颜色,线型和标记作为错误栏的参数.请注意,实际条形图始终绘…

C语言 / C++基础面试知识大集合

点击蓝字关注我们相对而言&#xff0c;C语言和C相关的面试题比较少见&#xff0c;没有Java方向写的人那么多&#xff0c;这是一篇 C 语言与 C面试知识点总结的文章&#xff0c;个人感觉非常难得&#xff0c;希望能对大家有所帮助。const作用修饰变量&#xff0c;说明该变量不可…

input发送a.jax_Java REST JAX-RS 2.0 –如何处理日期,时间和时间戳记数据类型

input发送a.jax无论是X-Form-Urlencoded还是JSON HTTP发布到REST资源端点&#xff0c;对于与日期或时间相关的数据都没有特定的“数据类型”。 大多数开发人员会将这些数据发布为“字符串”&#xff0c;或者只是将它们转换为Unix时间戳值&#xff08;例如1435061152&#xff09…

php中is_int用法,php – is_int()和ctype_digit()之间有区别吗?

如果参数是整数类型&#xff0c;is_int()返回true&#xff0c;ctype_digit()采用字符串参数&#xff0c;如果字符串中的所有字符都是数字&#xff0c;则返回true。例&#xff1a;┌──────────┬───────────┬────────────────┐│ │ is_…