Package and ClassPath

原创 2003年02月04日 20:12:00

 

        Package and ClassPath (静水流深第一版)

    这是我的读书笔记,希望能够对大家学习java有所帮助。
所有代码都经过测试,测试环境:

java version "1.4.0-rc"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-rc-b91)
Java HotSpot(TM) Client VM (build 1.4.0-rc-b91, mixed mode)

    如大家发现任何错误,或有任何意见请不吝赐教。

                            quietwater
                             2003.2.4

        写作初衷

    首先是我自己遇到了有关package和classpath的问题,经过网友的帮助和
自己的摸索,终于搞清楚原因。后来发现有些网友有着和我同样的问题,所以
决定写篇文章来和大家分享。


正文:

一.private,friendly,protected,public的区别:


    private顾名思义就是私有,自己所以自己所用。
包括私有成员变量和私有成员函数, 只有它们所属
的类中的成员函数(包括public friendly
protected and private 也就是所有)可以调用。
    public就是共有,大家所以,可以被任何class
调用。
    friendly友好,可以被同一个包中的class调用。
如果没有明确声明属于哪一个包package,那么就只
可以被同一个目录中的class调用。因为缺省同一个
目录中的class属于同一个package。
    protected保护,它具有friendly的属性,也就是
说它是friendly的超集,protected还可以被子类访问。

二. 缺省package与friendly:

    默认情况下在同一个目录下的所有class 在同一个
package 中。所以我们在默认情况下可以调用在同一个
目录中的class 。缺省情况下它们都是friendly。
    如果是j2sdk1.4那么我们可以不配置classpath。
但是如果你想import你自己的package ,那么你就必须
配置classpath 了。

三. 问题出在哪里?

    举例说明:

d:/mypackage/A.java

package mypackage;
public class A{
  public A(){
    System.out.println("Create A");
  }
}

d:/mypackage/B.java

import mypackage.*;
class B{
  B(){
    System.out.println("Create B");
  }
  public static void main(String[] args){
    A a=new A();
    B b=new B();
 
}
   
首先set classpath=.;d:/
表示到当前目录和d盘根目录查找包,包名与目录名一致。如mypackage包
位于d:/mypackage  java通过classpath找到d:/然后通过包名找到
d:/mypackage目录,在d:/mypackage目录下找到A.class

D:/mypackage>javac A.java 没问题
D:/mypackage>javac B.java
B.java:7: cannot access A
bad class file: ./A.class
class file contains wrong class: mypackage.A
Please remove or make sure it appears in the correct subdirectory of the classpa
th.
    A a=new A();
    ^
1 error

将B.java移至d:/B.java然后运行

D:/>javac B.java

D:/>java B
Create A
Create B

一切正常。

    总结:因为B class不在mypackage中,也就是说B class 要使用在mypackage 中的class,那么class B应该位于mypackage包所在目录之外才能避免冲突。不然默认class B
与它所在目录的class位于同一个package中。

如想运行包中的类,如下:

 D:/mypackage>java A
Exception in thread "main" java.lang.NoClassDefFoundError: A (wrong name: mypack
age/A)
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:509)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:246)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)

写全名包名+类名如下:

D:/mypackage>java mypackage.A
Exception in thread "main" java.lang.NoSuchMethodError: main

改写A.java如下,添加main()

package mypackage;
public class A{
  public A(){
    System.out.println("Create A");
  }
  public static void main(String[] args){
    A a=new A();
  }
}

D:/mypackage>java mypackage.A
Create A

 


   

   
   

Fatal Error: Unable to find package java.lang in classpath or bootclasspath

几天前用jbuilder时出现Fatal Error: Unable to find package java.lang in classpath or bootclasspath这样的错误,卸载的时...
  • white_eyes
  • white_eyes
  • 2007年07月18日 21:58
  • 6767

Java中关于package和classpath的总结

转载自:http://blog.sina.com.cn/s/blog_533074eb01014yd7.html package中所存放的文件   所有文件,不过一般分一下就分这三种 ...
  • u012179540
  • u012179540
  • 2014年12月28日 14:57
  • 2089

Linux上运行maven项目报错Fatal Error: Unable to find package java.lang in classpath or bootclasspath

本文出自 www.itskyedu.com,请大家关注! 在Linux上使用STS运行maven项目,一直报错:Fatal Error: Unable to find package jav...
  • u012759397
  • u012759397
  • 2017年12月04日 17:06
  • 317

在Eclipse中显示.project和.classpath和.setting目录 package explorer filters的使用

from :http://blog.csdn.net/wanghantong/article/details/41442759 个人原创,版权所有,转发请标明出处:http://...
  • wuqilianga
  • wuqilianga
  • 2018年01月31日 15:28
  • 50

JAVA——package语句、classpath环境变量配置

-包(package)的引入-包(package)语法与应用-类(.class)文件不在同一路径时的class环境配置【1】package的引入 一个大型的软件系统项目中有很多的类,如果不对这些类进行...
  • jingzi123456789
  • jingzi123456789
  • 2017年04月07日 13:48
  • 229

关于IDEA找不到classpath中package内的xml文件问题和解决办法

之前,一直被一个严重的问题所困扰,那就是我的classpath中包的配置文件为什么不能够被IDEA找到,而eclipse就能够找到,在经历了很久的痛苦挣扎之后,终于找到了原因和解决办法。 很简单,这...
  • MyCodeDream
  • MyCodeDream
  • 2016年06月13日 19:46
  • 4270

classpath及package详解

Java很诱人,但对于刚跨入Java门槛的初学者来说,编译并运行一个无比简单的Java程序简直就是一个恶梦。明明程序没错,但各种各样让人摸不着头脑的错误信息真的让你百思不得其解,许多在Java门口徘徊...
  • raokaige8888
  • raokaige8888
  • 2007年12月01日 20:40
  • 142

maven打可执行的jar包以及classpath设置

http://drizzlewalk.blog.51cto.com/2203401/416508 一  将maven构建的工程打成jar包,并使用脚本做定时任务 1.首先将maven搭建的...
  • shuixin536
  • shuixin536
  • 2013年05月30日 18:52
  • 25542

Maven项目不打包*.hbm.xml文件

org.apache.maven.plugins maven-compiler-plugin 1.8 ...
  • waysoflife
  • waysoflife
  • 2015年09月23日 20:22
  • 617

Java 的 ClASSPATH 和 Package

前言: 由于这两个问题新手问得较多, 且回答比较零散, 很难统一整理, 所以就直接写了一篇, 还请大家见谅. 正文: 一、 类路径 (class path) 当你满怀着希望安装好了 java,...
  • sole_cc
  • sole_cc
  • 2014年07月26日 10:12
  • 599
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Package and ClassPath
举报原因:
原因补充:

(最多只允许输入30个字)