我正在编写一个生成随机数的程序。在我的每个方法中,我创建了一个对象,它在每个方法中执行相同的操作,并且每次都给它指定相同的名称。这是不好的做法吗?将它作为这样的全局对象包含它会更好:
import java.util.Random;
public class RandomNumbers {
Random rand = new Random();
public int random() {
int result;
result = rand.nextInt(100) + 1;
return result;
}
public int topNumber(int firstTopNumber){
int result;
result = rand.nextInt(firstTopNumber) + 1;
return result;
}
而不是:
import java.util.Random;
public class RandomNumbers {
public int random() {
int result;
Random rand = new Random();
result = rand.nextInt(100) + 1;
return result;
}
public int topNumber(int firstTopNumber){
int result;
Random rand = new Random();
result = rand.nextInt(firstTopNumber) + 1;
return result;
}
答案 0 :(得分:1)
将全局变量用于此类目的没有问题。实际上你的方法不是static
所以你不会声明一个全局对象,只是一个成员变量。但我假设这些方法应该是静态的,因为它们是实用方法,那么私有static final variable
是一件好事(并且避免在每次调用时重新接种序列),例如:
class RandomNumbers {
private final static Random r = new Random();
public static int topNumber(int firstTopNumber) {
return r.nextInt(firstTopNumber) + 1;
}
}
请注意,多个方法之间共享的变量(static
或不是)并不总是一件好事,在这种情况下,你有一个无状态对象(实际上它有状态,但它无关紧要)所以从任何方法使用它不是问题,但情况并非总是如此。
答案 1 :(得分:0)
在使用成员变量之前,应检查以下内容。
2.Cross检查API文档。请参阅以下https://docs.oracle.com/javase/8/docs/api/java/util/Random.html
中的引文java.util.Random的实例是线程安全的。但是,跨线程并发使用相同的java.util.Random实例可能会遇到争用并因此导致性能不佳。请考虑在多线程设计中使用ThreadLocalRandom。