导航

学习《21天学通Java 6》(二)

Posted on 2012-07-04 15:03  immiki  阅读(175)  评论(0编辑  收藏  举报

1  MS-DOS 切换文件夹

如果需要切换到其他分区的目录,需要先切换到那个分区,必须先
e:
然后就可以任意目录跳转了

2 使用同一文件夹下其他文件的类出错


我的两个文件java文件在同一目录下,但是javac 调用其他文件的那个文件时,会报错,找不到符号。

根据下面转载的帖子,我推测是我的CLASSPATH或者PATH值设置的有问题

发现时CLASSPATH的变量值忘了加".;"


-----------------------------------------------------------------------------分割线---------------------------------------------------------------------------------------

 如何使用其他 java 文件里定义的类


[转帖]http://zhongwei-leg.iteye.com/blog/1084500


在同一个目录下定义两个类:

Main.java

Java代码 复制代码 收藏代码
  1. public class Main{
  2. publicstaticvoid main(String[] args){
  3. System.out.println("main()");
  4. Person zhongwei = new Person("zhongwei");
  5. System.out.println(zhongwei.name);
  6. }
  7. }

Person.java

Java代码 复制代码 收藏代码
  1. public class Person{
  2. String name;
  3. Person(String name){
  4. this.name = name;
  5. }
  6. }

在该目录下执行:

Java代码 复制代码 收藏代码
  1. javac Main.java

我会看到,该目录下的文件由 2个变为了 4 个:

Java代码 复制代码 收藏代码
  1. Sun-Zhongweis-MacBook-Pro:test_multi_class zhongwei$ ls -la
  2. total 32
  3. drwxr-xr-x 6 zhongwei staff204 Jun1317:43 .
  4. drwxr-xr-x 3 zhongwei staff102 Jun1317:19 ..
  5. -rw-r--r-- 1 zhongwei staff510 Jun1317:31 Main.class
  6. -rw-r--r-- 1 zhongwei staff203 Jun1317:31 Main.java
  7. -rw-r--r-- 1 zhongwei staff269 Jun1317:31 Person.class
  8. -rw-r--r-- 1 zhongwei staff98 Jun1317:31 Person.java

执行:

java Main

输出为:

Java代码 复制代码 收藏代码
  1. Sun-Zhongweis-MacBook-Pro:test_multi_class zhongwei$ java Main
  2. main()
  3. zhongwei

对比 Python 来看,java 使用同目录下的不同文件的类时,不需要 import 那个文件的名字,直接使用即可。

猜测,java 会自动导入一个 path 列表中的所有文件定义的类,而当期目录是默认自动导入的。

几个疑问:

1。类名前的这个 public 的作用?

一个类要在另外一个文件中被调用,定义时一定要加上 public 么?

在网上搜到这样一段话:

文件名要与public类同名、一个文件只能有一个public类、可以有其它类的声明。不一定非要声明成内部类。不建议一个文件内声明两个类,除非客观需要那样

我修改了一下 Person.java 的代码,将 public 删掉。同时删除之前生产的两个 .class 文件,重新执行 javac Main.java.

再运行 java Main

执行结果同之前的一样。也就是说,不加这个 public 也可以。再去掉 Main.java 中的 public,也没有影响。。。

娃哈哈哈哈。。。Google 了半天终于找到一个解释了

写道
http://xahlee.org/java-a-day/access_specifiers.html

For classes, only the “public” access specifier can be used on classes. Basically, Java has this “One Class Per File” paradigm. That is, in every java source code file, only one class in the file is public accessible, and that class must have the same name as the file. (For Example, if the file is 〔xyz.java〕, then there must be a class named “xyz” in it, and that is the class that's public.) Optionally, the class can be declared with “public” keyword.

If you use any other access specifier on classes, or declare more than one class “public” in a file, the compiler will complain.

也就是说,凡是与 java 文件同名的类,即使不加上 public,他也是 public 类型的。但是这种解释没有 Thinking In Java 中的有说服了,即, 不加 public 前缀的 Class 是 friendly 的,只能在同 package 中可见

之所以每个 java 源文件要有一个与文件同名的类,是为了方便编译器查找方便,提高编译速度。

若没有任何 public class,则该文件名可以随意起。

2. 如何导入其他文件夹的类?

估计和 Python 一样,把目标目录加入搜索路径即可。然后 import。

-----------------------------------------------------------------------------分割线---------------------------------------------------------------------------------------