当前位置: 首页 > 知识库问答 >
问题:

默认情况下将值初始化为一个对象与使用默认构造函数初始化为其他对象的相同值[重复]

袁志专
2023-03-14

I一个对象的初始化值,然后声明同一类的另一个对象,但默认情况下,第一个对象的值分配给第二个对象,而不是默认的空值。

    public class Student {

static String name;
static String fatherName;
public Student(String name,String fatherName)
{
    this.name=name;
    this.fatherName=fatherName;
}
public Student() {
}
public static void showName(){
    System.out.println("Hello my name is : "+name+"\nMy father name is: "+fatherName);
}

}

是存储有关学生信息的类。

    public class Test {
public static void main(String[] args) {
    Student st1=new Student("xyz","abc");
    st1.showName();
    Student st2=new Student();
    st2.showName();

}

}在这里,我创建了两个对象,首先是初始化第一个对象(st1),然后我用默认对象声明第二个对象,并且在这两个对象上我都调用了同一个对象,为什么用第二个对象调用的方法正在打印传递给第一个对象的值为什么它不打印默认空值。

输出:

“C:\Program Files\Java\jdk-16.0.2\bin\Java.exe”“-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.2\lib\IDEA\rt.jar=57206:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.2\bin”-Dfile。编码=UTF-8-classpath“C:\Users\Muhammad Ismail\IdeaProjects\oop in java\out\production\oop in java”测试

    Hello my name is : xyz
    My father name is: abc
    Hello my name is : xyz
    My father name is: abc

    Process finished with exit code 0

共有2个答案

归誉
2023-03-14

因为您使用了static关键字来声明类的属性。用private关键字替换这些关键字。

谯和煦
2023-03-14

您将变量定义为静态变量。这使它们成为类变量而不是实例变量。从变量定义中删除关键字static,它的行为应符合预期。

public class Student {
  private String name;
  private String fatherName;
  public Student(String name,String fatherName) {
    this.name=name;
    this.fatherName=fatherName;
  }
  public Student() {}

  public static void showName(){
    System.out.println("Hello my name is : "+name+"\nMy father name is: "+fatherName);
  }
}
 类似资料:
  • null 必需的 获取java对象(根元素),它完全表示xml和每个由默认值初始化的成员。 当我试图在不显式设置值的情况下marshall xml时,默认值并不能使sence...有什么方法可以在不自定义生成的类的情况下,用默认值填充xml吗? .xsd的示例: 和java类:

  • 问题内容: 众所周知,根据JLS7 p.4.12.5, 每个实例变量均使用默认值初始化。例如(1): 但是我一直认为,这样的类实现(2): 绝对等于示例(1)。我期望,复杂的Java编译器会看到(2)中的所有这些初始化值都是多余的,并忽略了它们。 但是突然对于这两个类,我们有两个不同的字节码。 例如(1): 例如(2): 问题是: 为什么?但这是显而易见的要优化的事情。什么原因? UPD: 我使用

  • 考虑以下代码 VS2013编译器发出以下警告: 警告C4351:新行为:数组“B::member”的元素将默认初始化1 这里有记载 使用C 11,并应用“默认初始化”的概念,意味着B. part的元素将不会被初始化。 但我认为,成员{}应该执行值初始化,而不是默认初始化。VS2013编译器是否损坏? 8.5美元/6 默认初始化类型为T的对象意味着:-如果T是(可能是cv限定的)类类型(第9条),则

  • 问题内容: 声明基元/对象时,它们是否已初始化? 哪些是默认值? 类成员 和 本地字段 的行为是什么? 在类成员上声明对象呢? 如下所示,这些是默认值: 请注意,对象初始化为 null 问题答案: 缺省值为is ,这是它将在JavaSE和JavaEE中具有的值,除非为其分配了另一个值。 Java(或任何其他原语)中不能有未初始化的类成员。 在您的示例中,您显示的是类成员,在另一个示例中,其显示的是

  • 问题内容: 我有一个对象 我用两种方式初始化它 这是输出 似乎builder没有获得默认值。我在属性中添加了注释,对象现在看起来像这样 这是控制台输出 我怎样才能使他们俩都成为? 问题答案: 我的猜测是,这是不可能的(没有删除代码)。但是,为什么不仅仅实现所需的构造函数呢?Lombok旨在使您的生活更轻松,如果Lombok无法解决某些问题,请按照老式的方式进行操作。 控制台输出:

  • 映射对构造函数没有限制或要求 (__init__ )类的方法。您可以自由地为您想要的函数要求任何参数,为ORM未知的实例分配属性,并且通常在编写Python类的构造函数时做您通常会做的任何其他事情。 sqlAlchemy ORM不调用 __init__ 从数据库行重新创建对象时。ORM的过程有点类似于Python标准库的 pickle 模块,调用低级 __new__ 方法,然后在实例上悄悄地恢复属