关于JDK的源码!我的疑问!

boloverr88888 2010-01-29 07:17:58
今天突然想看看JDK的底层的具体实现。

File f = new File("dir");

f.list();//这个方法返回目录中的所有子目录和文件名

于是我想看看JDK源码是怎样实现这个方法的。

于是跳到 FILE类的list()源码部分

public String[] list() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkRead(path);
}
return fs.list(this);//fs是FileSystem的实例。
}

在FILE类中fs的声明是

static private FileSystem fs = FileSystem.getFileSystem();

FileSystem类的getFileSystem()如下

public static native FileSystem getFileSystem();//这个方法没有具体实现是怎样返回FileSystem对象的?

而FileSystem的list(File f)如下

public abstract String[] list(File f);//这又是个抽象的方法。

那具体实现到底在哪里呢?

我只是个JAVA初学者。就像个出生不久的婴儿,对一切都很好奇。

也许我很无知,但是请原谅我的无知。
...全文
617 19 打赏 收藏 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mybeautiful 2010-01-31
  • 打赏
  • 举报
回复
看到native方法了,就不需要继续了。这不是你关注的重点,你可能关心的是jdk中别人是怎么写java代码的。
WPooh 2010-01-30
  • 打赏
  • 举报
回复
......学习.........
madsion_java 2010-01-30
  • 打赏
  • 举报
回复
利用eclipse 的typ hierarchy视图就可以查看出来,方法都是在哪里被实现了,仔细看看eclipse help关于使用typ hierarchy视图的用法,很方便的就能让你找出来方法是在哪里被实现的,或者是在哪里被定义的。
pl0528 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 madsion_java 的回复:]
利用eclipse 的typ hierarchy视图就可以查看出来,方法都是在哪里被实现了,仔细看看eclipse help关于使用typ hierarchy视图的用法,很方便的就能让你找出来方法是在哪里被实现的,或者是在哪里被定义的。
[/Quote]
盗版要交税啊
pl0528 2010-01-30
  • 打赏
  • 举报
回复
利用eclipse 的typ hierarchy视图就可以查看出来,方法都是在哪里被实现了,仔细看看eclipse help关于使用typ hierarchy视图的用法,很方便的就能让你找出来方法是在哪里被实现的,或者是在哪里被定义的。
铁匠梁老师 2010-01-30
  • 打赏
  • 举报
回复
学习了,鼎起来
timeriver_wang 2010-01-30
  • 打赏
  • 举报
回复
哈哈哈,我能解决。
1,打开Java\jdk1.6.0_10\include\,会发现n个.h文件,这是C/C++的代码

2,native方法的方法体不需在java文件中实现 而在cpp文件中实现


可以将native方法比作Java程序同C程序的接口,其实现步骤:

  1、在Java中声明native()方法,然后编译;

  2、用javah产生一个.h文件;

  3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);

  4、将第三步的.cpp文件编译成动态链接库文件;

  5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。

这些都是问前段时间,发帖问的,也得到了验证。
这里是地址
http://topic.csdn.net/u/20091115/00/ce3446be-e263-4d00-8fef-45a5425b0d3c.html
希望对你有所帮助
crazylaa 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 leehomwong 的回复:]
LZ真深入,学习了。。
[/Quote],
24K純帥 2010-01-30
  • 打赏
  • 举报
回复
LZ真深入,学习了。。
successgl 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wnjok 的回复:]
哈哈哈,我能解决。
1,打开Java\jdk1.6.0_10\include\,会发现n个.h文件,这是C/C++的代码

2,native方法的方法体不需在java文件中实现 而在cpp文件中实现

可以将native方法比作Java程序同C程序的接口,其实现步骤:

  1、在Java中声明native()方法,然后编译;

  2、用javah产生一个.h文件;

  3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);

  4、将第三步的.cpp文件编译成动态链接库文件;

  5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。

这些都是问前段时间,发帖问的,也得到了验证。
这里是地址
http://topic.csdn.net/u/20091115/00/ce3446be-e263-4d00-8fef-45a5425b0d3c.html
希望对你有所帮助
[/Quote]
caofeng891102 2010-01-29
  • 打赏
  • 举报
回复
其实初学就不要想太多了,一直学就是了,就像我大学物理教授说:“相对论想不通就不要想了,想多了会想出神经病来的”,我们想不通的东西多着哩,想想操作系统,多么神奇的东西啊////呵呵,还没学到。。。。。。。。。
java1109 2010-01-29
  • 打赏
  • 举报
回复
学习
alpha 2010-01-29
  • 打赏
  • 举报
回复
那具体实现到底在哪里呢?

这个具体实现是在 继承他的子类里面实现的 或者是实现它这个接口的 类里面实现的

慢慢来

等你学到了一定的程度就知道了
boloverr88888 2010-01-29
  • 打赏
  • 举报
回复
哈哈!!我有点异想天开了!
ZangXT 2010-01-29
  • 打赏
  • 举报
回复
因为这个实现和os相关,所以不同平台实现不同。可以去看native代码:
比如windows上是这样:
JNIEXPORT jobject JNICALL
Java_java_io_FileSystem_getFileSystem(JNIEnv *env, jclass ignored)
{
initializeWindowsVersion();
if (onNT) {
return JNU_NewObjectByName(env, "java/io/WinNTFileSystem", "()V");
} else {
return JNU_NewObjectByName(env, "java/io/Win32FileSystem", "()V");
}
}
snowmansh 2010-01-29
  • 打赏
  • 举报
回复
你要看底层实现代码,要看jvm源码,不是jdk。
jvm有很多实现,sun,ibm,harmony,jrockit.....,还有不同os上,实现也不同。
其实给你看了,也很难懂,慢慢琢磨吧。
蛋黄车 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lrbyantai 的回复:]
它只是定义了一个接口,具体功能还是要看实现此接口的类。一步一步往上看

低层的也是比较抽象的
[/Quote]
看我话都说不清了!~嘿嘿
蛋黄车 2010-01-29
  • 打赏
  • 举报
回复
它只是定义了一个接口,具体功能还是要看实现此代码类。一步一步往上看

低层的也是比较抽象的

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧