没区别.
命名空间是什么?别搞的这么深奥.我从未在java领域内听说过"命名空间"这个词.劳烦您给解释一下.jvm自动调用的话,可以收命令行参数.
自动在args[]中.
没有参数的情况下.没有什么区别.

解决方案 »

  1.   

    命名空间是.NET里面叫法,JAVA里面应该被称为包
      

  2.   

    B.main
    入口是A.main,你把B里的main理解为一个普通的static方法就可以了
      

  3.   

    class C{
      public static int i=0;
    }比如说我在A类中改变C类的静态变量,C.i=1,并在A类中启动tomcat,那么在tomcat的servlet中调用C类的静态变量i还为0吗?
      

  4.   

    有区别,
    如果A,B类再调用第3方的类C时,C类的静态变量就是同一个.
      

  5.   

    从你最上面的例子来看,由A的类对象和jvm直接调用B.main()方法效果是相同的,其区别有设置jvm的参数方式不同...下面的这个例子,搂主并没有说清楚如何在A类中启动tomcat,如果A的类对象和tomcat服务器是同一个jvm,则C.i=1。否则C.i=0
      

  6.   

    >>>那么在tomcat的servlet中调用C类的静态变量i还为0吗?这个涉及classloader的问题,如果假定servlet用相同的classloader装载class A,那么,系统内只有一个class A, 那么, servlet中读取的C.i应该等于1。如果用了不同的classloader, 比如tomcat用了一个其他的classloader装载servlet,然后这个classloader再次装载class A,那么这个class A跟以前的class A是不一样的,可能C.i还是等于0
      

  7.   

    to:zqrqq
    类的静态变量会与classloader有关系吗?静态变量不是在jvm中只存在一个对象吗?
      

  8.   

    那tomcat到底用不用别的classloader装载呢?
      

  9.   

    问题:类的静态变量会与classloader有关系吗?
    答案:有。如果classloader不一致,导致系统内可以存在两个class A(参见classloader)
      

  10.   

    to:zqrqq
    我参照sun.com网站写了一个代码,其结果是在同一个JVM中不同的classloader载入类的静态变量只有一个copy,而且只有一个类对象。
    另外classloader的职责是将类的定义从文件载入内存,如果一个类定义已经被载入到内存,不太明白为什么另外一个classloader还要做相同的动作?代码如下:
    import java.io.File;
    import java.net.URL;
    import java.net.URLClassLoader;class Bar {
    public static int n = 0;
    }public class Foo {
    public static void main(String[] args) throws Exception {
     
    // XXXXXXXXXXXX: EDIT THIS LINE
    File classDirectory = new File("C:\\workspace\\foo\\");

    // Create two Bars, one normal and one using reflection
    Bar bar1 = new Bar();
    Bar bar2 = (Bar) Class.forName("Bar").newInstance(); // Create a new class loader with the default (system) class loader as a parent
    URL u = classDirectory.toURL();
    URLClassLoader cl = new URLClassLoader( new URL[] {u} );
    Class cls = cl.loadClass("Bar");
    Object obj = cls.newInstance();
    Bar bar3 = (Bar) obj;
    // This will say "true"
    System.out.println("bar1.getClass() == bar3.getClass(): " + (bar1.getClass() == bar3.getClass()) );
     
    // Try to cast our classloaded object to a Bar.  This will work.
    System.out.println("First cast works!");
    System.out.println("bar1.n: " + bar1.n);
    System.out.println("bar2.n: " + bar2.n);
    System.out.println("bar3.n: " + bar3.n);
    bar1.n = 5;
    System.out.println("bar1.n: " + bar1.n);
    System.out.println("bar2.n: " + bar2.n);
    System.out.println("bar3.n: " + bar3.n);
    }
    }
      

  11.   

    这个问题太复杂!先搞清除一个技术的存在价值,再研究它的具体细节。具体到classloader,sun.com网站上的例子是一个hello world似的demo,没有实际价值,它只是解释,某些情况下,你可能需要使用不同的classloader装载相同的类(包和名称相同)。为什么需要不同的classloader呢?
    这个问题实在不是一下子能解释清除的!
      

  12.   

    我想说的问题是在同一个JVM中即使有多个不同的classloader,一个类对象在正常情况下只会被载入一次,一般不会出现多个不同的classloader载入同一个class的情形,也就是说内存中有多个相同的类定义。在jvm中,classloader是一个树形的结构,且通过代理机制工作。我承认你说的两个classloader会载入同一个类的情况是存在的,但你说classloader与静态变量的值有关感觉有些不太严谨。
      

  13.   

    >>>同一个JVM中即使有多个不同的classloader,一个类对象在正常情况下只会被载入一次
    这句话是对的
    但是,不能忽略了“不正常”的情况!
    >>>classloader与静态变量的值有关感觉有些不太严谨
    我来解释一下:
    如果classloader1和classloader2都载入了class A,这时系统内会同时存在两个class A,假设分别是A' 和A'',他们的初始化i都是0,之后,A'的static变量i被修改为1,但是A''的static变量i依然是0
      

  14.   

    你最后回复的是没有什么问题:_)
    BTW:谢谢你的回复