java txt文档下压包和调用的问题 出错“找不到符号”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java txt文档下压包和调用的问题 出错“找不到符号”相关的知识,希望对你有一定的参考价值。

最近自学java,在看电子工业出版社出版的《java 6 从入门到精通》
沈志宏 王松涛 周园春编的书(原书pg39~41)
源程序如下
(1)创建了一个包,该包源文件名为class1.java
/*将类Point和Rectangle打包*/
package java.examplepackage;

class Point
protected int x;
protected int y;
public Point()
this.x=0;
this.y=0;

public Point(int x,int y)
this.x=x;
this.y=y;



class Rectangle
private int width=0;//定义成员变量
private int height=0;//定义成员变量
private Point origin;//定义成员变量
public Rectangle()
//构造方法,不带参数
origin=new Point(0,0);

public Rectangle(Point p)
//构造参数,带一个参数
origin=p;

public Rectangle(Point p,int w,int h)
//构造方法,带3个参数
origin=p;
width=w;
height=h;

public void move1(int x,int y)
//成员方法
origin.x=x;
origin.y=y;

public void move2(int a,int b)
//成员方法
origin.x+=a;
origin.y+=b;

public int area()
//成员方法
return width*height;



然后再用 javac -d C:\java class1.java
压包

然后第二段程序的源程序如下
(2)引入一个包

/*引入一个包 java.examplepackage*/
import java.examplepackage;
class TwoRectAreaBal
//定义一个类
public static void main(String args[])
int x=3,y=4;
int w=4,h=5;
Point p1=new Point(x,y);
Point p2=new Point(8,2);
Rectangle r1=new Rectangle(p1,w,h);
Rectangle r2=new Rectangle(p2,8,10);
r1.move1(2,3);
r2.move2(-2,4);
System.out.println("两个矩形面积差="+(r2.area()-r1.area()));



但是调用第二段程序的时候,却提示class2.java:2:找不到符号
符号:类 examplepackage
位置:软件包 java
class2.java:8:无法访问Point
我觉得第二个错误的原因可能就是由于第一个没有成功的调用包引起的。

在网上查了查
有人说改环境变量classpath
我在里面加了;C:\java\examplepackage也不行
百思不得其解啊
希望某些大大能给解释下
越详细越好
我是自学
可能基础不是很好。
classpath=c:\java也试过,但是还是不行
原来class1里面是用的private
但是我发现编译不过去
后来我自己改成protected之后可以编译过去了
但是依然报错
希望大大能帮个忙
自学不好学啊。。。

package javann.examplepackage;
public class Point
public int x;
public int y;

public Point()
this.x=0;
this.y=0;

public Point(int x,int y)
this.x=x;
this.y=y;



package javann.examplepackage;
public class Rectangle
private int width=0;
private int height=0;
private Point origin;//定义成员变量
public Rectangle()

origin=new Point(0,0);

public Rectangle(Point p)

origin=p;

public Rectangle(Point p,int w,int h)

origin=p;
width=w;
height=h;

public void move1(int x,int y)

origin.x=x;
origin.y=y;

public void move2(int a,int b)

origin.x+=a;
origin.y+=b;

public int area()

return width*height;



import javann.examplepackage.*;
class TwoRectAreaBal
public static void main(String args[])
int x=3,y=4;
int w=4,h=5;
Point p1=new Point(x,y);
Point p2=new Point(8,2);
Rectangle r1=new Rectangle(p1,w,h);
Rectangle r2=new Rectangle(p2,8,10);
r1.move1(2,3);
r2.move2(-2,4);
System.out.println("r2.area()-r1.area()="+(r2.area()-r1.area()));



楼主你真牛,买了本超级盗版书!
要运行上面的程序,假如你的包创在d:,
即d:\javann\examplepackage,把
Point和Rectangle两个类放在上述包下,
再在d:\目录下创建 TwoRectAreaBal类,
完成了上面步骤,就可以来运行了!
1,设置path,在“我的电脑”——“属性”——“高级”——“环境变量”
——“系统变量”里找到path变量;然后把你安装JDK的bin目录放在path
变量的最前面,用分号隔开(windows系统),
eg:C:\Program Files\Java\jdk1.6.0_06\bin;
不要把其它的变量删除,那样有可能会导致系统崩溃!
2,设置classpath——要自己创建的,点下面的“新建”就会弹出对话框,
设置classpath=.;d:\
上面得语句就是JVM(java虚拟机)会自动在“.”(表示当前文件夹得目录下,即你
所运行java的当前目录)找你编译出来的.class文件。而后面得d:\就是针对你所
列的问题所设置的!
3,在cmd命令下进入d:\javann\examplepackage目录,先把Point类和Rectangle两个类编译,
javac Point.java
javac Rectangle.java
4,cd..\.. 退到d:\根目录下,然后
javac TwoRectAreaBal.java
java TwoRectAreaBal
就可以得到r2.area()-r1.area()=60;
一切OK了!
另外还有个必须注意的地方就是,你的包名取得也太强硬了,竟然不怕权威,跟sun公司对着干,
包名java.XXXX这类包名你自己定义的运行时会抛SecurityException异常,指示安全侵犯!
参考技术A 你没有理解java中的包! java中的包是与文件系统中的目录结构相对应的。!什么意思呢? 比如你建立了examplepackage包,我知道你的java类放在C:\java下的,请你注意下面的操作:1:在C:\java下建立一个叫examplepackage的文件夹2:把class1.java剪切到examplepackage文件夹下3:把class2.java剪切到C:\java下4:用javac命令编译上数述5类5:把C:\java添加进classpath中6:打开cmd进入C:\java中,运行java class2 7:希望你能运行

参考资料:如果您的回答是从其他地方引用,请表明出处

参考技术B 第一个压根都没编译成功,哪来的class1,要用class1第一个类里至少有一句话是public class class1,现在的破书太不负责,也不跟初学者说说用啥工具,都喜欢让人用记事本写。你还是下个eclipse用吧,这么学够你受的 参考技术C 打的jar包放哪里了? 参考技术D 打的jar包放哪里了?
再看看别人怎么说的。

TypeError:调用元类基“函数”对象时出错不可迭代

【中文标题】TypeError:调用元类基“函数”对象时出错不可迭代【英文标题】:TypeError: Error when calling the metaclass bases 'function' object is not iterable 【发布时间】:2018-08-23 15:50:35 【问题描述】:

我正在处理一个包含多个包和子包的项目,但遇到了导入问题:

    Traceback (most recent call last):
  File "***/src/dev/dev_salle.py", line 5, in <module>
    from src.envir.jeu import Salle
  File "***/src/envir/jeu/__init__.py", line 1, in <module>
    from camera import Camera
  File "***/src/envir/jeu/camera.py", line 5, in <module>
    class Camera(object):
TypeError: Error when calling the metaclass bases
    'function' object is not iterable

据我了解,它与 Camera 的元类和其他由于嵌套导入而从对象冲突派生的类有关。我注意到的其他一些事情:

如果我将 camera.py 中的 Camera 实例化为 main,错误仍然存​​在

if __name__ == "__main__":
    print Camera()

删除对象继承后错误消失,但我想保留它以使用 __slots__。

如果我在 camera.py 中为 Camera 创建元类 MetaCamera(type),错误仍然存​​在

如果我调用该错误不会发生

class Blabla(object):pass
if __name__ == "__main__":
    print Blabla()

在 ***/src/、***/src/envir/ 或 ***/src/envir/jeu/ 中

我还从另一个子包 Pti(object) 和 Porte(Pti) 导入其他类。 Pti 导入很好,但 Porte 引发此错误:

Traceback (most recent call last):
  File "***/src/dev/dev_salle.py", line 5, in <module>
    from src.envir.jeu import Salle
  File "***/src/envir/jeu/__init__.py", line 2, in <module>
    from salle import Salle
  File "***/src/envir/jeu/salle.py", line 10, in <module>
    from src.envir.elements.pti import Pti, Porte, Monnaie
  File "***/src/envir/elements/pti.py", line 14, in <module>
    class Porte(Pti):
TypeError: Error when calling the metaclass bases
    'function' object is not iterable

结构的回顾,因为它有点乱:

src
 |--dev
 |   '--dev_salle.py
 '--envir
     |--jeu
     |   |--camera.py
     |   '--salle.py
     '--elements
         '--pti.py

我既不习惯元类也不习惯嵌套导入,所以我有点不知所措......

【问题讨论】:

在继续解决我的问题的同时,我将 jeu 和 elements 包移动到与 dev 相同的级别:Camera 的错误消失但 Porte(Pti) 的错误消失了。 【参考方案1】:

我终于解决了我的问题!

这与嵌套导入无关--'

在导入引发错误的两个类中,我定义了 __slots__ :

def __slots__(self): return ("bla", "bli", "blu")

而正确的定义是:

__slots__ = ("bla", "bli", "blu")

由于元类使用 __slots__ 来启动类字典,因此会引发元类错误。

【讨论】:

以上是关于java txt文档下压包和调用的问题 出错“找不到符号”的主要内容,如果未能解决你的问题,请参考以下文章

python文本处理---计算fasta文件中不同氨基酸的数目

找不出错

cmake找不到头文件

如何打开fasta文件

Java代码编译老是出错,找不出具体的,新手求指点

将某一多行的fasta文件转换为单行的fasta文件