我有一个用Java编写的应用程序.In存储在多个文件中.它使用不同的类和不同的方法.代码又大又复杂.如果我有代码的图形模型(某种有向图),我认为理解代码会更容易.是否有一些标准的代码可视化方法.我正在考虑使用UML(不确定它是一个正确的选择).谁能推荐我一些东西?
添加:
我考虑两种可能性:
增加2:
有免费的东西会很高兴.
这是一个ArrayList的简单排序程序:
ArrayList<String> list = new ArrayList<String>();
list.add("1_Update");
list.add("11_Add");
list.add("12_Delete");
list.add("2_Create");
Collections.sort(list);
for (String str : list) {
System.out.println(str.toString());
}
Run Code Online (Sandbox Code Playgroud)
我期待这个程序的输出为:
1_Update
2_Create
11_Add
12_Delete
Run Code Online (Sandbox Code Playgroud)
但是当我运行这个程序时,我得到输出为:
11_Add
12_Delete
1_Update
2_Create
Run Code Online (Sandbox Code Playgroud)
为什么这样,如何让ArrayList按预期输出显示排序?
我正在读"Java编程语言 "一书.在解释最重要方法的章节中,它说:
使覆盖方法(在子类中)比在超类中更难访问会违反超类的合同......
整个案文是可以理解的.我唯一的问题是什么是超类的合同?合同对Java类意味着什么?
在我正在阅读SCJP资格的书中有一个声明,它说:
没有公共类的文件没有命名限制
这让我问,你为什么要这样做?
如果没有公共类,那么其他类如何导入和使用该文件呢?我能看到的唯一目的是文件本身是独立运行的,也可能是奇数,例如将整个应用程序放在一个文件中
我正在设计一款游戏.在游戏中,各种游戏对象根据他们需要做的事情扩展不同的接口(和一个抽象类),并传递给处理程序,处理程序按照定义的时间间隔处理具有特定接口的项目(它们实际上将所有工作分散开来以一种简洁的方式确保始终处理输入/视频/等).
无论如何,其中一些对象扩展了抽象类Collider并传递给CollisionHandler.Collider类和处理程序负责碰撞中涉及的所有技术,并且只要求对象实现collidesWith(Collider c)函数,并根据它碰撞的内容进行修改.
许多不同类的对象将彼此碰撞,并且将根据它们碰撞的对象的类型及其特定属性而以非常不同的方式起作用.
完美的解决方案似乎是像这样使用instanceof:
class SomeNPC extends Collider{
collidesWith(Collider c){
if(c instanceof enemy){
Fight it or run away depending on your attributes and theirs.
}
else if(c instanceof food){
Eat it, but only if it's yellow.
}
else if(c instanceof BeamOfLight){
Try to move towards its source.
}
}
}
Run Code Online (Sandbox Code Playgroud)
这实际上似乎是一个合法的地方.我只是感觉不舒服.就像一个goto在某些特定情况下有意义一样.设计是否对任何人都有根本感觉?如果是这样,你会建议做什么来实现相同的行为.
我发现了使用Java的Random类生成随机数的奇怪之处.基本上,如果使用近似种子创建多个Random对象(例如介于1和1000之间),则每个生成器生成的第一个值几乎相同,但下一个值看起来很好(我没有进一步搜索).
以下是两个第一个生成的双打,种子从0到9:
从991到1000:
这是一个图,显示了种子从0到100,000生成的第一个值.
基于种子生成的第一个随机双精度:

我搜索了有关这方面的信息,但我没有看到任何涉及这个确切问题的信息.我知道LCGs算法存在很多问题,但我不知道这个问题,我想知道这是否是一个已知问题.
而且,你知道这个问题是仅针对第一个值(或前几个值),还是更常见且使用密切种子应该避免?
谢谢.
我们将Java 6 JRE与我们的应用程序安装程序捆绑在一起,以便它可以在任何机器上运行,但这会使应用程序变得更重一些.所以我们计划减少JRE的规模.如果有人做过这类任务,你能否提供指导以推进这项工作?
几年前在Java开发时,我了解到如果我有一个字符而不是带有一个字符的字符串,最好附加一个字符,因为VM不必对其内部字符串中的字符串值进行任何查找池.
string stringappend = "Hello " + name + ".";
string charappend = "Hello " + name + '.'; // better?
Run Code Online (Sandbox Code Playgroud)
当我开始使用C#进行编程时,我从未想过它与"VM"相同的可能性.我遇到了C#String Theory-String实习池,它说C#也有一个内部字符串池(我想如果不这样会很奇怪)所以我的问题是,
当连接到关于C#的字符串或者它只是乱码时,在附加char而不是字符串实际上有什么好处?
编辑:请忽略StringBuilder和string.Format,我更感兴趣的是为什么我会替换"." 用'.' 在代码中.我很清楚这些类和功能.
java中的任何类都有.class,我想知道.class是否是一个静态方法?或者它是一个公共静态字段?
boolean alwaysTrue = (String.class == Class.forName("java.lang.String"));
Run Code Online (Sandbox Code Playgroud) java ×9
class ×2
arraylist ×1
c# ×1
findbugs ×1
inheritance ×1
instanceof ×1
jvm ×1
polymorphism ×1
random ×1
schema ×1
sorting ×1
synchronized ×1
uml ×1