解惑

解己之惑,解人之惑

作者:cherami (第62页共82页)

Java参数传递方式

其实这个问题我原来翻译(破除java神话之二:参数是传址的 )、转帖别人的详细解释(Java 应用程序中的按值传递语义 )和专门解释( 我对《Java 应用程序中的按值传递语义》的理解 )过,不过现在看来,原来翻译或者解释的角度是有问题的,从底层的角度解释并不直观,在交流的时候也容易引起误解,最终不能达成一致意见。下面以最终的效果来解释参数的传递方式:

1、对于原始数据类型,也就是int、 long、char之类的类型,是传值的,如果你在方法中修改了值,方法调用结束后,那个变量的值没用改变。
2、对于对象类型,也就是Object的子类,如果你在方法中修改了它的成员的值,那个修改是生效的,方法调用结束后,它的成员是新的值,但是如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象。
阅读全文

Java类的完整构造执行顺序

这里只说一个完整的结果,至于为什么是这样的顺序,可以参考我以前的文章:深入剖析java类的构造方式

  1. 如果父类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块
  2. 如果类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块
  3. 将类的成员赋予初值(原始类型的成员的值为规定值,例如int型为0,float型为0.0f,boolean型为false;对象类型的初始值为null)
  4. 如果构造方法中存在this()调用(可以是其它带参数的this()调用)则执行之,执行完毕后进入第7步继续执行,如果没有this调用则进行下一步。(这个有可能存在递归调用其它的构造方法)
  5. 执行显式的super()调用(可以是其它带参数的super()调用)或者隐式的super()调用(缺省构造方法),此步骤又进入一个父类的构造过程并一直上推至Object对象的构造。
  6. 执行类申明中的成员赋值和初始化块。
  7. 执行构造方法中的其它语句。

阅读全文

临城作弊大法

个人感觉模拟城市里面最大的两个BUG就是临城和垃圾焚烧厂,如果把这两个BUG利用起来,就可以利用一个小城市解决整个地图的垃圾问题,这样其它的城市的环境就可以大大的缓解。详细方法如下:

  1. 选择一个小城市开局,城市就叫垃圾城,先划街道,宽度为4,程度不限,但是为4的倍数,例如16,然后把路全部连好,然后全部盖垃圾焚烧厂,开始可能只能建三个钱就用得差不多了,注意把焚烧厂得经费调整为0。
  2. 然后建一排低密度住宅,旁边丢一个风力发电厂。
  3. 在旁边建一个其它得城市,注意和垃圾城有道路连接。
  4. 回到垃圾城进行临城交易,把进口量调到最大,全速运行城市,慢慢的把焚烧厂建满。
  5. 现在就可以开始其它的城市的建设了,注意要一个挨着一个的发展。

计划添加的功能

有了刚才的前车之鉴,把刚刚想到的两个功能记下来:

  • 一个是利用自定义的特性实现一个插件,可以自己设定日志为推荐日志,因为有些日志可能就是自己发牢骚的,而有些是自己感觉比较好的,这样可以在那些什么最新日志、热门日志和随机日志之外给出一个推荐日志
  • 第二个是实现一个像keso的昨日新闻类似功能的自动发帖功能,将自己当天收录在delicious上的书签自动发布一下。

灵感稍纵即逝

刚才去上厕所的时候突然有一个灵感,是关于那个单元测试框架的,但是回来刚刚准备记下来的时候却忘记了,到现在也没有想起来,很遗憾。

如果手边有个电脑什么的,随便记一下都可以,但是在上厕所的时候怎么办?回到电脑前想了一下其他的事情,结果就忘记了,不知道有没有什么好的办法解决这个问题。

好像不止一次出现这个问题了,难道是真的老了?

空气污染--不可能的任务?

早上的时候已经谈了花园对高科技的帮助,晚上回家继续,六项指标(环境、安全、教育、卫生、交通以及地价)中,其他的已经差不多了,都在80以上了,其中安全、教育和卫生几乎是100,但是环境是全红,看了详细数据,发现水污染问题不大,建了一个水处理厂就差不多了,但是空气污染就比较困难了,把高污染工业全部铲除以后那些电厂还说有,在周边种了很多树,效果不是很明显,但是感觉更难处理的还是居住区的道路空气污染,我已经建了密布的地铁,但是保留了公交车,看来下一步就是铲除公交车系统,全部更换为地铁系统看看效果了。

MockEJB测试框架之自动发布EJB

前段时间大致介绍了下这个测试框架,目前还没有完全完成,这里先慢慢介绍下框架得构成,这个是第一篇。

其实MockEJB提供的功能还是比较简单的,做单元测试需要我们自己写代码发布Bean,例如发布一个Session Bean:
            SessionBeanDescriptor sampleServiceDescriptor =
                new SessionBeanDescriptor( SampleService.JNDI_NAME,
                SampleServiceHome.class, SampleService.class, new SampleServiceBean() );
             mockContainer.deploy( sampleServiceDescriptor );

其实每个EJB工程都应该有现成的EJB配置文件(ejb-jar.xml、jboss.xml、jbosscmp-jdbc.xml),因此这个发布工作应该可以自动完成,思路就是自己读取那些配置文件获得EJB的配置信息。
然后就是要修改lookup的过程,由于我们的工程提供一个共通的接口来进行lookup,所以问题就演变为实现一个那个接口。对于其它的项目,应该是类似的,如果是直接使用Context的lookup,那么对于MockEJB而言就是扩展MockContext,覆盖lookup方法,先查找,找到目标就返回,没有的话尝试根据读取的EJB配置信息自动发布需要的EJB。这样,我们就在单元测试中可以直接获取EJB,而不用再进行发布了。

大型花园对高科技很有帮助

今天建了一个中型的城市,这次的目标是要让这个城市全优,就是环境、安全、教育、卫生、交通以及地价都是全绿,而且争取做到全满。
在左边的地方有一片高科技,但是不知道为什么慢慢的黑了很多楼,等了很长时间也没有什么改善,后来突然记起来在模拟城市中文网看到过一个帖子说其实花园对工业区也是有帮助的,因此就在那个黑的那一片选了个中间位置建了一个大型花园,效果可以说:
立竿见影
推荐大家也试试。但是大型绿地似乎效果要差一些,另外这些设施对制造业和高污染的效果不明,因为那些楼不大可能变黑,没有办法试验。

解析XML的时候完全忽略DTD

之所以要这么做是因为我们的XML肯定是合法的,不需要验证,另外我们的网络需要代理才能上网,解析的时候会很慢,不需要解析的时候运行只要不到一分钟,解析要两分钟以上,有时候甚至需要10分钟左右。
可能有人认为很简单,只需要设置DocumentBuilderFactory.setValidating(false),其实这个只能让解析器不验证DTD,解析器还是会读取DTD的,解决的方法是实现EntityResolver接口,对于我们的系统,我实现的类的代码为:
    public class IgnoreDTDEntityResolver implements EntityResolver
    {
        public InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId) throws SAXException,
                java.io.IOException
        {
            if (systemId.equals("http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_2.dtd")
                    || systemId.equals("http://java.sun.com/dtd/ejb-jar_2_0.dtd")
                    || systemId.equals("http://www.jboss.org/j2ee/dtd/jboss_3_2.dtd"))
                return new InputSource(new ByteArrayInputStream("<?xml version=’1.0′ encoding=’UTF-8′?>".getBytes()));
            else
                return null;
        }
    }

稍微说明下方法的两个参数publicId和systemId,假设DTD声明为:
<!DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 3.2//EN" "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_2.dtd">
那么publicId为-//JBoss//DTD JBOSSCMP-JDBC 3.2//EN
systemId为http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_2.dtd
你可以根据自己的需要进行处理。

模拟城市新手入门方法

玩模拟城市也有段时间了,现在对于实现收支盈余完全没有问题,简单的说说我的感觉:

  • 对于开局喜欢什么都建的人,最重要的就是调整学校医院的预算了,要逐个调整,开始只要给10%左右的预算就足够了,不够的话他们会罢工的,再给他们加就可以了,消防局和警察局一定不要减少预算,基本上马上会罢工的
  • 城市收支的关键就是人口,要增加人口,要建那些奖励建筑,包括市长官邸、墓地、礼拜堂等,不建的话对人口的增加会有限制的
  • 人口增长的另外一个关键是供水(使用抽水站,并用水管覆盖连接到抽水站覆盖不到的地方),即使你的住宅的密度是高密度,如果不供水的话不可能出高楼,最多出低级中密度的楼
  • 刚开始不用建立太多的公园类设施,这些等到有比较多的盈余的时候再说吧
  • 也不要建标志性建筑,这些也比较费钱
  • 开始多规划一些住宅区和工业区,工业区在发电厂附近,然后住宅区不要离工业区太远
  • 开始选小城市吧,这样比较容易控制,即使你的住宅和工业区在两边,只要有公路连接,市民也不会嫌很远

只要你注意这几点,实现收支盈余应该是比较容易的。

更早的文章 更新的文章

© 2025 解惑

本主题由Anders Noren提供向上 ↑