加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java:为什么不声明传递引用的静态intead?

发布时间:2020-12-15 05:21:14 所属栏目:Java 来源:网络整理
导读:假设我们想制作一个你必须收集宝石的游戏.所以我们需要一个Gem类,一个GemSpawner类,当然还有MainActivity类. public class MainActivity { public static void main(String[] args) { ListGem gems = new ArrayListGem(); GemSpawner gs = new GemSpawner(ge
假设我们想制作一个你必须收集宝石的游戏.所以我们需要一个Gem类,一个GemSpawner类,当然还有MainActivity类.

public class MainActivity {
    public static void main(String[] args) {

        List<Gem> gems = new ArrayList<Gem>();

        GemSpawner gs = new GemSpawner(gems);

        //...
    }
}

在这种情况下,我们使用gems创建了一个List,并通过它的构造函数将其传递给GemSpawner,因此gs可以使用以下命令将gems添加到列表中:

gems.add(new Gem(10,50,"red")); //should represent Xpos,Ypos,and color.

但这不会更好:

public class MainActivity {

    public static List<Gem> gems = new ArrayList<Gem>();

    public static void main(String[] args) {

        GemSpawner gs = new GemSpawner();

        //...
    }
}

现在,GemSpawner(gs)可以使用以下命令添加宝石:

MainActivity.gems.add(new Gem(10,"red"));

朋友只向我展示并解释了上述方法,但下面的方法不是更有效吗?

解决方法

这是一个比你可能意识到的更复杂的问题.

许多开始使用Java编写的人开始将我的所有内容完全静态化,因为你不必传递引用 – 它使你的代码“更简单”.

但是,当您的代码变得更复杂时,您就开始遇到问题.这些问题出现了3条主线:

>封装
>抽象
>测试

Encapsulation

这是一个对象不应该允许直接访问其成员的想法,它应该被告知“做事”,然后它会在内部完成,而不会暴露这是如何完成的.

这背后的想法是你试图避免过于紧密地将你的类相互耦合.

这引导我们进入下一点

Abstraction

在Java中,这通过抽象类和接口表示.

这个想法是你的GemSpawner只是产生宝石的定义.内部如何做到这一点真的不是一个人的事,而是它自己的事.

在Java中,您无法真正地将静态方法与关键的OO继承理念进行协调.

静态方法是继承的,但它们被遮蔽而不是被覆盖,因此您不能(轻松地)修改它们的行为.

这导致我们进入

测试

随着程序变得越来越复杂,这个主题越来越多.

你如何测试“Hello World”程序?好吧,你运行它,看它是否打印“Hello Wrld” – 在这种情况下有一个错误.

一旦程序变得更复杂,你就不能简单地做到这一点.你需要分开你的程序并测试“单位”.被称为Unit Testing.

在这里你的静态引用真的开始引起问题.您无法将程序分离为离散单元,因为所有内容都通过直接类引用绑定在一起.而且你不能模拟静态方法的行为,因为它们不容易被覆盖.

所以,总结一下.是;它可能更快更容易在任何地方放置静态而不是传递引用.但是,如果你计划编写像游戏一样复杂的东西,你应该考虑使用Java来充分发挥它的潜力.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读