创建对象时自动调用某些内容

时间:2017-06-28 13:37:33

标签: java class object instance

我想在每次创建对象时显示消息“对象编号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);
   }
}

5 个答案:

答案 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”

相关问题