发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA
1 2 3 4 ... 9 下一页 Go 9

我改了个名字,设成了静态,这样就不用new了!谈谈这句话所代表的

         
2003-08-04 09:03
赞助商链接

新手们往往喜欢使用静态的方法,有的因为不用new,有的看到ThinkInJava上说new的过程非常costly,认为使用静态方法不用new从而有更快的执行效率。

希望能够就静态方法的使用展开讨论,大家共同进步。

2003-08-04 09:08

阎宏的《Java与模式》中12章,有一句话:
"因为一个方法是不是静态的,对于Java语言来说是一个很大的区别,必须在一开始就加以考虑。"
以此作为引子,希望能够讨论出几条Killer理由,让大家增加static方法的使用造诣。

2003-08-04 09:36

我觉得每new一个对象就要占用一部分资源。
而且我很讨厌在class的开头引入一大堆的包,我更喜欢通过封装和继承,使一个class只要引入一、两个class就好了,我的jsp就是这样,只引入一个bean,所有jsp要用的功能都用bean封装一下。(当然这很容易,只要写一个公共bean,包含常用的方法,然后具体的页面bean继承这个公共bean,加入自己特质的一些东西就OK。)

再说static,我是参照了java API的做法,你看Integer.parseInt()是一个静态方法,我看了源代码,Integer.parseInt()都没有用线程安全的关键字sy(记不全了)。再想想自己平时调用java API时很多方法都是直接调用,不用new的。我不是太懂,我自己分析的是,只要不需要在对象里保存特有的信息,那么就可以作成static的。比如Calendar,因为必须保存一个时间点的时间,因此Calendar需要new,SimpleDateFormate,因为要保存格式信息因此也必须new。Integer.intValue()要先保存整数值进去才可以调用,因此就必须new,而Integer.parseInt(String str)由于要转化的字符有参数输入,调用前后不需要保存任何信息因此就是静态。

我懂得不多,参照了java API的写法,我觉得这个方法应该用static。

2003-08-04 10:32

package javanet;

public class TestStatic {

public TestStatic() {
}
public static void doSomething() throws Exception{
Thread.sleep(10);
}
public void doOtherSomething() throws Exception{
Thread.sleep(10);
}
public static void main(String args[]) throws Exception{
String rtn="static ";
long start=System.currentTimeMillis();
rtn+=System.currentTimeMillis()+" started.";
for(int i=0;i<1000;i++){
doSomething();
}
long end=System.currentTimeMillis();
rtn+=System.currentTimeMillis()+" end.";
rtn+=(end-start)+ " total.";
System.out.println(rtn);
start=System.currentTimeMillis();
rtn="instance "+System.currentTimeMillis()+" started.";
for(int i=0;i<1000;i++){
new TestStatic().doOtherSomething();
}
end=System.currentTimeMillis();
rtn+=System.currentTimeMillis()+" end.";
rtn+=(end-start)+ " total.";
System.out.println(rtn);
start=System.currentTimeMillis();
rtn="instance "+System.currentTimeMillis()+" started.";
TestStatic test=new TestStatic();
for(int i=0;i<1000;i++){
test.doOtherSomething();
}
end=System.currentTimeMillis();
rtn+=System.currentTimeMillis()+" end.";
rtn+=(end-start)+ " total.";
System.out.println(rtn);
}
}

2003-08-04 10:48

我的运行结果:
1。命令行:JDK1.4.1_02
D:\>javac TestStatic.java

D:\>java TestStatic
static 1059964948738 started.1059964958753 end.10015 total.
instance 1059964958753 started.1059964968767 end.10014 total.
instance 1059964968767 started.1059964978782 end.10015 total.

D:\>java TestStatic
static 1059965002546 started.1059965012560 end.10014 total.
instance 1059965012560 started.1059965022575 end.10015 total.
instance 1059965022575 started.1059965032589 end.10014 total.

D:\>java TestStatic
static 1059965132863 started.1059965142878 end.10015 total.
instance 1059965142878 started.1059965152892 end.10014 total.
instance 1059965152892 started.1059965162906 end.10014 total.

2。Jbuilder7 with JDK1.3.1

static 1059965207821 started.1059965217986 end.10165 total.
instance 1059965217986 started.1059965228080 end.10094 total.
instance 1059965228080 started.1059965238175 end.10095 total.


static 1059965260667 started.1059965270822 end.10155 total.
instance 1059965270822 started.1059965280916 end.10094 total.
instance 1059965280916 started.1059965290991 end.10075 total.

static 1059965305321 started.1059965315486 end.10165 total.
instance 1059965315486 started.1059965325590 end.10104 total.
instance 1059965325590 started.1059965335675 end.10085 total.

3。Jbuilder7 with JDK1.4.0-b92

static 1059965465762 started.1059965475916 end.10154 total.
instance 1059965475916 started.1059965486001 end.10085 total.
instance 1059965486001 started.1059965496105 end.10104 total.

static 1059965537195 started.1059965547439 end.10244 total.
instance 1059965547439 started.1059965557534 end.10095 total.
instance 1059965557534 started.1059965567618 end.10084 total.

static 1059965618732 started.1059965628947 end.10215 total.
instance 1059965628947 started.1059965639041 end.10094 total.
instance 1059965639041 started.1059965649126 end.10085 total.

莫名其妙。









9Go 1 2 3 4 ... 9 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com