Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动管理Java对象_Java_Object - Fatal编程技术网

自动管理Java对象

自动管理Java对象,java,object,Java,Object,我对Java还是有点陌生,对对象应该如何使用感到非常困惑。我知道 object object = new object(); 但这些必须手动访问 假设我想创建一个粒子效果。小白点出现在屏幕中心,并以随机角度缓慢移动到屏幕边缘。当他们接近时,他们走得更快。最后,如果它们离开视图区域,则会将其删除 如果我想对对象执行此操作,我需要能够: 自动生成对象 从每个对象(其X和Y坐标)收集数据 以便可以渲染它们 让对象每帧更新一次,以便提高速度 当对象超出边界时销毁它们 我如何自动创建/销毁对象,并从

我对Java还是有点陌生,对对象应该如何使用感到非常困惑。我知道

object object = new object();
但这些必须手动访问

假设我想创建一个粒子效果。小白点出现在屏幕中心,并以随机角度缓慢移动到屏幕边缘。当他们接近时,他们走得更快。最后,如果它们离开视图区域,则会将其删除

如果我想对对象执行此操作,我需要能够:

  • 自动生成对象
  • 从每个对象(其X和Y坐标)收集数据 以便可以渲染它们
  • 让对象每帧更新一次,以便提高速度
  • 当对象超出边界时销毁它们
我如何自动创建/销毁对象,并从所有对象中获取数据,而不依赖于存在多少对象? 现在,我的游戏(我只在Java中制作了1个)仅限于使用数组和一种细胞自动机,但这不适用于更大的游戏


这可能是以前问过的,也可能有关于这方面的教程,但我所能找到的只是手工制作对象。我可能是在搜索错误的东西,如果是这种情况,我很抱歉。

在java中,您不会销毁对象。还有一个垃圾收集器,它可以销毁未使用的对象。将空值赋给保存对象的变量就足够了

您可以通过System.gc()手动调用垃圾收集器。

创建对象 我不知道你所说的“自动创建对象”是什么意思,但这就是构造函数的作用。定义构造函数时,可以在其中添加各种实现和初始化详细信息,以准确地创建变量。看见所以说你有一个观点

public Point(int x, int y) {
    this.xPos = x;
    this.yPos = y;
    this.color = Color.BLUE;
    this.size = Constants.DEFAULT_POINT_SIZE;
    // ... etc.
}
从对象收集数据 在这些类中获取和设置信息将通过getter和setter(也称为getter和setter)实现

要从现有的所有对象收集数据,而不考虑对象的数量,只需将它们全部添加到某种类型的
列表中即可。您甚至可以将它们添加到构造函数中的
private static ArrayList
,并静态访问
ArrayList
以获取您的信息,而无需程序的另一部分“知道”有多少

增量GUI更改 有几种方法可以实现逐帧更改,但我更喜欢使用
计时器
ActionListener
。这允许您设置帧速率,并在
public void actionPerformed(ActionEvent)
方法中执行所需的操作。对于初学者来说,这有点复杂,因此您可能需要进行大量的阅读和测试。看看,让你开始

破坏物体 没有像C++那样的析构函数。取而代之的是,有一个周期性地(偶尔地)运行的进程,它销毁它认为不再有指向它们的引用的所有对象。因此,如果希望垃圾收集器在对象超出边界时拾取对象,只需将对它们的所有引用分配给null。虽然这不会立即销毁对象,但它可以确保垃圾收集器在下次运行时对对象进行“标记”

如前所述,
System.gc()
是一种“调用”垃圾收集器的方法。但是,您不应该假设调用它将强制垃圾收集器运行。在API中,它表示此调用“建议”系统运行垃圾收集器。最终,它是不可靠的,垃圾收集通常超出了您的控制范围

发件人:

调用gc方法意味着Java虚拟机将精力花在回收未使用的对象上,以使它们当前占用的内存可用于快速重用。当控件从方法调用返回时,Java虚拟机已尽最大努力从所有丢弃的对象中回收空间

另外,在创建对象时,请确保将类名大写,这是一个次要的问题。:)


<强>对于OP的特定用途:如果你关注的是一个游戏环境,你正在“绘制所有存在的东西”(因此你想立即销毁对象,以确保游戏正确运行),考虑使用<代码>列表< /> >或<代码> SET并用你想画的东西填充它。然后在它们离开屏幕时将其移除


参考文献:

自动生成对象

回答:您将始终需要
new
newInstance
在java中创建对象。这将基于算法。举个例子。您可以有一个二维数组来容纳对象,并且基于X,Y位置,您可以将对象放入该数组中,并使用Random类生成X,Y位置

e、 g

从每个对象(它们的X和Y坐标)收集数据,以便渲染它们

回答:如上所示,为您想要的对象声明属性,就像我为点[x,y]声明的那样

让对象每帧更新一次,以便提高速度

回答:使用循环或计时器等提高生成速度

当对象超出边界时销毁它们

回答:只需将其初始化为null,它就会被GC’ed。如果您面临OutOfMemory问题,那么有几种方法可以解决它,但除非有必要,否则您不应该专注于此

 point = null;//This is it.

我将使用一个对象集合来表示您的
Partitle
。这可能在现实中使用数组,但我会担心你需要程序做什么
Object object = new Object();
    //Initialize pallete
    Point [][] pallete = Point int [800][600];
    //Generate Objects

    Random random = new Random();
    int x = random.nextInt(800);
    int y = random. nextInt(600);

    Point point = new Point(x,y);

    //Put inside Pallete

    pallete[point.x][point.y] = point;
 point = null;//This is it.