黑马程序员技术交流社区

标题: 有点儿闹不明白,大伙儿看看 [打印本页]

作者: 陶吉才    时间: 2013-6-10 16:13
标题: 有点儿闹不明白,大伙儿看看
本帖最后由 陶吉才 于 2013-6-10 22:04 编辑

在Properties的练习中,对file进行判断时,
File conFile=new  File("count.properties");
if(!conFile.exist())
{
       conFile.createFile();
}


  conFile.createFile();括号当中不写参数吗???我觉得应该是  conFile.createFile(conFile.Properties);
麻烦各位说说原理啊。io流我一塌糊涂

作者: w270307032    时间: 2013-6-10 16:46
不用
首先API的方法说明如下:
createNewFile
public boolean createNewFile()
                      throws IOException当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。检查文件是否存在,若不存在则创建该文件,这是单个操作,对于其他所有可能影响该文件的文件系统活动来说,该操作是不可分的。
注:此方法不应该 用于文件锁定,因为所得协议可能无法可靠地工作。应该使用 FileLock 机制替代。


返回:
如果指定的文件不存在并成功地创建,则返回 true;如果指定的文件已经存在,则返回 false

可能楼主想的是如果不传参数 怎么知道我们要创建的文件叫什么名字是什么类型是吧? 其实这些信息你在File conFile=new  File("count.properties")已经封装在conFile这个对象中了,所以你用conFile.createFile() ,就能达到目的了。
作者: 张歆明    时间: 2013-6-10 17:42
楼主 这个你要在语义上理解  就像你前面学习OOP的时候  
是这样讲的
人开门
名词划分法来描述事物: 人 和 门 ===》描述事物 在OOP中要定义类来实现
class 人{}
class 门{}

现在 还剩一个动作 “开”
那么 这个时候 开 是放在 人里面 还是门里面呢?
老师说的是:开门  门最清楚 因为 开门的时候 要配合着很里面许多零件
来一起运动  以达到开门的目的

这样  动作 ”开“ 定义的具体过程在门中  而不是人中
那么 人想开门怎么办?===》指挥门不就行了么 ===》调用门对象
class 门{
   private 门轴;
   private 折页;
  ....
   public  void 开门(){
    门轴xxx;
    折页xxx;
    ....
   }
}

class 人{
   public void 开门(门){
       门.开门();
   }
}

****************************
另一个你见过的情况 就是 在集合框架里面  为一个实体类 假设为Student 重写equals()方法的时候
public class Student{
.....
        public boolean equals(Object o){
                if(o instanceof Student)
                        return false;       
                //throw RuntimeException("Not a object of class Student!");
               
                Student s =(Student)o;
                return this.name ==s.name && this.math ==s.math && this.chinese ==s.chinese&& this.english ==s.english;
        }

.....
}
按理说 是不是应该在 equals中传两个参数 (Object o1, Object o2)来表示两个学生  再来比较呢?
因为 这个时候  你写程序的位置就在Student 内部  所以  已经代表了一个Student对象了  所以  就传一个参数就行了 而不是两个参数

如果传了两个参数的话  表示 这个Student的实例能判断另外两个学生是不是相等  传了一个 表示  一个学生是不是和我(this)相等
*****************************************
你这里面也是
File conFile=new  File("count.properties");
if(!conFile.exist())
{
       conFile.createFile();
}

conFile.createFile();括号当中不写参数吗???我觉得应该是  conFile.createFile(conFile.Properties);
*****************************************
你在前面File 实例化的时候 是不是已经初始化File的name和一个路径相关联了? 这个时候 conFile就代表这个路径的文件对象
而且 这个对象怎么建立的 你调用的时候肯定不清楚(底层资源么 对吧  File本身最清楚 是不是) 所以 这个createFile()的动作就是
你调用的  (就像 在人的类中  调用 门.开门)
为什么不传递参数呢?  就和刚才的Student中的equals的方法一样 他不传递参数 因为 他自己就表示你要操作的文件了  
如果传递了  是不是表示 我要创建别的文件?   


作者: 十字路口    时间: 2013-6-10 19:46
本帖最后由 十字路口 于 2013-6-10 19:48 编辑

个人理解:boolean createNewFile()
          当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
这个是jdk API中关于File类的方法的说明,conFile.createNewFile,就是创建当前对象路径下的文件,也就是count.properties文件,而且前面已经有了指定的路径和文件名,如果此处又指定不是很繁琐吗?。不知道对你有有用不?
楼上的张歆明同学,不好意思哈,不小心点到的,投了你一票反对票,后来要投支持的都不行了,我也不知道怎么改回来,希望你见谅咯。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2