java 自创包发生“程序包***不存在”情况

看完C和指针,原本是打算学习C++的,因为大一下老师课程非常紧,自己也没怎么看书,对C++好多基本的东西都还不是很了解。但是这学期参加了“大学生创业创新项目”,所以得把自己原先的计划放一边了,先学习JAVA和Android Stdio。

Java学习我看的是《Java编程思想》第四版,在第六章:“访问权限控制”中,对包感到十分疑惑。前前后后来回看了老久,废话不多说,解决问题。

在初调用包时,总会出现“程序包***不存在”的情况。首先我们从三种情况来说明。以Child.java为自创包内的类,Father.java中会调用Child的方法 为例。(我所用的编译器为Ediplus)

1、Child.java和Fther.java在同一个子目录中。如它们都在C:/javacode这个文件夹中。

Child中代码为:

public class Child 
{
	void print(){
		System.out.println("Child ");
	}
}


Father中代码为:

class Father 
{
	public static void main(String[] args) 
	{
		Child a=new Child();
		a.print();
	}
}


运行结果:


有没有感到很神奇,明明Child没有“打包”,却仍能被Father中的主方法创建对象,并调用其中的方法。《Java编程思想》给出的解释是:Father.java可以访问Child.java的原因是因为他们同处于相同的目录并且没有给自己设定任何的包名称,Java把这样的文件自动看做是隶属于该目录的默认包之中,于是它们为该目录中所有其他文件都提供了包访问权限。(《Java编程思想》第四版P117 )

所以当两个.java在同一文件夹时,根本不用包,也可以相互访问(和protected限制词也有关系,这一点在第二种情况会说明)。


2、当Child.java在Father.java所在目录的子目录时。例如Child.java在D:/javacode/mypackage/print里  Father.java在D:/javacode里

Child中的代码:

//D:/javacode/mypackage/print
package mypackage.print;

public class Child 
{
	public void print(){
		System.out.println("Child ");
	}
}
和第一种情况有所不同,mypackage/print设为包名。方法print()被设置为pubilc,这样包外的类才能访问print()方法,而方法一中print()没有任何修饰,缺省为protected,同一个包中类其他类才可以访问print()。


Father中的代码:

//D:/javacode
import mypackage.print.Child;

class Father 
{
	public static void main(String[] args) 
	{
		Child a=new Child();
		a.print();
	}
}


运行结果:


整个过程能够编译成功。


3、“程序包***不存在”主要是由第三种情况引起的:Father在电脑中任意位置。例如Father在桌面,Child在D:/javacode/mypackage/print;


Child中的代码:

//D:/javacode/mypackage/print
package mypackage.print;

public class Child 
{
	public void print(){
		System.out.println("Child ");
	}
}

与第二种情况相比没有任何变化


Father中的代码:

//C:\Users\asus\Desktop
import mypackage.print.Child;

class Father 
{
	public static void main(String[] args) 
	{
		Child a=new Child();
		a.print();
	}
}
Father与第二种情况相比也没有任何变化 除了位置不同外。


运行结果:




那么为什么有的人就不能成功呢,原因主要在于CLASSPATH的设置,为了任何地方的Father.java都能够访问Child,必须添加CLASSPATH的路径。在本例中Child在D:/javacode/mypackage/print中 ,其中mypackage/print为包名,那么需把D:/javacode添加到CLASSPATH中。改完后仍然不能编译Father.java,只需要重启电脑后就可以了。

为什么添加之后就能访问了呢。在编译Father.java时,CLASSPATH会自动在路径中找子目录有mypackage/print,并且含有Child.java类的路径。在本例中,CLASSPATH确定为D:/javacode,并自动吧mypackage/print添加到D:/javacode后面,编程完整路径D:/javacode/mypackage/print,并找到其中的类Child。这样整个编译过程顺利完成。




  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java是一种非常流行的编程语言,可以用于开发各种类型的游戏。以下是一个简单的自创游戏的示例: 1. 首先,你需要创建一个窗口。你可以使用Java Swing库来创建GUI应用程序。下面是一个创建窗口的示例代码: ```java import javax.swing.JFrame; public class MyGame extends JFrame { public MyGame() { setTitle("My Game"); setSize(400, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); setVisible(true); } public static void main(String[] args) { new MyGame(); } } ``` 2. 接下来,你可以添加一些游戏元素,例如玩家、敌人、背景等。你可以使用Java 2D图形库来创建和绘制这些元素。下面是一个简单的绘制图形的示例代码: ```java import javax.swing.JFrame; import java.awt.Graphics; import java.awt.Color; public class MyGame extends JFrame { public MyGame() { setTitle("My Game"); setSize(400, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); setVisible(true); } public void paint(Graphics g) { super.paint(g); g.setColor(Color.RED); g.fillRect(50, 50, 50, 50); g.setColor(Color.BLUE); g.fillOval(100, 100, 50, 50); } public static void main(String[] args) { new MyGame(); } } ``` 3. 最后,你可以添加一些游戏逻辑和交互。例如,你可以添加键盘监听器来控制玩家的移动,添加碰撞检测来判断玩家和敌人是否相撞等等。 这只是一个简单的示例,你可以根据自己的兴趣和需求来开发更加复杂的游戏。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值