假设我有以下课程:
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()示例的不同字段。
2条答案
按热度按时间uttx8gqw1#
在面向对象编程中,类的示例只保存数据。方法属于类,并且是跨所有对象共享的代码。
数据(对象的属性)的目的是确定方法的行为方式。因此,根据数据的不同,每个方法的行为会有所不同,但每个对象的方法代码不会改变。
当示例化类的10000个对象时
Human
您正在为数据创建10000个容器,与Human
班级。这意味着您可以执行Human
在每组数据上初始化。尽管执行相同的代码块,对对象方法的调用可能会产生不同的结果。jogvjijk2#
有很多方法可以做到这一点。的确,如果您为每个输入示例化并在范围内维护一个人工对象,那么将存在大量的人工对象,但是如果在您的处理结构中,人工对象超出范围,那么垃圾收集最终将为您清理。
关于是否应该在输入中包含字段,而不仅仅是字符串,还有一个完全不同的争论,但这是另一个问题。