栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我的Java Game项目中是否过度使用了静态功能?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我的Java Game项目中是否过度使用了静态功能?

首先。

您不必仅仅因为这将使它在“纸上”更好而摆脱所有静态代码。

您确实必须了解实例代码(非静态)和类代码(静态)之间的区别

*当方法/属性不需要类的实例来工作时,将使用 *静态 代码(类方法/属性)。一个很好的例子是图像绘制方法:

Image.draw()

实例 方法/属性对于保持给定对象的 状态 非常有用,该对象必须与其他对象中的数据保持分开。

例如,如果您

Player
在游戏中上课,并且有两个实例,
player1
并且
player2
每个实例都有自己的得分是有意义的:

 public class Player {     private int score;     private String name;     etc..... } Player one = new Player("Player 1"); display( one.score ); Player two = new Player("Player 2"); display( two.score );

不必创建文物来保持每个玩家的得分(例如将它们放入每个索引均为属性的数组中并使该数组静态等)。

其次

您可以

object1.atr2.other.next.etc
通过为对象分配适当的属性并以正确的方式执行封装来减少提到的构造。

如果一个对象

b
需要访问另一个对象的第N个元素,
a
则该属性可能属于该对象
b
而不是该对象,
a
或者该对象
a
应该提供一种避免暴露其内部的方法。

它甚至使代码更易于阅读:

即。

public void draw(Graphics2D) {  if( this.game.needsDrawing() ) {       this.game.draw();  }}

代替:

public void draw(Graphics2D) {    if (this.game.time() > this.timer) {        this.game.image.draw(this.tiles[this.game.animation.get("tileAnim")], x, y, null)    }}

再次,这取决于情况,在某些情况下您可能不需要实例(同样,例如Image的draw()实用程序方法)

最后。

实例方法允许您使用多态,而类方法则不允许(至少在Java和其他静态类型的语言中)。

因此,如果您的代码是实例代码,则可能会受益于使用运行时委托和多态性。以状态模式为例,如果所有代码都是静态的,则不能使用它,但是可以使用实例代码:

class Game {     GameState state = GameState.getInitialState( this );     void run() {         while( state.alive ) {   do X Y Z   state.updateState();          }     }  }class GameState {    Game context;    static GameState getInitialState( Game g ) {        return new StartGameState(g);    }    void updateState();}class StartGameState {     void updateState() {         if( this.context.someCondition() ) {  this.context.state = new MidGameState();         }     } }class MidGameState {     void updateState() {         if( this.context.someOtherCondition() ) {  this.context.state = new EndGameState();         }     } }class EndGameState {     void updateState() {        Game over...      } }

再一次,仅在面向对象方面有意义时,例如对象是否具有需要数据的属性?如果不是,最好将那部分代码保持静态。

所有这些概念(封装,多态性,抽象,继承等)都是OO技术的本性,并已包含在OOA /
D中,
尽管它们看起来像语法糖(在大多数情况下是),您的经验会告诉您何时应该有一些作为
代码和何时作为 实例 代码的东西。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/464322.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号