小汪汪,今天我们学习一下Java开发中经常让人感觉头大的包、文件、以及命名空间的问题呀!然后再加一题算法题呀!
参考的内容来自:
关于包、文件、命名空间:http://yqgao.blog.51cto.com/773490/157061/
关于算法的题目:http://blog.csdn.net/v_july_v/article/details/6543438(这个里面的微软面试100题是我们这个暑假的目标哦)
先来学一下那个关于包、文件、命名空间的东东吧,这个东西的规则方面的内容在上面提到的那个网址中有详细的描述,这里感觉没必要再去提炼了,小汪汪,先把那个网址中的内容仔细的学习一下哦;这里就只以一个项目为例子来说明那些规则呀,这样加深一下理解,并且可以达到实际应用的效果:
首先思考一下下面的几个问题:
1、为什么Java要有包的概念?这跟C++有什么相同的和不同的地方?
C++使用的是命名空间,使用不同的命名空间,可以防止相同的命名(如函数名,类名,变量名发生冲突),比如C++中的STL,
我们一般会使用如下的声明:
using namespace std; 或者:
using std::end;
using std::cout;
using std:::cin;
using std::string;
等等;
这样我们就让程序知道了,我们使用的end,cin,cout,string这些类、宏是来自std命名空间中定义的类、宏;
而Java中使用包来说明这些命名空间,也通过包来组织代码,我们先看一下下面的一个简单的Java项目,包含了两个包,以及他们的之间的访问,然后再详细的解释一下:
我们看到新建了一个项目:TestPackage,然后在src资源文件夹下有两个包:print和testPrint,我们将print.java文件创建在print包中,将testPrint.java文件创建在testPrint包中,Ps:包名和文件名没有强制要求一致,只是文件名要和文件中的public类的名字一致,不要搞混了哦,自己多创建几次就知道了,小汪汪,加油!
然后分别看一下print.java和testPrint.java中的代码:
//print.java
package print;
public class print
{
public static void Print()
{
System.out.println("Nothing");
}
public static void Print(String str)
{
System.out.println("print string:" + str);
}
}
//testPrint.java
package testPrint;
import print.print;
public class testPrint
{
testPrint()
{
print.Print();
}
testPrint(String str)
{
print.Print(str);
}
public static void main(String []args)
{
testPrint test_1 = new testPrint();
testPrint test_2 = new testPrint("wang xiaosu");
}
}
执行结果是:
print.java文件中:
package print:表明这个print.java文件在print包中,也就是eclipse的workspace中,TestPackage项目下的源文件文件夹src下,print文件夹中,类似的testPrint.java中的package testPrint也是同样的意思,我们可以看一下src文件夹下自动创建了两个文件夹:
其中分别放着print.java文件和testPrint.java文件;
我们在testPrint.java文件中声明导入了print包中的print类,这样,我们就可以访问到print包中的print类,那为什么编译器就知道要去testPrint文件夹所在的同目录中的print文件夹下去找print类,而不会找不到这个print包呢?
这是因为同一个项目创建的文件在同一个命名空间中,这里可以理解为都在src包下,(包和文件夹的区别?这个还要再研究一下呀,小汪汪等等哈,我研究好了再补充上)
那为什么使用jdk提供的系统类也不需要将完整的路径名写上呢?这主要是CLASSPATH在起作用,你打开jdk的目录,然后在压缩文件管理器中打开CLASSPATH指示的文件,我的是.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;就是那个dt.jar和tools.jar,那个%JAVA_HOME%是对JDT安装目录的指代,你会发现你平时使用的所有的类都在各个包中放着;
现在再看我们这里的这个是不是很简单呀!对包是不是也有一定的了解了呢?
总结一下:我们可以使用包来管理我们的源码文件,将不同的类放着不同的包中,然后可以通过import导入我们需要的类,当然我们也可以直接写print.print这样来完整的声明是print包下的print类;以及对包中类的访问权限,参考上面一篇文章哦!
Little wangwang, I miss you...