[问题] java 中关于访问权限控制的小问题

C、C++和Java语言
回复
头像
hellojinjie
帖子: 1144
注册时间: 2007-09-14 21:03
来自: 浙江
送出感谢: 0
接收感谢: 0

[问题] java 中关于访问权限控制的小问题

#1

帖子 hellojinjie » 2008-07-25 18:53

代码: 全选

// access/apple/Apple.java

public class Apple {
    public Apple() {
	System.out.println("i am a apple");
	}
}

代码: 全选

// access/Boy.java
 
package access;

import access.apple.*;

public class Boy {
    public static void main(String[] args) {
	Apple apple = new Apple();
    }
}
为什么这个编译不能通过,
把 Boy.java 中的包声明去掉又可以编译通过,这是为啥?
Say hello to everyday!
头像
异域追梦者
帖子: 424
注册时间: 2008-02-18 0:25
送出感谢: 0
接收感谢: 0
联系:

#2

帖子 异域追梦者 » 2008-07-25 22:11

代码: 全选

// access/apple/Apple.java 
package access.apple;
图片
头像
hellojinjie
帖子: 1144
注册时间: 2007-09-14 21:03
来自: 浙江
送出感谢: 0
接收感谢: 0

#3

帖子 hellojinjie » 2008-07-26 12:58

试过了,还是不行

Apple.java 这个文件里的包声明又没有都可以编译运行,但是 Boy.java 中的包声明没有就可以编译,但是一加上去编译能通过,但是运行不了

代码: 全选

Exception in thread "main" java.lang.NoClassDefFoundError: Boy (wrong name: thinkinginjava/access/Boy)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Say hello to everyday!
头像
hellojinjie
帖子: 1144
注册时间: 2007-09-14 21:03
来自: 浙江
送出感谢: 0
接收感谢: 0

#4

帖子 hellojinjie » 2008-07-26 13:17

代码: 全选

/**
 * thinkinginjava/access/Pc.java
 */
package thinkinginjava.access;
public class Pc {
    public static void main(String[] agrs) {
	System.out.println("a class in a package");
    }
}
突然发现这个能编译,但是也运行不了,看来我在包的设置上出了问题,可就是找不出哪里出了问题 啊
Say hello to everyday!
头像
异域追梦者
帖子: 424
注册时间: 2008-02-18 0:25
送出感谢: 0
接收感谢: 0
联系:

#5

帖子 异域追梦者 » 2008-07-26 21:33

我是在access上层目录编译运行的

代码: 全选

ds@ds.pc:~$ ls
access
ds@ds.pc:~$ javac access/Boy.java
ds@ds.pc:~$ java access.Boy
i am a apple
图片
头像
hellojinjie
帖子: 1144
注册时间: 2007-09-14 21:03
来自: 浙江
送出感谢: 0
接收感谢: 0

#6

帖子 hellojinjie » 2008-07-27 10:47

异域追梦者 写了:我是在access上层目录编译运行的

代码: 全选

ds@ds.pc:~$ ls
access
ds@ds.pc:~$ javac access/Boy.java
ds@ds.pc:~$ java access.Boy
i am a apple
谢谢异域追梦者,有点明白了,在代码里定义了类所属的包,那运行的时候也就要把类的前面的包名写完整,否则将提示找不到类
Say hello to everyday!
头像
异域追梦者
帖子: 424
注册时间: 2008-02-18 0:25
送出感谢: 0
接收感谢: 0
联系:

#7

帖子 异域追梦者 » 2008-07-29 20:51

不用
图片
回复

回到 “C/C++/Java”