小弟最近学习java文件这一块,挺晕的.File file=new File("demo") ;为什么不会在磁盘上new出一个demo文件夹.而是还必须if(!demo.exists())  file.mkdir();才会在工程文件夹里创建一个demo文件夹?我这样想的:new是调用构造器,创建对象实例,对象在堆里,堆在内层里.所以File file=new File("demo") 这句话只是在堆(内层)里有了一个File的实例,栈中变量file引用这个实例.所以调用file.getCanonicalPath()在控制台打印不出来demo路径.不知道对不对?

解决方案 »

  1.   

    public File(String pathname)    通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。如果给定字符串是空字符串,那么结果是空抽象路径名。 
      

  2.   

    这时候调用file.getCanonicalPath(),在控制台是可以打印出demo路径的……
    new其实就是在内存中申请了一块空间而已,相对于我们能看的见的对象而言,其实这个对象还没有出来,它还是个“虚的”,但是这个对象的各个方面的详细情况都已经出来了,打印它的路径怎么会打印不出来呢,只是在硬盘上不存在而已,即它只存在于内存中;后面的file.mkdir()  是把内存的数据写回硬盘,使其操作生效;至于那个if(!demo.exists()) 判断,其实它对我们操作的结果并没有影响,只是考虑到代码的执行效率问题(文件已经有了,我还做干什么,不是浪费时间么)
    就像写文件一样的,写完了不关闭,等于没做,硬盘上的文件原来什么样还是什么样子
    所以“真实”对象创建是在后处理的过程中完成的,之前的都是“虚的”,都是你脑子“想的”