java自己写的一个小程序

  今天在书上看到一个作者提出一个问题"怎样通过编写Java代码让Jvm崩溃",我看了之后也不懂。带着问题查了一下,百度知道里面有这样一个答案:

  1 package jvm;

  2

  3 public class Crash {

  4 public static void main(String[] args) {

  5

  6 //Object[] o = {"abc"};初始值赋值,不会有影响。

  7 Object[] o = null;

  8

  9 while (true) {

  10 o = new Object[] { o };

  11 //输出的话,jvm就不会崩溃。

  12 //System.out.println(o);

  13 }

  14 }

  15 }

  程序运行十几秒之后,控制台会出现这样的错误:

  Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

  at jvm.Crash.main(Crash.java:10)

  很明显,超出内存空间错误。

  我将原程序随意改了一下,如赋初始值等,对程序无影响。

  可是我将死循环中的o输出在控制台的时候,jvm居然一直都不崩,为什么输出的话,就不会超出内存空间呢?

  我看来,原程序能够使Jvm崩溃,是因为死循环中,通过旧对象,不断创建出新的对象,即创造的对象是互相引用的,所以GC是不会回收它们的,造成堆栈溢出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以提供一些代码示例来帮助你一个 Java 贪吃蛇小程序。 首先,你需要创建一个面向对象的类,用来描述蛇的各个部分。比如: ``` class SnakePart { int x, y; public SnakePart(int x, int y) { this.x = x; this.y = y; } } ``` 然后,你需要创建一个 Snake 类,用来维护蛇的位置和状态: ``` import java.util.LinkedList; class Snake { LinkedList<SnakePart> snakeParts = new LinkedList<>(); int direction; public Snake(int x, int y) { snakeParts.add(new SnakePart(x, y)); direction = 0; } public void move() { SnakePart head = snakeParts.getFirst(); int x = head.x; int y = head.y; switch (direction) { case 0: y--; break; case 1: x++; break; case 2: y++; break; case 3: x--; break; } snakeParts.addFirst(new SnakePart(x, y)); snakeParts.removeLast(); } } ``` 最后,你可以创建一个 GUI 程序,用来呈现贪吃蛇游戏: ``` import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class SnakeGame extends JPanel implements ActionListener { private Snake snake; private Timer timer; private Point fruit; public SnakeGame() { setBackground(Color.WHITE); setFocusable(true); snake = new Snake(40, 40); timer = new Timer(50, this); timer.start(); addFruit(); } @Override public void actionPerformed(ActionEvent e) { snake.move(); if (snake ### 回答2: 贪吃蛇是一款经典的游戏,在Java中开发一个贪吃蛇小程序可以通过以下的步骤实现: 1. 创建游戏窗口:使用Java Swing或JavaFX框架创建一个游戏窗口,设置窗口的标题、大小和关闭方式。 2. 绘制游戏画面:使用Java的图形库绘制游戏界面,包括背景、蛇身和食物等元素。可以使用二维数组或集合来表示游戏地图,每个格子可以是空白、蛇身或食物。 3. 实现蛇的移动:定义一个蛇类,包括蛇的初始长度、位置和移动方向等属性,通过监听键盘事件来改变蛇的移动方向。在每一次游戏循环中更新蛇的位置,包括蛇身的增加和移除。 4. 确定食物位置:在每一次游戏循环中判断蛇是否吃到食物,如果蛇头位置与食物位置重合,则蛇的长度增加,并重新生成食物的位置。 5. 判断游戏结束:在每一次游戏循环中判断蛇是否碰到边界或自身,如果是则游戏结束,弹出游戏结束提示框。 6. 计分和游戏速度调整:在游戏的界面上显示当前得分,并根据得分的增加调整游戏的速度。 通过以上步骤,可以初步实现一个简单的贪吃蛇小程序。为了提升游戏体验,还可以添加音效、障碍物、不同难度级别等功能来丰富游戏。 ### 回答3: 贪吃蛇是一种经典的游戏,现在我来用Java一个简单的贪吃蛇小程序。 首先,我们需要创建一个贪吃蛇的游戏窗口。可以使用Java的Swing库来创建一个窗口,并设置窗口的大小和标题。 然后,我们需要创建一个表示贪吃蛇的类。这个类包含贪吃蛇的身体坐标,方向以及移动的方法。 接下来,我们需要创建一个表示食物的类。这个类包含食物的坐标和随机生成的方法。 在主程序中,我们可以通过键盘监听来控制贪吃蛇的移动方向。根据用户的按键事件,我们可以改变贪吃蛇的方向。 在游戏的主循环中,我们可以不断更新贪吃蛇的位置,并判断是否吃到了食物。如果贪吃蛇吃到了食物,我们可以根据一定的规则来增加贪吃蛇的身体长度。 另外,我们还需要判断贪吃蛇是否碰到了自己的身体或者窗口的边缘。如果碰到了身体或者边缘,游戏结束。 最后,我们可以在窗口中绘制贪吃蛇和食物的位置,以及显示当前得分和游戏状态。 总的来说,编一个贪吃蛇小程序涉及到创建游戏窗口、贪吃蛇类、食物类,并实现用户操作、游戏逻辑和画图等功能。这只是一个简单的贪吃蛇小程序,还有很多细节和功能可以进一步完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值