除java.lang包是自动加载的,其余的均需用import加载。本人有一个不理解的地方:即关于最常见的System.out.println()语句。System类位于java.lang包,out是System类的一个field,System.out则产生了一个PrintStream类型的对象,然后该对象调用PrintStream类中的println()方法以完成屏幕输出。问题是PrintStream类位于java.io包,既然规则如此,就应在代码开始处写上import java.io.*;而针对System.out.println(),我们从来都不需要加载任何包。这岂不是自相矛盾。
烦请各位大侠指正!

解决方案 »

  1.   

    看看System类的源码,System.java, 下面第一个import就是引用的java.io.*/*
     * @(#)System.java 1.149 04/06/02
     *
     * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
     * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
     */
    package java.lang;import java.io.*;
    import java.util.Properties;
    import java.util.PropertyPermission;
    import java.util.StringTokenizer;
    import java.security.AccessController;
    import java.security.PrivilegedAction;
    import java.security.AllPermission;
    import java.nio.channels.Channel;
    import java.nio.channels.spi.SelectorProvider;
    import sun.net.InetAddressCachePolicy;
    import sun.reflect.Reflection;
    import sun.security.util.SecurityConstants;
    import sun.reflect.annotation.AnnotationType;
      

  2.   

    楼上说的没错,system类import了,在你第一次调用system类的时候,jvm就会加载
      

  3.   

    多谢指教,如此看来SUN在包加载的规则方面还有待做得更好,以免产生歧义