java package找不到符号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java package找不到符号相关的知识,希望对你有一定的参考价值。

protection.java文件:
package p1;
public class protection
int n=1;
public protection()
System.out.println("n="+n);



test.java文件:
package p1;
public class test

public static void main(String[] args)
protection ob1=new protection();



在test.java时出现了:
test.java:5: 找不到符号
符号: 类 protection
位置: 类 p1.test
protection ob1=new protection();
^
test.java:5: 找不到符号
符号: 类 protection
位置: 类 p1.test
protection ob1=new protection();
^
请问为什么呢?

如果去掉两个文件中的package语句又能编译成功?
crppwrc - 千总 四级:你的答案对的,但是有什么方法在编译时不用写路径呢??

1、把文件protection.java和test.java放在一个名称为p1的文件夹下。
2、打开命令提示符,在p1的上级目录下执行: javac p1\test.java(比如protection.java放在D:\p1下,那么就在D:\下执行这个语句)
3、在p1的上级目录下执行: java p1.test 即可。

说明:
命令行编译,在包的根目录在执行比较保险,需要指定编译的类的路径;
执行时,要写上类的全路径(即所在的包路径,这个地方就是p1.test)。

补充:
如果你想不用路径,那只能把程序中的 package语句给去掉了,因为编译的时候,编译器会根据这个路径去寻找文件,只有在根目录下这个路径才是正确的。不指定package语句就是在当前路径下找。
但是实际中不指定package语句是不合理的,不可能把所有的类都放在一个文件夹下吧。
参考技术A 要是使用的是命令行工具,先进入源文件所在的目录
执行
javac -d . protection.java (.)代表当前目录。没有这个选项无法打包。
然后输入 cd p1 进入p1目录然后再执行
javac test.java
就可以了。
参考技术B 【【【【把你的类名文件名全都开头字母大写吧】】】】】
你的这两个文件确定是在p1这个文件夹里头?
package p1;的意思是你的文件在 p1文件夹里头。
参考技术C 没导包。。。
import 包名;
这样试试。

找不到符号 Java 错误?

【中文标题】找不到符号 Java 错误?【英文标题】:Cannot find symbol Java error? 【发布时间】:2013-05-20 11:39:45 【问题描述】:

当我使用 java.util.Arrays.sort(numbers); 时,该代码有效 难道我做错了什么?这对我来说似乎很奇怪。

import java.util.Arrays.*;

class Test 
   public static void main(String[] args) 
    double[] numbers = 6.0, 4.4, 1.9, 2.9, 3.4, 3.5;
    char[] chars = 'a', 'A', '4', 'F', 'D', 'P';

    sort(numbers);

    System.out.println(binarySearch(numbers, 3));

   

(终端显示错误)

Test.java:8: error: cannot find symbol
    sort(numbers);
    ^
symbol:   method sort(double[])
location: class Test
 Test.java:10: error: cannot find symbol
    System.out.println(binarySearch(numbers, 3));
                       ^
 symbol:   method binarySearch(double[],int)
 location: class Test
  2 errors

【问题讨论】:

如果去掉类名,你认为Java如何找到方法? 去掉类名是什么意思?你是说Arrays.sort 您将“Arrays.sort”更改为“Arrays”。 “数组”是类名。 【参考方案1】:

它是 Arrays 类的静态方法。

你应该像这样调用它:

Arrays.sort(someArray);

请注意,您仍然必须像这样导入 Arrays 类:

import java.util.Arrays;

或者正如其他人所提到的,如果您进行静态导入,您可以省略类名。

我认为Arrays.sort() 的可读性更好。

【讨论】:

我尝试使用Arrays.sort(numbers) 运行,但没有成功。如果我只使用sort(numbers) 并且对import static 很重要,它就可以工作 要使用 Arrays.sort 你需要使用 import java.util.Arrays;【参考方案2】:

您需要进行静态导入。使用以下

import static java.util.Arrays.*;

原因

当你想导入一些静态成员(方法或变量)时,你需要静态导入成员。所以你必须使用import static

另一种解决方案

或者你可以导入

import java.util.Arrays;

并使用

Arrays.sort(b);

第二种解决方案的原因

这里您没有导入任何静态元素,因此需要正常导入到数组。然后就可以直接使用Arrays.sort访问了

【讨论】:

【参考方案3】:

您正在尝试进行静态导入,但您错过了static

//   add v this
import static java.util.Arrays.*;

【讨论】:

谢谢!它有效,但是为什么有人说使用Arrays.sort(array),即使我使用静态导入,这也会给我一个错误 他们提供了另一种选择:进行正常导入:import java.util.Arrays; 并且你可以说Arrays.sort(someArray);

以上是关于java package找不到符号的主要内容,如果未能解决你的问题,请参考以下文章

IDEA-类存在编译时提示Java找不到符号解决方法

Idea编译:Java找不到符号(终极解决方案篇)

java 枚举 找不到符号

java里显示找不到符号?

java 中总是出现找不到符号 是怎么回事

java 中 “找不到符号”的错误