public class Time
{
private int hour;
private int minute;
private int second;
public Time()
{
setTime(0,0,0);
}
public void setTime(int hh,int mm,int ss)
{
hour=((hh>=0&&hh<24)?hh:0);
minute=((mm>=0&&mm<60)?mm:0);
second=((ss>=0&&ss<60)?ss:0);
}
public String toString()
{
return(hour+":"+(minute<10?"0":"")+minute+
":"+(second<10?"0":"")+second);
}
}
import Time; //实际要去掉这一句。
public class MyTime
{
public static void main(String args[])
{
Time time=new Time();
time.setTime(11,22,33);
System.out.println("设置时间="+time.toString());
}
}
用javac 编译,出错:
MyTime.java:2:需要'.'
MyTime.java:2:需要';'
解决办法:去掉 import Time;这一句。并要设置环境变量CLASSPATH中,要在CLASSPATH中添加一个"."表示在当前目录中搜索类。
其实要想了解包的问题,首先要懂得包和目录的对应关系:
假设你的工作目录为:C:\workdir,那么你上边的两个Java文件就应该放在C:\workdir\mypack目录下,工作目录相当于“当前目录”,在当前目录下,你建立“mypack”目录,就是一级“包”。
对应的,在你的两个Java文件的头部,你应该加入包的定义“package mypack;”,表示这两个文件是定义在mypack包中的。由于两上个文件都在同一个包中,相互可以直接访问,不需要加import语句。
每个application都是从main method开始执行的,你写的这个程序,在method 里建立了一个Time instance然后在这个instance上call setTime() 和 toString() method。
这两个是不同的class,所以,大多数情况下要分开存在两个不同的.java 文件,把两个class写在一起很少见,叫做nested classes,很复杂,初学没有必要会。。
你也许不明白import的意思,主要的问题在这个import,在JAVA,import 这个词不是把你自己写的一个class引入另一个class,如果你是这样理解,那是完全错误的。
import的意思是引入一个standard java package.(They are in JAVA API),不是你自己写的class
e.g
import java.awt.*;
import java.util.*;
import java.io.*;
还有second=((ss>=0 && ss<60) ? ss :0);这种形式非常少见。(this is confusing people i think..)
初学的话,if statement will be much much better ,强烈建议不要用这种形式。
所以,只要把import去掉。这个程序没有问题。
评论