开发笔记一

j2se中加载图片等资源:
如果加载不能成功,
测试该方法,定能找到问题所在。

public class NewMain {

 public NewMain () {
  System.out.println(this.getClass().getResource(""));
  System.out.println(this.getClass().getResource("."));
  System.out.println(this.getClass().getResource(".."));
  System.out.println(this.getClass().getResource("/"));
  System.out.println(this.getClass().getResource("point.png"));
  System.out.println(this.getClass().getResource("/point.png"));
  System.out.println(this.getClass().getResource("./point.png"));
  System.out.println(this.getClass().getResource("../point.png"));
  System.out.println(this.getClass().getResource("icon/point.png"));
  System.out.println(this.getClass().getResource("/icon/point.png"));
  System.out.println(this.getClass().getResource("./icon/point.png"));
  System.out.println(this.getClass().getResource("../icon/point.png"));
 }

------------------------------------------------------------------------------------------------------------------------

Frame.pack()与frame.validate()方法的区别2009-10-15 17:39 java 程序种经常用到Frame.pack();
  Frame.pack()这个方法的作用就是根据窗口里面的布局及组件的preferedSize来确定frame的最佳大小。
  Frame.pack()与frame.validate()方法的区别;
  frame.validate()是验证frame中的所有组件,并不会调整frame的大小.
  frame.validate()应用
  动态添加或者删除某些控件后,为了实时展现操作后的结果,
  就必须用validate,invalidate和repaint这三个函数。
  当前使用不当,会导致容器从新布局时出现闪烁

------------------------------------------------------------------------------------------------------------------------


ArrayList、Vector和LinkedList实现了所有List接口的操作,并允许存储null值。

1.实现方式

ArrayList和Vector是List接口的可变长数组实现,即动态数组(Object类型的数组)。new ArrayList()时,底层会生成一个长度为10的数组来存放对象,如果预先知道list会存放多少个对象的话,最好通过new ArrayList(int length)的方式先确定数组的最小长度,如new ArrayList(50),这样能提高底层的效率。

LinkedList是List接口的双向循环链表实现(这意味这其可以作为堆栈和队列来使用)。

2.性能

ArrayList和Vector创建机制:当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

ArrayList和Vector操作性能:插入/删除一个元素需要将该元素后面的所有元素后移/前移一位,所以插入/删除操作很慢;允许直接按序号索引数组元素,所以遍历查找数据很快。具体解释:ArrayList和Vector中,从指定的位置(用index)检索一个对象,或在集合的末尾插入、删除一个对象的时间是一样的,可表示为O(1)。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?因为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行(n-i)个对象的位移操作。

LinkedList操作性能:插入/删除一个元素只需要用指针记录本项的前后项即可,所以插入/删除操作很快;按序号索引数据需要进行前向或后向遍历,所以遍历查找数据很慢。具体解释:LinkedList中,在插入/删除集合中任何位置的元素所花费的时间都是一样的 --> O(1);它在进行索引一个元素的时候比较慢,为O(i),其中i是索引的位置。补充:在进行插入/删除操作前必须先要遍历查找到操作位置,即访问任意一个索引都要求跨越多个节点。插入/删除操作时除了有跨越多个节点(遍历插入点时需要跨越多个节点)的性能开销之外,还要有另外一个开销,即创建节点对象的开销。这个遍历过程也是要消耗资源的。在优势方面,LinkedList实现的插入和删除操作没有其他开销,因此,插入-删除开销几乎完全依赖于插入-删除点离集合末尾的远近。

3.是否线程安全(是否同步)

ArrayList的全部public方法均未同步。Vector对几乎所有的方法都进行了同步(线程安全,多线程时使用),所以通常性能上较ArrayList差一些。

LinkedList的全部public方法均未同步。

如果要从Java SDK得到一个线程安全的"双向链表",你可以利用一个同步封装器从Collections.synchronizedList(List)得到一个同步封装的LinkedList。然而,使用同步封装器相当于加入了一个间接层,它会带来昂贵的性能代价。当封装器把调用传递给被封装的方法时,每一个方法都需要增加一次额外的方法调用,经过同步封装器封装的方法会比未经封装的方法慢二到三倍。对于象搜索之类的复杂操作,这种间接调用所带来的开销不是很突出;但对于比较简单的方法,比如访问功能或者更新功能,这种开销可能对性能造成严重的影响。

这意味着,和Vector相比,经过同步封装的LinkedList在性能上处于显著的劣势,因为Vector不需要为了线程安全而进行任何额外的间接调用。如果你想要有一个线程安全的"双向链表",你可以复制LinkedList类并让几个必要的方法同步,这样你可以得到一个速度更快的实现。

4.在网上看到一个实测结论:ArrayList和Vector通常比LinkedList和同步封装之后的LinkedList有着更好的性能。即使在你认为LinkedList可能提供更高性能的情况下,你也可以通过修改元素加入的方式从ArrayList争取更好的性能,例如翻转集合元素的次序。 有些情况下LinkedList会有更好的性能,例如,当大量元素需要同时加入到大型集合的开头和末尾时。但一般而言,我建议你优先使用ArrayList/Vector类,只有当它们存在明显的性能问题而LinkedList能够改进性能时,才使用LinkedList。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ForWayfarer/archive/2008/09/13/2921902.aspx


J2ME开发建议:

1 非常general的,适用于所有java程序:少用字符串连接,多用StringBuffer
2 尽量用固定大小的数组代替使用Vector
3 如果可以不使用新class就能实现功能,就不要增加新的class,因为每个class都有一定的内存开销
4 使用有限的面向对象,因为纯粹的OO往往意味着更多的虚方法,更多的层次关系,更多的class
5 考虑使用public域(即数据成员)代替getter和setter
6 对确定不必被继承的方法使用final修饰符
7 使用BufferedInputStream或BufferedReader来包裹输入流
8 发行之前使用混淆器处理你的classes,除了能防止别人任意反编译偷窥你的程序,也能减小class文件的尺寸,因为混淆器往往用较短的字符串代替原来的变量或方法名。

想获得服务器上最新的代码---------->与资源库同步
想恢复到我当时撤销刚才的操作------->还原
7.图标说明
    7.1灰色向右箭头:本地修改过
    7.2蓝色向左箭头:SVN上修改过
    7.3灰色向右且中间有个加号的箭头:本地比SVN上多出的文件
    7.4蓝色向左且中间有个加号的箭头:SVN上比本地多出的文件
    7.5灰色向右且中间有个减号的箭头:本地删除了,而SVN上未删除的文件
    7.6蓝色向左且中间有个减号的箭头:SVN上删除了,而本地未删除的文件
    7.7红色双向箭头:SVN上修改过,本地也修改过的文件


本文来自[Svn中文网]转发请保留本站地址:http://www.svn8.com/svnpz/20090418/4733.html


每次打开Eclipse的时候,Eclipse默认的会加载一些工程项目,这些工程项目都是我们以前做的,但是没有及时从项目列表中删除的!所以我们经常将暂时用不着的项目直接从当前项目浏览器移除,不然的话Eclipse得启动将会变得越来越缓慢。
   但是有时候我们加载一些以前自己的项目时候会遇到一些问题,比如加载一个j2me的项目,如果我们直接从菜单栏中点击 File -> Import -> General -> Existing Projects into Workspace,然后选中 Select root directory 单选按钮,接着再点击 Browse... ,找到项目所在的目录加载进来。这样虽然可以把 J2me的工程加载进来了,这时候你会发现加载的工程出现了错误,而且也运行不起来。
   这会是什么原因导致的呢?其实这是按照上面的方法所导入的工程项目是以一个标准的 Java Project所导入的,而不是将其当做一个 J2me 的 J2ME Midlet Suit的工程所引入,自然工程的构建构建路径中没有将J2ME所使用的J2ME的类库所包含进来!所以出现错误也是情理之中的!
   好了,了解了原因后该怎么导入J2ME的工程呢!之前我也上网查了,很多网友都说再建个J2ME的工程,将哪些文件包的什么的直接拷贝进来!当然,可以这么做,想必比大家也不愿这么做!如果说真的只能做的话,只能说是Eclipse的一个bug了。
   后来发现了一种还算好的方法,那就是我们可以按建一个J2ME工程的步骤来,只不过将要建立的工程名字和我们想加载的J2ME工程同名,当然建立工程的目录也要和想加载的J2ME的工程同目录,这样点击一路Next下去就将J2ME项目加载进来了,当然是可以直接运行的!

文以载道  成语词条: 文以载道
  成语发音: wén yǐ zài dào
  成语释疑: 载:装载,引伸为阐明;道:道理,泛指思想。指文章是为了说明道理,弘扬精神的。
  成语出处: 宋·周敦颐《通书·文辞》:“文所以载道也。轮辕饰而人弗庸,徒饰也,况虚车乎。”
  成语示例: 古人说“文以载道”,用现在的话说,写文章就是表达思想。(郭沫若《关于文风问题答〈新观察〉记者问》)

线程的用法(在某个方法里使用Thread线程)2010-01-26 13:38    public void read()
    {

        new Thread()
        {


            public void run()
            {
       //这里写要执行的代码


            }
        }.start();
    }
 

1,在jframe中画图,不断调用repaint()方法时,界面会闪烁。正确的做法是在jframe中添加一个jpanel,在jpanel中绘画。
2,jpanel中的事件没有被侦听器接听到,原因可能是该jpanel没有获得焦点。需要在jpanel构造方法中设置:this.setFocusable(true);
3,类 JComponent:该类是除顶层容器外所有 Swing 组件的基类。有关它的paint方法:
public void paint(Graphics g)由 Swing 调用,以绘制组件。应用程序不应直接调用 paint,而是应该使用 repaint 方法来安排重绘组件。
此方法实际上将绘制工作委托给三个受保护的方法:paintComponent、paintBorder 和 paintChildren。按列出的顺序调用这些方法,以确保子组件出现在组件本身的顶部。一般而言,不应在分配给边框的 insets 区域绘制组件及其子组件。子类可以始终只重写此方法。只想特殊化 UI(外观)委托的 paint 方法的子类应该只重写 paintComponent。

搜狗v模式下输入英文字母:
不用设置,你想输字母的时候,比如说“abc”,直接打“abc”然后按回车不要按空格就好了。

原文地址:https://www.cnblogs.com/chaohi/p/2330338.html