我想在每次创建对象时显示消息“对象编号1”,“对象编号2”等。
我是编程的初学者所以我只是想知道这是否正确(尽管它有效):
public class Test {
public static void main (String [] args) {
Point pt1 = new Point();
Point pt2 = new Point();
}
}
class Point {
private static int nb = 0;
{
++nb;
System.out.println("Object number : " + nb);
}
}
答案 0 :(得分:1)
您需要将代码放入构造函数中。像这样:
class Point
{
private static int nb = 0;
public Point()
{
++nb;
System.out.println("Object number : " + nb);
}
}
答案 1 :(得分:1)
是的,它正确使用static
变量的方式。
只需移动递增的代码并将其打印到类构造函数,而不是使用初始化块。
因为在OOP中,类构造函数是在创建类的新实例时调用的,因此在创建新实例时,最适合放置需要执行的代码。
public class Test {
public static void main(String[] args) {
Point pt1 = new Point();
Point pt2 = new Point();
}
}
class Point {
private static int nb = 0;
public Point() {
System.out.println("Object number : " + (++nb));
}
}
如果您查看Providing Constructors for Your Classes,可以看到:
一个类包含被调用以从类蓝图创建对象的构造函数。
答案 2 :(得分:1)
这实际上会奏效。在类中创建块时,将在构造函数被调用之前执行此代码。
public class Point{
{
//invoked before constructor
}
public Point() {
//Constructor code
}
}
当你没有构造函数或只有一个构造函数时,将此代码放在构造函数中更具可读性:
public Point() {
System.out.println("Object number : " + ++nb);
}
阅读代码的其他人会感谢你!
答案 3 :(得分:1)
尝试将这两行放在构造函数中。
++nb;
System.out.println("Object number : " + nb);
如果你需要在java程序中使用可执行代码它必须在构造函数或方法中。
public class Test {
public static void main (String [] args) {
Point pt1 = new Point();
Point pt2 = new Point();
}
}
class Point {
private static int nb = 0;
public Point()
{
++nb;
System.out.println("Object number : " + nb);
}
}
答案 4 :(得分:1)
这不是线程安全的:
list.x <- list(1:2, 1:3, 3:4, 5, 5:6)
clusters <- clusterize(list.x);
replace.with.clusters(list.x, clusters);
# Outputs the following:
#
# [[1]]
# [1] 1 2 3 4
#
# [[2]]
# [1] 1 2 3 4
#
# [[3]]
# [1] 3 4 1 2
#
# [[4]]
# [1] 5 6
#
# [[5]]
# [1] 5 6
它可以多次产生相同的“id”