作者swpoker (swpoker)
看板java
标题Re: [问题] static method使用时机?
时间Fri Jan 3 16:51:52 2014
※ 引述《henry4343 (henry)》之铭言:
: 请问一下各位,关於static method的使用时机为何?
: 以下两个例子
: 1. Book.openBook();
: 2. Book book = new Book();
: book.openBook();
: openBook(){
: system.out.println("open book");
: }
: 其实作的事情都一样,请问一下什麽情况下会用1,什麽情况下会用2呢
: 对我来说..我想偷懒的时候就会1(少打一点字...)
: 但还是希望搞懂这两种方法到底该怎麽使用比较好?
: 感谢各位
提供参考一下
我自己是用 人事时地物(或是用4W1H也可以)的原则判别
其实主要是厘清该函式应该归属於何方
例如以你的例子来说
void openBook(){
System.out.println("open book");
}
这个函式
人:
事:只有列印"open book"
时:
地:
物:没有输入也没有输出也没有异动
所以完全没差
以下是我自己定义不同的状况
openBook(){
开启书本物件并且开始进行初始化
如果档案没有 格式不对 或...则丢出错误
}
事:看起来就有点复杂了
时:应该要乎叫或是使用book物件要第一个呼叫的函式
地:要呼叫的book物件在哪里呢?
物:需要参数来找到书本物件呢?有必要回传吗?
在java之上 大胆假设一下
我认为这个函式所要使用的东东应该是跟这个函式在一起,既然在一起就不用回传什麽啦
因此就是Book里面啦
所以我草草写一下
class Book{
String bookpath;
String context;
public Book(String bookpath){
this.bookpath=bookpath;
}
void openBook(){
//我认为书本应该是某个档案
check(bookpath);
//读取内容
context=readfromPath(bookpath);
//检查内容
checkContext(context);
}
}
class TestBook{
public void testA(){
Book bookA=new Book("/book/book.txt");
bookA.openBook();
}
}
在这里我认为openBook是应该在物件范围内的
当然我也可以反之
我现在有一个Book类别,但是根据某种理由(因为我爽)
所以我不希望别人可以任意去new Book但是我又要提供Book物件给人家
然後我又懒得写
所以我想(因为什麽都是我想就对啦-->需求)
提供一个叫openBook的函式给人家就好啦
事:建构一个Book物件
地:....
物:根据输入的书本路径 回传一个Book物件给人家
Book openBook(String bookpath){
Book book=new Book(bookpath);
return book;
}
那麽在这里可以发现到所牵扯到的物件似乎都不在openBook的同一个范围
而且看起来也不需要靠某物件就可以运作
则
class BookFactory{
public static Book openBook(String bookpath){
return new Book(bookpath);
}
}
另外还有concurrence的问题 其实就是在平行运算的环境的问题 也会是
就是编译过 单一测试也过 但多执行绪环境有问题 或有奇怪的bug
原因就是对於static 不当的使用
在此提供参考
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.29.29.131
1F:推 joe7226107:推 01/03 23:37