java—方法是否与对象一起示例化?

gijlo24d  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(728)

假设我有以下课程:

public class Human(){

    String eyeColor;

    public Human(String faceDescription){
           this.eyecolor = determineEyeColor(faceDescription);
    }

    private String determineEyeColor(String faceDescription){
          String eyeColor;
          <algorithm that extracts the actual eye color substring">
          return eyeColor;
    }
}

在我的主要方法中,我接到了一个类似这样的电话:

String faceDescription = "<String where a face gets described in detail>";
Human human = new Human(faceDescription);

如果我现在列出10000个human()对象。determineeyecolor()方法(因为它在human类中)是否也被示例化了10000次,因此是一个很大的内存池?如果我这样规划,在资源方面是否存在实质性差异:

public class Human(){

   String eyeColor;

   public Human(String eyeColor){
          this.eyecolor = eyeColor;
   }
}

将determineeyecolor()方法放在human类的之外,并按以下方式在我的main方法中进行调用:

String faceDescription = "<String where a face gets described in detail>";
Human human = new Human(determineEyeColor(faceDescription));

方法也会在每个示例上被调用。determineeyecolor()本身的代码块在我的整个代码中也只写了1次。
唯一的区别是算法本身并没有在每个对象中示例化,对吗?我基本上没有在每个human()示例中都有10000 x determineeyecolor()。
这样做的缺点是,我不能在其他程序上立即重用这个类,因为我还需要对示例化类进行更改(将determineeyecolor()添加到示例化类中)。
这是真的吗?这个方法是在每个human()示例中示例化的,还是java能够识别并在所有对象上共享这个方法,只使用Map到human()示例的不同字段。

uttx8gqw

uttx8gqw1#

在面向对象编程中,类的示例只保存数据。方法属于类,并且是跨所有对象共享的代码。
数据(对象的属性)的目的是确定方法的行为方式。因此,根据数据的不同,每个方法的行为会有所不同,但每个对象的方法代码不会改变。
当示例化类的10000个对象时 Human 您正在为数据创建10000个容器,与 Human 班级。这意味着您可以执行 Human 在每组数据上初始化。尽管执行相同的代码块,对对象方法的调用可能会产生不同的结果。

jogvjijk

jogvjijk2#

有很多方法可以做到这一点。的确,如果您为每个输入示例化并在范围内维护一个人工对象,那么将存在大量的人工对象,但是如果在您的处理结构中,人工对象超出范围,那么垃圾收集最终将为您清理。
关于是否应该在输入中包含字段,而不仅仅是字符串,还有一个完全不同的争论,但这是另一个问题。

相关问题