Java 仅通过引用对象获取值

Java 仅通过引用对象获取值,java,class,object,object-oriented-analysis,Java,Class,Object,Object Oriented Analysis,为什么有时我们只通过引用对象的名称就可以从对象中获取值 例如: class Abc { int a=0; char b='a'; void tellDetails() { return a; } void main(){ Abc obj=new Abc(); Date d1=new Date(); System.out.println(obj.a); System.out.println(d1); } 如您所见,对于对象“obj”,我需要使用点运算符并引用字段/方法,但是对于“Date

为什么有时我们只通过引用对象的名称就可以从对象中获取值

例如:

class Abc {
 int a=0; 
char b='a';

void tellDetails()
{ return a; }

void main(){
Abc obj=new Abc();
Date d1=new Date();
System.out.println(obj.a);
System.out.println(d1); }

如您所见,对于对象“obj”,我需要使用点运算符并引用字段/方法,但是对于“Date”对象,我可以直接使用对象名称/引用“d1”,而不附加任何字段/方法。为什么会这样

首先,您必须知道它是每个java类的母亲,包括它的所有方法。其中之一是,它返回对象的字符串表示形式。正如您所注意到的,打印
obj
返回对象的
classname+@+hashcode
(对象类实现),如下所示:
Abc@7852e922

但这不是我们需要的。这取决于实现和需求,但大多数情况下,您需要对象属性及其相应的值

在这种情况下,一个例子可能是:

Abc课程:

注意:请注意@Override注释

给出以下输出:

Abc [a=0, b=a]
Fri Jun 08 03:02:27 CLT 2018
但是现在:默认情况下,这对日期有什么影响?。因为它已在中被覆盖。将此日期对象转换为以下格式的字符串:

 dow mon dd hh:mm:ss zzz yyyy

这就是为什么
System.out.println(d1)
在默认情况下工作。

首先,您必须知道它是每个java类的母亲,包括它的所有方法。其中之一是,它返回对象的字符串表示形式。正如您所注意到的,打印
obj
返回对象的
classname+@+hashcode
(对象类实现),如下所示:
Abc@7852e922

但这不是我们需要的。这取决于实现和需求,但大多数情况下,您需要对象属性及其相应的值

在这种情况下,一个例子可能是:

Abc课程:

注意:请注意@Override注释

给出以下输出:

Abc [a=0, b=a]
Fri Jun 08 03:02:27 CLT 2018
但是现在:默认情况下,这对日期有什么影响?。因为它已在中被覆盖。将此日期对象转换为以下格式的字符串:

 dow mon dd hh:mm:ss zzz yyyy

这就是为什么
System.out.println(d1)在默认情况下工作。

每个java类都有一个toString方法。toString方法是在对象类中定义的,因为所有java类都是对象类的子类,所以每个java类中都有一个toString函数

当我们试图打印一个对象时,实际上调用了该类的toString方法,该方法返回一个字符串并打印该字符串

在您的情况下,当您打印Date类的对象时,会调用Date类的toString方法

你也可以用你的对象试试这个,只要写

System.out.println(obj);
你将看到的是一个你无法理解的字符串。 如果您想定制toString方法,那么可以按如下方式重写它

    class Abc {
     int a=0; 
    char b='a';

    void tellDetails()
    {
     return a; 
    }
    @Override
      public String toString()
      {
         return "a="+a+"  b="+b;
       }
    void main(){
    Abc obj=new Abc();
    Date d1=new Date();
    System.out.println(obj.a);
    System.out.println(d1); 
   }



}

上面的代码将在打印ABC类的对象时打印a和b的值

每个java类都有一个toString方法。toString方法是在对象类中定义的,因为所有java类都是对象类的子类,所以每个java类中都有一个toString函数

当我们试图打印一个对象时,实际上调用了该类的toString方法,该方法返回一个字符串并打印该字符串

在您的情况下,当您打印Date类的对象时,会调用Date类的toString方法

你也可以用你的对象试试这个,只要写

System.out.println(obj);
你将看到的是一个你无法理解的字符串。 如果您想定制toString方法,那么可以按如下方式重写它

    class Abc {
     int a=0; 
    char b='a';

    void tellDetails()
    {
     return a; 
    }
    @Override
      public String toString()
      {
         return "a="+a+"  b="+b;
       }
    void main(){
    Abc obj=new Abc();
    Date d1=new Date();
    System.out.println(obj.a);
    System.out.println(d1); 
   }



}

当您打印ABC类的对象时,上述代码将打印a和b的值

您正在使用的是该方法

打印一个对象。string.valueOf(Object)方法生成的字符串根据平台的默认字符编码转换为字节,这些字节完全按照write(int)方法的方式写入

它将在参数上内部使用

如果参数为null,则为等于“null”的字符串;否则,将返回obj.toString()的值

因此,如果您传递的实例不重写
toString
方法,它将使用
Object
中的方法


简而言之,您只需要重写
public String to String()
方法。

您所做的就是使用该方法

打印一个对象。string.valueOf(Object)方法生成的字符串根据平台的默认字符编码转换为字节,这些字节完全按照write(int)方法的方式写入

它将在参数上内部使用

如果参数为null,则为等于“null”的字符串;否则,将返回obj.toString()的值

因此,如果您传递的实例不重写
toString
方法,它将使用
Object
中的方法


简而言之,您只需要重写
公共字符串toString()
method.

重写
Object
类中定义的
toString
方法以返回描述对象的字符串。重写
Object
类中定义的
toString
方法以返回描述对象的字符串。如果要访问日期()的特定字段,可以使用d1.getTime()就像一个正常的访问。完全是@PrashantPalve。为了进一步了解,OP可以检查日期类的实现。如果您想访问Date()的特定字段,可以像普通访问一样使用d1.getTime()。确切地说是@PrashantPalve。为了进一步了解,OP可以检查日期类的实现。当我们试图打印一个对象时,实际上调用了该类的toString方法,该方法返回一个字符串并打印该字符串。事实上,这部分是正确的。该方法被记录为将使用
Object.to的方法