Tag:

什么是非静态初始化块的替代方案?

我的项目有一些喜欢非静态初始化块的开发人员。 有什么替代方案 ,这种替代方案的缺点是什么? 我猜:在构造函数中初始化值? 我们为什么要使用非初始化块? 据我所知,“初始化块”用于在实例化类时设置值。 那么构造函数是不够的? public class BlockTest { String test = new String(); //Non-static initialization block { test = “testString”; } } 这个区块让我感到困惑,导致可读性降低。 感谢您的答复!

执行初始化程序块和变量定义等的顺序是什么? (在java中)

我在理解初始化发生的顺序时遇到问题。 这是我假设的顺序: *Once per 1. Static variable declaration 2. Static block *Once per object 3. variable declaration 4. initialization block 5. constructor 但根据这段代码,我显然是错的: class SomethingWrongWithMe { { b=0; //no. no error here. int a = b; //Error: Cannot reference a field before it is defined. } int b = 0; } 如果我这样做,错误就会消失: class SomethingWrongWithMe { […]

Java AES密文文本大小

我正在使用一种非常标准的Java AES加密/解密方式。 byte[] key = hexStringToByteArray(“C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF”); byte[] message = hexStringToByteArray(“01A0A1A2A3A4A5A6A703020100060001”); SecretKeySpec secretKeySpec = new SecretKeySpec(key, “AES”); // Instantiate the cipher Cipher cipher = Cipher.getInstance(“AES”); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); byte[] encrypted = cipher.doFinal(message); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] original = cipher.doFinal(encrypted); 如您所见,我使用的是128位密钥和128位消息。 我总是得到我期望的结果,但加密结果总是256位长。 第二个128位始终相同。 截断结果除外,如何确保密码只返回前128位,而不更改前128位? 我觉得我有点混淆块大小的定义。

Java代码在Scanner hasNextLine上挂起

首先,我是java的新手,并试图在学校完成一项关于创建自动售货机的任务。 我的程序将2个文件作为cli参数,一个用于产品,另一个用于金钱。 对于我的生活,我无法弄清楚为什么代码挂在第42行 (while (moneyTemp.hasNextLine());) 我尝试使用断点在eclipse上进行调试,并注意到代码永远不会超过这一行。 在while循环中放置一个print语句,我没有得到输出,所以我知道它不是循环。 java文档说hasNextLine可以阻止等待用户输入,但由于我的源是一个文件,我不知道为什么会发生这种情况。 请参阅以下相关代码。 import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; public class VendingMachine { static Scanner input = new Scanner (System.in); public static void main(String[] args) { try { Scanner productTempFile = new Scanner(new File(args[0])); Scanner moneyTemp = new Scanner(new File(args[1])); int numProducts = 0; //Number of products to be […]

如何在Java中注释代码块

是否可以注释一段代码? 例如循环或简单的花括号? 如果是这样,怎么样? First.java package An; import An.ForCycle; class First { public static void main(String[] args) { First f = new First(); } public First () { @ForCycle { // error: illegal start of type { int k; } @ForCycle for (int i = 0; i < 5; i++) { // similar error (illegal start…) […]

Java中的块语句

我有一个扩展java.util.HashMap的MyMap类,下面的代码作为一个语句块,但我不明白使用额外的花括号 MyMap m = new MyMap() { { put(“some key”, “some value”); } }; 现在为什么我需要额外的花括号,我不能这样做(但这会引起编译错误) MyMap m = new MyMap() { put(“some key”, “some value”); };

Java – 按块读取文本文件

我想读取不同块的日志文件,使其成为multithreading。 该应用程序将在具有多个硬盘的服务器端环境中运行。 在阅读了块之后,应用程序将逐行处理每个块的行。 我已经使用bufferedreader完成了每个文件行的读取,我可以使用RandomAccessFile和MappedByteBuffer组合我的文件块,但是将这两者结合起来并不容易。 问题是,块正在切入我的块的最后一行。 我从来没有我的块的最后一行,所以处理这个最后的日志是不可能的。 我正试图找到一种方法将我的文件剪切成可变长度的块,尊重行的结尾。 有没有人有这样做的代码?