如何打印包含对象的变量名称?

如何打印保存对象的变量名称?

例如,我有:

myclass ob=new myclass() 

我该如何打印“ob”?

对象没有名称,除非您碰巧使用允许每个对象被赋予一个的类(例如,通过使用getName()检索的变量)。

特别是,用于引用对象的任何特定变量的名称对于对象本身是完全未知的。 所以你做不到:

 Object foo = new Object(); // There's no support for this String name = foo.getName(); // expecting to get "foo" 

(请记住,几个变量都可以引用同一个对象,并且不必有任何引用对象的命名变量。)

要打印对象类型名称:

 System.out.println(myObject.getClass().getName()); 

System.out.println(); 该命令是否用于打印到控制台。

因此,如果您拥有自己创建并实例化的类,则可以执行以下操作:

 MyObject obj = new MyObject(); System.out.println(obj); 

这将打印出MyObjecttoString()实现。 默认实现不是很有趣,因此对于有用的信息,您必须覆盖toString()

略微完整(但基本上与上面相同):

  1. 如果你有一个对象: object.getClass().getName()将为你提供对象的完全限定名称( package.className。例如,String thing = new String(); thing.getClass()。getName( )将返回“java.lang.String”。
  2. 如果你有一个类名: className.class.getName()将为你提供对象的完全限定名称( package.className。例如.String.class.getName()将返回“java.lang.String”。

打印它你想要的。 也许使用System.out.println()。

变量的名称是编译时通常不存储的编译时信息。 如果使用调试信息进行编译,则存储变量名称。

在mamy上下文中,想要打印变量名称是一个荒谬的请求,但如果你真的需要这样做,请阅读java调试信息。

解决方法。 如果需要对象名,则可以在构造函数中初始化。

 //in class myClass private String objName; myClass(String objN) { this.objName = objN; .. } public String getObjName() { return objName; } //in main() . . . myclass ob = new myclass("ob"); //any other variables accessing this object //eg. temOb = ob get the same object name "ob" System.out.println("object name is: " + ob.getObjName()); myclass ob1 = new myclass("ob1"); System.out.println("object name is: " + ob1.getObjName()); 

我假设您想要一种“打印”对象的方法,在这种情况下,您首先要覆盖对象的toString()方法。 这将允许您在调用toString().时指定类型的对象返回的内容toString().

然后,你可以简单地做System.out.println(MyObject);

这将隐式调用MyObject的toString()

您无法获取对象引用的名称。 相反,你可以得到它的哈希码或计数器。 我解决这个问题如下:

 class ObjectName { static int num; ObjectName() { num++; } public int getObjectCount() { return num; } public static void main(String[] args) { ObjectName ob1=new ObjectName(); System.out.println(ob1.getClass().getName()+" "+ob1.getObjectCount()); ObjectName ob2=new ObjectName(); System.out.println(ob1.getClass().getName()+" "+ob1.getObjectCount()); } } 

输出:

 ObjectName 1 ObjectName 2 

这实现了所需的结果,但它有点像软糖,因为如果toString()返回的字符串实际上反映了变量的名称(当然,只有你,就像编码器会知道的那样),你必须使用该方法使用的约定,即在此实现中,因为返回的字符串的格式为ClassName + counter,您必须使用以下格式命名您的变量:myClass1,myClass2等。如果您将变量命名为其他变量方式(例如className + A / B / C等或someRandomVariableName)虽然返回字符串将保持由toString()方法实现,即返回myClass1,myClass2等,它不会反映您实际使用的变量名称码。

 class myClass { private static int counter = 1; private String string; private int objCounter; myClass(String string) { this.string = new String(string); objCounter = counter; counter++; } @Override public String toString() { return this.getClass().getName() + objCounter + ": " + this.string; } public static void main(String[] args) { myClass myClass1 = new myClass("This is the text for the first object."); myClass myClass2 = new myClass("This is the text for the second object."); System.out.println(myClass1); System.out.println(myClass2); } }