为什么路径是两个//,不是一个/吗

来源:4-2 核心类MyClassLoader

嘔翔

2017-11-19 22:54

name = name.replace(".","//");

http://img.mukewang.com/5a119b160001edab06490466.jpg

写回答 关注

5回答

  • ZXPing
    2017-11-20 14:01:02
    已采纳

    别听他们胡说,为了转义是反斜杠“\\”,两个反斜杠实际代表一个反斜杠“\”。

    那为什么Java中写正斜杠“/”、“//”、“///”,甚至再多都不会有问题呢?

    那是因为Java中处理流,都会使用到File这个类,在Windows环境中,File会使用WinNTFileSystem
    这个工具类处理那些问题,再WinNTFileSystem类中,会把所有的正斜杠“/”都处理成反斜杠,再把多余的反斜杠“\”给去掉,最终会表示成转义后的一个反斜杠。

    可以测试一下:

    public static void main(String[] args) {
        File file = new File("C:\\\\\\Users///pc//////////Desktop\\工作日志.txt");
        System.out.println(file.getAbsolutePath());
    }

    输出结果为:

    C:\Users\pc\Desktop\工作日志.txt

    getAbsolutePath()的源代码为:

    public String getAbsolutePath() {
        return fs.resolve(this);
    }

    而这个fs在Windows平台下正是WinNTFileSystem这个类:

    http://img4.mukewang.com/5a126f8a000155b009470228.jpg

    http://img4.mukewang.com/5a126f8a000101ee08080357.jpg

    WinNTFileSystem则处理了这些事情。

    嘔翔

    非常感谢!

    2017-11-22 02:19:55

    共 1 条回复 >

  • 独进青楼
    2020-11-10 21:57:12

    java这个设计反人类

  • lxp_2018
    2018-03-20 17:55:07

    重写的findClass好像没被用到,而且我用MyEclispe按老师那样敲的并不会热加载类,把老师在工厂类里用到的loadClass改成findClass会报错


  • 慕数据9135882
    2017-11-20 03:27:28

    没有啊 ,感觉一个两个三个都可以

  • 葬爱家族丶冷少
    2017-11-19 23:33:14
    两个 "//" 是为了转译,直接写 "/" 编译会报错的。


Spring Boot热部署

Spring Boot热部署的原理和实现

40468 学习 · 78 问题

查看课程

相似问题