1、在java里,到处都是class,你的x和y是哪里的呢?或许在c里,它们是全局变量什么的,但是在java里,它们一定要属于哪个class才行的。如果是类自己的变量的话,可以直接在方法里修改,如果是其他的类的变量的话,像你自己说的那样,可以把对象的引用传进去。
2、不怎么清楚,但是Oobject的的clone确实是要throws 那个exception的,你加上try和catch再try一try吧。
3、jcreator没有用过,用ide的话,在指定路径的时候可以用-cp 参数,不用设置环境变量。
在dos下当然用set命令
set classpath=....
只是在dos下设置的环境变量只能在set这个命令的dos环境下用,不影响其他地方,
在win2k下好象在我的电脑-》属性的某个地方可以设置env变量,这样的环境变量才可以。package其实就是别人的class,可以理解成lib吧,也许。
2、不怎么清楚,但是Oobject的的clone确实是要throws 那个exception的,你加上try和catch再try一try吧。
3、jcreator没有用过,用ide的话,在指定路径的时候可以用-cp 参数,不用设置环境变量。
在dos下当然用set命令
set classpath=....
只是在dos下设置的环境变量只能在set这个命令的dos环境下用,不影响其他地方,
在win2k下好象在我的电脑-》属性的某个地方可以设置env变量,这样的环境变量才可以。package其实就是别人的class,可以理解成lib吧,也许。
int getX() {
return this.x;
}
int getY() {
return this.y;
}
2.因为super.clone()会抛出java.lang.CloneNotSupportedException这个异常,所以你必须在外面catch。你在c里面抛出异常外面能不catch就这样让它跑掉吗?3。你可以把package看成一种路径标识。好的package命名,可以让人知道这个包下面是做什么的。比如:
com.mypackage.util.StringUtil
com.mypackage.util.TimeUtil
com.mypackage.db.DBConn
com.mypackage.dao.tbDao
com.teacher.util.StringUtil
因为OOP的重用思想,别人的东西都可以拿过来引用,所以出现同样的类名可以在不同package下共存。
至于怎么设置,你在csdn可以找到很多文章
To: jan4984(Janny)
我的意思是:如果我要在外面使用Point类怎么办?
比如:Point pt = new Point();
...
do something
...
如果这个时候我要使用x,y怎么办?
在C++下,我直接传递地址或者引用就行了,
比如:int x,y;
getXY(&x,&y)就行了(如果是引用直接getXY(x,y)就行了)
可是在Java里怎么办呢?传对象的引用?传哪个对象? 如果说简单点通用点,我的意思是:
在Java里,如果我要得到一个对象的“几个相关”(比如上面的座标)变量成员,
不是很方便吧? 所以我觉得Java在这方面的设定是不是有些
////////////////////////////////////////////////////////////////////////////
To: happyegg(快乐蛋) int getX() {
return this.x;
}
int getY() {
return this.y;
}
?
这样用我还不如直接用Point.x,Point.y,唉,Java为什么不能对普通变量引用呢?
-----------------------------------------------------------2.可是我怎么看到以前的帖子里的答案有的在重写clone的时候没有用到catch和throw
的呢?-----------------------------------------------------------3.
To jan4984(Janny):
请问,怎么“在指定路径的时候可以用-cp 参数”?
能不能给一个例子?
多谢了!
{
public Object clone()
{
return super.clone();//不要(A),因为CLONE返回的是Object类型
}
}
这样可以实现浅层次的COLNE(即对类中的基本类型的复制)
如果类中有对象,则要求每个对象是Cloneabble的,然后对要对clone()方法中对每个对象
再CLONE,这叫深层次的CLONE,有点像递归。
选择系统变量中的“path”在点击“编辑”,然后在最前面加上“C:\j2sdk1.4.1\bin;”。
要运行是输入:“java -classpath d:\java a”
public void setX(int x) {
this.x = (x < 0) ? 0 : x;
}
这样就不会出现x是负数而导致系统出现不可预料的错误了。java抛弃指针就是为了防止在类的外部直接改变类的数据,这就是你的第一个问题的答案。至于将x,y声明成public而直接p.x这样访问是应该尽量避免(在某些特殊场合需要这样做)。当然了,这只是个简单的例子,面向对象还有很多好的特性,需要自己慢慢体会。
哪位高人能给我详细讲讲clone的具体定义和使用方法(主要是格式和注意事项)
在下实在是感激不尽(至于浅copy和深copy的理论知识我已经知道了,就不用了)3.我想问的问题是:
我在打包的时候,怎么指定“打”到哪里?而不是我要用某个类而想上哪里去找。
也就是说,如果我已经实现好一个类了,我怎么让系统把它们打到我想放的地方
我用JCreator的时候,它放的根目录是程序运行的地方
多谢了!
我设的是方法是public如下:在try.java下:
//try package and import
//
package myClasses;
//------------------------------------------------------------------------------
//////////////////////////////////////////////
class Trys
{
public static void Print()
{
System.out.print("You can call me by importing");
}
}
在HelloWorldApp.java下:
// Sample HelloWorld Application and other tries.
import myClasses.*;
//------------------------------------------------------------------------------
//////////////////////////////////////////////
public class HelloWorldApp
{
public static void main(String args[])
{
System.out.println("Hello World!");
Trys ft1 = new Trys();
ft1.Print();
}
}
结果出错了:
HelloWorldApp.java:13: myClasses.Trys is not public in myClasses; cannot be acce
ssed from outside package
Trys ft1 = new Trys();
^
HelloWorldApp.java:13: myClasses.Trys is not public in myClasses; cannot be acce
ssed from outside package
Trys ft1 = new Trys();
^
HelloWorldApp.java:13: Trys() is not public in myClasses.Trys; cannot be accesse
d from outside package
Trys ft1 = new Trys();
^
HelloWorldApp.java:15: Print() in myClasses.Trys is not defined in a public clas
s or interface; cannot be accessed from outside package
ft1.Print();
^
4 errors
难道类还要定义为public?
java -cp <classpath> class [args...]
classpath: <directories and zip/jar files separated by ;>
也就是说我只能调用public的类?那其他的怎么办?
难道分别建一个文件?
{
public static void main(String args[])
{
System.out.println("Hello World!");
A a = new A(); if(a.equals((A)a.clone()))
System.out.println("yes!");
}
}
class A implements Cloneable
{
public Object clone()
{
A temp;
try
{
temp = (A)super.clone();
}
catch(CloneNotSupportedException e)
{
System.out.println("clone fails!");
return null;
}
System.out.println("clone successes!");
return temp;
}
}执行后是:
Hello World!
You can call me by importing
clone successes!也就是clone成功了,可为什么a.equals((A)a.clone())为false呢?
类A没有什么变量成员,更没有什么类对象,只有一个函数啊!即使是浅clone也应该是相等的啊?请高手指点!
{
... public boolean equals(Object o)
{
if (o instanceof A) {
// 只是一个例子
return ((A)o).toString().equals(this.toString());
} return false;
}
}
Hello World!
clone successes!
Press any key to continue...
它们的toString是不同的,
A@1a125f0
A@c1cd1f我现在的想法是:
是不是每个equals应该根据不同的类来实现不同的重载呢?比如说,这个A类没有变量成员,所以只要判断是不是类A就行了假设类A有一个变量成员int a,
则应该这样:if (o instanceof A and o.A == this.a)
{
return true;
}
return false.不知道我这样说对不对?
然后你那个equal()也不是自己定义的,它比较的是内存中地址的引用,当然也不同啦你去看一下API的话会更清楚的第一三个问题也不是一下就知道为什么了的,建议看一下设计模式
比较两个Object是否相同?研究一下以下的代码吧:class A implements Cloneable
{
Stirng id = null; public void setId(String _id) { this.id = _id; }
public String getId() { return this.id; } // 浅层Clone
public Object clone()
{
A temp = new A();
temp.setId(this.id);
return temp;
} // 通常改动equals,也需要改动hashCode
public int hashCode() { return this.id.hashCode(); } public boolean equals(Object o)
{
if (o instanceof A) {
return ((A)o).id.equals(this.id);
} return false;
}
}