//A.java文件
package com.xxj;
public class A {
public void printHelloWorld(){
System.out.println("Hello, World!");
}
}//B.java文件
import com.xxj;
public class B {
public static void main (String[] args) {
A.printHelloWorld();
}
}A.java跟B.java处于相同目录下,
A.java能通过编译,B.java编译不了,该怎么办才能让B通过编译?
我本意是想要运用到第三方jar包
package com.xxj;
public class A {
public void printHelloWorld(){
System.out.println("Hello, World!");
}
}//B.java文件
import com.xxj;
public class B {
public static void main (String[] args) {
A.printHelloWorld();
}
}A.java跟B.java处于相同目录下,
A.java能通过编译,B.java编译不了,该怎么办才能让B通过编译?
我本意是想要运用到第三方jar包
public class B {
public static void main (String[] args) {
A.printHelloWorld();
}
}
在把package加一下。LZ说的第三方JAR 我不太明白 还望赐教
import com.xxj;
public class B {
public static void main (String[] args) {
A a = new A();
a.printHelloWorld();
}
}
打错了
public class B {
public static void main (String[] args) {
A a = new A();
a.printHelloWorld();
}
}
能通过,
import com.xxj.*;
public class B {
public static void main (String[] args) {
A a = new A();
a.printHelloWorld();
}
}
不能通过,??
import com.xxj;
public class B {
public static void main (String[] args) {
A.printHelloWorld();
}
}
错误一>导包错误。import com.xxj.A; or import com.xxj.*;
错误二>调用方法错误如果printHelloworld是A的静态方法这样A.printHelloWorld();没问题。
但你上面写的A类没有这样的静态方法。那么就要得到A的实例。再用实例点方法才可以。
而import com.xxj.*;却不行,这又是为什么呢?
我如果要用到第三方jar包,又该怎么办呢?
package com.xxj;
public class A{ public static void printHelloWorld(){ System.out.println("Hello, World!");
}
}
//B.java
import com.xxj.*;
public class B{ public static void main(String args[]){ A.printHelloWorld();
}
}Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.C:\Documents and Settings\Wu>g:G:\>cd G:\test\CSDNG:\test\CSDN>set path=G:\java\j2sdk5.0\binG:\test\CSDN>set path=.,%G:\test\CSDN>javac Sum.java
'javac' is not recognized as an internal or external command,
operable program or batch file.G:\test\CSDN>set path=G:\java\j2sdk5.0\binG:\test\CSDN>javac
Usage: javac <options> <source files>
where possible options include:
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
-nowarn Generate no warnings
-verbose Output messages about what the compiler is doing
-deprecation Output source locations where deprecated APIs are u
sed
-classpath <path> Specify where to find user class files
-cp <path> Specify where to find user class files
-sourcepath <path> Specify where to find input source files
-bootclasspath <path> Override location of bootstrap class files
-extdirs <dirs> Override location of installed extensions
-endorseddirs <dirs> Override location of endorsed standards path
-d <directory> Specify where to place generated class files
-encoding <encoding> Specify character encoding used by source files
-source <release> Provide source compatibility with specified release -target <release> Generate class files for specific VM version
-version Version information
-help Print a synopsis of standard options
-X Print a synopsis of nonstandard options
-J<flag> Pass <flag> directly to the runtime system
G:\test\CSDN>javac Sum.javaG:\test\CSDN>java Sum
Exception in thread "main" java.lang.NoClassDefFoundError: SumG:\test\CSDN>set classpath=.G:\test\CSDN>java Sum
7G:\test\CSDN>javac Sum.javaG:\test\CSDN>java Sum
1
3
3
13G:\test\CSDN>javac Sum.javaG:\test\CSDN>java Sum
1
3
3
7G:\test\CSDN>javac -d . .\com\xxj\A.javaG:\test\CSDN>javac B.java
B.java:2: package com does not exist
import com.xxj;
^
B.java:7: cannot find symbol
symbol : variable A
location: class B
A.printHelloWorld();
^
2 errorsG:\test\CSDN>javac B.java
B.java:7: non-static method printHelloWorld() cannot be referenced from a static
context
A.printHelloWorld();
^
1 errorG:\test\CSDN>javac -d . .\com\xxj\A.javaG:\test\CSDN>javac B.javaG:\test\CSDN>java B
Hello, World!G:\test\CSDN>javac B.javaG:\test\CSDN>java B
Hello, World!
//A.java
package com.xxj;
public class A {
public A() {
}
public void hello(){
System.out.println("Hello, World!");
}
}而在同一目录下的B.java文件是这样的:
//B.java
import com.xxj.A;
public class B {
public B() {
}
public static void main (String[] args) {
A a = new A();
a.hello();
}
}然后运行命令:
>javac A.java
>javac B.java
>java B
没问题!输出Hello, World!接着运行:
>jar cvf A.jar com
也没问题!然后我删除了编译A.java得到的com文件夹,再运行:
>javac B.java
提示找不到com.xxj包————为何?至于我在上面一再提到的如何引用第三方jar包的问题,这就是一个模型,就好像我的一个工程需要引用某个开源包A.jar,我不想将A.jar放在%JAVA_HOME%\jre\lib\ext\目录,这个就是为了能发布而已。不知我表述你们理解不?这是一个困扰我很久的问题,在CSDN问了好久了,我感谢所有给我指点的人,谢谢了...
//A.java
package com.xxj;
public class A {
public A() {
}
public void hello(){
System.out.println("Hello, World!");
}
}而在同一目录下的B.java文件是这样的:
//B.java
import com.xxj.A;
public class B {
public B() {
}
public static void main (String[] args) {
A a = new A();
a.hello();
}
}然后运行命令:
>javac A.java
>javac B.java
>java B
没问题!输出Hello, World!接着运行:
>jar cvf A.jar com
也没问题!然后我删除了编译A.java得到的com文件夹,再运行:
>javac B.java
提示找不到com.xxj包————为何?至于我在上面一再提到的如何引用第三方jar包的问题,这就是一个模型,就好像我的一个工程需要引用某个开源包A.jar,我不想将A.jar放在%JAVA_HOME%\jre\lib\ext\目录,这个就是为了能发布而已。不知我表述你们理解不?这是一个困扰我很久的问题,在CSDN问了好久了,我感谢所有给我指点的人,谢谢了...
我们在引用jar包时一般都会放在特定的目录下,其中像楼主说的%JAVA_HOME%\jre\lib\ext\下,我们不把它们放在那些目录下就不能用吗?显然不是。那为什么楼主的以上的这个程序编译运行会有问题?答案其实很简单:classpath
JAVA虚拟机会自动加载特定目录下的class或jar文件,这不需要用户手动指定。如果用户要使用自定义目录下的jar文件就应该和指定class文件一样,用classpath去指定它。假设A.java 和B.java都在同一文件目录下。
我们先用javac -d . A.java编译得到com\xxj\A.class
然后用jar cvf A.jar com得到A.jar
这时如果用javac B.java编译肯定出错,因为就算B.java和A.jar在同一目录下,编译程序也不知道哪里去找A这个类
用javac -classpath A.jar B.java就行了。明白了的话就知道运行要B.class该怎么办了。
楼主你需要这样做!
1、编译A,并且生成JAR包!!!
2、将CLASSPATH中加入你的A.JAR包!!!
3、编译B吧!
>javac B.java
提示找不到com.xxj包————为何? 你的问题其实你自己也没仔细想吧,你把com文件夹删除了,那么也就不存在com包了,那么你的b.java文件上哪里去调用com包文件啊,你的a现在只是java文件,不是class文件,那么你打成com.xxj的jar包也没有任何意义,编译器无法解析java文件,只能编译java文件,可以解析class文件,但是class文件被你删除了,那么编译b.java时候自然找不到com.xxj包了
A.printHelloWorld();
}
}
大哥,语法错了
想想为什么javac -classpath A.jar B.java可以编译通过,而java -classpath A.jar B却又运行不了呢?还是:classpath
在同目录下只有A.jar和B.java的境况下,用javac B.java编译不了是因为找不到需使用的A.class,所以用javac -classpath A.jar B.java告诉编译器A.class在A.jar中。
在同目录下只有A.jar和B.class的境况下,用java B运行不了同样是因为找不到A.class,而用java -classpath A.jar B运行不了使因为找不到B.class!!应该这样运行:java -classpath A.jar; B
我写了两个类//A
package com.xxj;
public class A
{
public void print()
{
System.out.println("Hello World!");
}
}//B
package com.test;
import com.xxj.A;
public class B
{
public static void main(String[] args)
{
A a = new A();
a.print();
}
}(1)编译A.java,命令 javac -d . A.java
(2)将A.class打成jar包,命令 jar cvf A.jar com
(3)编译B.java,命令 javac -classpath A.jar -d . B.java
(4)运行,命令 java -classpath A.jar; com.test.B
package com.wsb;import com.wsb.*;public class B{
public static void main(String [] args){
A a = new A();
a.printHelloWould();
}
}package com.wsb;public class A{
public void printHelloWould(){
System.out.println("Hello would!!!!!");
}
}楼主如果你单纯的是在目录中只有这两个文件的话! 那么无论你导入com.wsb.*;还是导入com.wsb.A;是者可以编译通过的! 楼主要看看目录中是否还存在其它的文件中定义有A类!
这里不太懂,也运行不出来。很谢谢各位了,尤其是xixibudong,TillPerfect
所以,如果要对你的B类进行运行的话,就使用java -classpath A.jar; B
我试了你的代码,这样可以的。
唉,不知道你的问题究竟在哪里
分号是什么作用啊?
System.out.println("Hello World!");
}
}
package com.xxj;public class B {
public static void main(String[] args){
A a=new A();
a.main(args);
}
}
System.out.println("Hello, World!");
}改成:
public static void printHelloWorld(){
System.out.println("Hello, World!");
}
在下面的B.java里就可以像你那样调用了.调用其它类的方法,要先把调用的类实例化一下.
java -classpath A.jar; com.test.B
还是运行不出来呀????