作者ogamenewbie (荷兰烂银行)
站内java
标题Re: [站内] Java 跟 C++ 搞暧昧? Namespace 有用嘛?
时间Sat Mar 11 23:29:51 2006
※ 引述《godfat (godfat 真常)》之铭言:
: 不知道是广义 namespace, 还是狭义的 C++ namespace? XD
: 前者我不敢下定义,但後者的话我可以举例 XD
我借用你的例子来讲一下, 保证是错的 (啥!)
我不是啥 SCJP 咩, 用错误的概念硬干出能用的东西是常有的事
: 其实是很单纯的观念啦,我觉得你应该知道是什麽意思才对
: 可能是被太多名词混淆了…?
: 在 C++ 中,所有标准提供的东西都放在 namespace std 下
在 java 中,所有标准提供的东西都放在 rt.jar 的 java 下
: namespace std{
: /* blah blah blah */
: }
java\
applet\
awt\
.... /* blah blah blah */
....
: 假设现在里面有一个 max function
假设现在里面有一个 max function (好吧, 我真的去找个 max 出来)
: namespace std{
: int max(int, int);
: }
java\
.... /* blah blah blah */
lang\
\Math.class
max(int, int)
.... /* blah blah blah */
: 那麽你在全域空间(global)中这样用:
: max(5, 10);
: 是没有效果的,因为看不到,compiler 会跟你抱怨 max 是啥?
那麽你在 Java 程式中这样写:
max(5 ,10);
是没有效果的,因为看不到,compiler 会跟你抱怨 max 是啥?
(The method max(int, int) is undefined for the type)
: 正确的用法是:
: std::max(5, 10);
: 或是
: ::std::max(5, 10);
正确的用法是:
java.lang.Math.max(5, 10);
或是
Math.max(1,2)
: 前者表示在「现在」这个 namespace 中找到下一层的 std namespace,
: 并在其中寻找 max 在哪里?
前者表示在 \java\lang\ 中找到下一层的 Math.class
并在其中寻找 max 在哪里?
: 後者则是在「global namespace」中寻找 std namespace,
: 并在其中寻找 max 在哪里?
後者则是在 "预设的路径中找 Math.class,
并在其中寻找 max 在哪里?
: 如果你现在在 global namespace 中建立另外一个 max
: void max(double, double);
: 假设你现在在 global namespace 中这样写:
: max(5, 10);
: 那麽 compiler 会认定你使用的是 void max(double, double);
如果你现在在程式中建立另外一个 max
void max(double, double);
假设你现在在程式中这样写:
max(5, 10);
那麽 compiler 会认定你使用的是 void max(double, double);
: std::max(5, 10);
: 则会认定为 std namespace 下的 void max(int, int);
Math.max(5, 10);
则会认定为 Math.class 里的 public static int max(int a, int b);
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Math.html#max(int, int)
: 大概就是这样了……
: 简单地说,也有点像 file system 的树状结构啦 XD
大概就是这样了……
简单地说,也有点像 file system 的树状结构啦 XD
: 嗯,但是在 C++ 中的话故事还没有结束 XDD
嗯,但是在 Java 中的话故事就结束了 (大概吧?)
: 如果前面再这样写:
: using namespace std; // 汇入整个 std
: 或是
: using std::max; // 汇入 std::max
如果在前面再这样写:
import java.lang.*;
或是
import java.lang.Math;
: 则
: max(5, 10);
: 会叫到谁?
则
max(5, 10);
还是抓自建的 max (double, double)
你不打
Math.max 就不认识.
: 嗯,我想到一个问题了,虽然这自己测试看看就知道了,
: 不过板大说不用客气是吧…? XD
: package test;
: 假设放在 ~/fat1/test 下
: package test;
: 假设放在 ~/fat2/test 下
: 那麽我执行某个程式,把 ~/fat1 和 ~/fat2 都加入 classpath 下
: 是否会造成冲突?如果是的话,那确实这就是 Java platform 了 @_@
不会... 依照载入顺序.
: 所以上面有一篇会说
: String config = Config.getPath();
: import config;
: 如此动态决议载入的路径。
import 的 path 也动态? 这什麽? @_@a
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.25.148.49