之前把2个类文件放在同一个文件夹下,不需要用package编译器就能自动搜索到。下面这个是一个例题网上找的,我想通过package使一个类能引用不在同一个文件夹下的另外一个类,但是很奇怪不能运行成功,是不是还要设置classpath?我是新手,书上讲的也不详细,弄了一个下午都没成功,具体怎么弄的呢?求达人帮忙//文件MyClass.java
package mypackage;
public class MyClass
{
public MyClass()
{
System.out.println("Create an object of MyClass.");
}
}//文件UsePkg.java
import mypackage.*;
public class UsePkg
{
public static void main(String[] args)
{
MyClass obj = new MyClass();
}
}C:\Java\myjava\mypackage>javac MyClass.javaC:\Java\myjava>javac UsePkg.javaC:\Java\myjava>java UsePkg
package mypackage;
public class MyClass
{
public MyClass()
{
System.out.println("Create an object of MyClass.");
}
}//文件UsePkg.java
import mypackage.*;
public class UsePkg
{
public static void main(String[] args)
{
MyClass obj = new MyClass();
}
}C:\Java\myjava\mypackage>javac MyClass.javaC:\Java\myjava>javac UsePkg.javaC:\Java\myjava>java UsePkg
C:\Java\myjava>javac mypackage.MyClass.java
D:\JAVAgo\lession1>javac mypackage.MyClass.java
javac: 找不到文件: mypackage.MyClass.java
用法: javac <options> <source files>
-help 用于列出可能的选项
你这个帖子1F的回复就知道了.(下载了视频看后就很清楚了!)
LZ的做法是对的:
C:\Java\myjava\mypackage>javac MyClass.javaC:\Java\myjava>javac UsePkg.javaC:\Java\myjava>java UsePkgJavac必须找到源文件(Test.java)的确切路径,源文件应该是放在包的文件夹下,如
package com.java.blog
那么源文件应该放到com/java/blog路径下,
这样javac编译的.class文件也就生成在当前路径下,否则以后调用会出错.
注意下javac和java运行的区别,
javac是在包的路径下编译,(是去com/java/blog/路径下: javac Test.java)
而java是包命加上类名才可以运行,(java com.java.blog.Test)
如果是别的类引用的话,
可以在当前类中导入已经编译好的类,(import com.java.blog.Test;)
也可以直接在当前类中使用如(com.java.blog.Test test = new com.java.blog.Test();)
推荐第一种做法!
javac -d . MyClass.java可以看看我BLOG中连载的《Java编程那些事儿》里关于包的介绍!
mypackage文件夹中,运行时路径方面有两种方法:(假设mypackage文件夹在d:\下)
(1)命令窗口当前的目录是在d:\下,则不需要配置classpath了(当然classpath里有. 这个路径啦)
(2)配置classpath,加上mypackage所在的目录的路径即d:\;也就是说系统寻找需要的.class文件首先是找到它所在的包,然后才进入包里面继续寻找
public class MyClass
{
public MyClass()
{
System.out.println("Create an object of MyClass.");
}
} //文件UsePkg.java
import mypackage.*;
public class UsePkg
{
public static void main(String[] args)
{
MyClass obj = new MyClass(); //执行这句的时候会编译MyClass.java,不用单独编译。
}
}
楼主的处理方式:
C:\Java\myjava\mypackage>javac MyClass.java
C:\Java\myjava>javac UsePkg.java
C:\Java\myjava>java UsePkg首先程序正确
我认为应该是这样:
C:\Java\myjava>javac UsePkg.java //这一部已经将UsePkg.java和MyClass.java都编译了
C:\Java\myjava>java UsePkg
Create an object of MyClass.