从Delphi到Java... (1)(300分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
最近在学java,发现不是很难,不过有不少概念性的东西还不理解,下面的问题
全部针对Java Applet,和Java Application无关。
1.(50分)书上说除了int,long,float,double,boolean等几种简单数据类型外,其他一切都是类,
那么是不是说创建其他一切类型的实例都要用new方法?如果是,为什么可以这样定义:
public String abc="abc"
2.(50分)delphi里面的函数重载怎样实现?比如我要实现几种不同的构造函数。
3.(100分)怎样捕获事件?我研究了一些代码,发现捕获方法五花八门,比如同一个mouseDown事件:
方法一:
public boolean mouseDown(Event e,int x,int y)
{
...
}
方法二:
public boolean handleEvent(Event e)
{
if((e.id==Event.KEY_ACTION)&&(e.key==Event.DOWN))
...
}
方法三:
MouseListener (具体我没用过)
到底哪一种方法比较正规? 为什么其他的方法不正规?有什么缺陷?
4.(100分)我自己动态定义的东西,比如动态数组,在Applet结束时是否应该自己释放?
怎样释放?在那里释放?如果不用,能否保证不浪费系统资源?我的Applet在网页多次刷新
之后,似乎占用了过多的资源,系统效率明显降低。
5.(100)关于focus的问题:
什么样的类能够接受focus,或者说“什么样的类能够接受用户输入?”,比如
我的Applet上面铺满了我自己定义的一种Canvas的子类对象,当我按下键盘某个建
的时候,是那些Canvas的子类接受我的输入,还是Applet接受?另外,在Applet
上面的这些可视的类,是否有Z-Order的概念?即“是否会有一个类对象覆盖另一个”
的情况?
6.(50分)是否一个.Java文件里面只能定义一个类?太麻烦了! :-(
先就问这些八,最后顺便说一下,VJ++的IDE环境的确一流,使用太方便了,只要
你自己掌握只写pure java代码,那么使用VJ++也未尝不可。
 
1)是,public String abc="abc";等效与 String abc=new String("abc");
2)应该是java的重载吧,只要方法的参数数目或类型不同就可以
3),前面的两种特别是2常见,第三种方法是jb里的,jb里引入了adapter适配器,简化用户的代码(呵呵我费解)
,对象先创建注册事件对象,然后激活actionPerformed()事件把对象发给适配器,
适配器再给原始对象发送事件对象。
4)书上说:程序结束后操作系统保证回收供程序使用的所有存储空间
6)一个原文件内只能声明一个public的类,但可以有多个包内专有访问权限的类。原文件名
同那个public访问权限的
 
1 Visual J++是使用Java编程的同志们公认的世界最差的编辑环境,最好的就很难说啦,
很多人使用IBM的和Borland公司的,还有更多人直接使用JDK加上UltraEdit
2 如果只是简单编程我建议你选择JDK+UltraEdit,jdk提供解释运行,UltraEdit提供
编辑.UltraEdit提供语法加亮,但是不支持语法提示。这个实现非常适合于初学者。
而且速度很快
3 一个Java文件里面可以保存很多类的,你接触的可能是最初的控制台程序,当时提供
的很多例子都是只有一个类
4do
uble,float不需要使用new创建,但是string 需要创建
5 事件捕获的方式有两个版本,希望你使用最新的版本,这个问题我也是刚学,还不会呢
 
我也是刚刚学习Java,这是我的一点认识:
1。一个.java文件中可以定义多个类,但只能有一个公共类,在这个公共类中可以使用静态的
main()方法,作为应用程序的入口。.java文件编译后,编译器会为每一个类生成一个.class文件
2.在JDK1。1以后的版本,对事件的处理需先注册一个适配器,如ActionListener接口,
在该接口的实现方法ActionPerformed中,编写对事件的处理代码。
 
1.MouseListener的使用方法示例?
2.编程数年,我用过无数的IDE编辑器,M$的应该是最好的(姑且不论VJ++本身如何),
borland的更别提了,delphi的IDE比VB的差远了.如果硬要说UtralEdit比VJ++ IDE
好我也没办法. BTW:我印象中IBM在还没做出过什么让人称道的软件产品.
3.关于问题5还没有人回答 :-(

g622: 为什么我的Applet在网页多次重复刷新之后明显机器效率降低,系统速度遍慢?
 
呵呵,因为就没有让人跟踪它使用资源的方式,所以我不知道。。。要不你试一下1.3?
 
cAkk你难道不知道M$的java许可证已经被掉削了,不可能再有VJ++7.0了!!!
另外你编程数年竟然认为M$的IDE编辑器最好,实在令我怀疑你是否编程数年!!
 
VJ++的许可证和我说的没什么关系吧?有6.0的IDE就够了.
况且,我真的没见过什么IDE比VJ++好的,你能告诉我吗?总不会说是Delphi吧?呵呵
算了,不吵了,还是看看我的第5个问题吧,谢谢了
 
You should use interface FocusListener or class FocusAdapter.
Your focus handler class codes like below:
class FocusHandler extends FocusAdapter
{
public void focusGained(FocusEvent e)
{
.....
}
public void focusLost(FocusEvent e)
{
.....
}
}
You can use getComponent() method to get originator of the event, then
handle
the event.
see details in jdkdo
c in package java.awt.event.
 
1,String s = "string",声明等同于String s = new String("string");
2,函数重载只不过是定义名字相同,参数和返回值不同罢了
class A {
public A(){
}

public A(int no){
}

}
3,那种都行,能进到屋里管你是走前门还是窗户。
4,java 自动管理内存,但可能释放比较慢。可以强行释放内存System.gc();
6.一个java文件可以有多个class声明,但只能有一个class是public的。
VJ++好用?我不知道,因为我没用过。不过pure java的概念被M$篡改了。除非你写完程序用
jdk编译。为什么不用jbuilder?
larry
 
大家说的都不错.
不过如果用了VJ++的IDE就不能写"纯Java代码"了,那未免也太牵强了.毕竟用记事本都可以
写pure java嘛! 况且,即使VJ++扩展了pure java,但他还是保证支持pure java代码的,
这点大可以放心.只要你不用ms自己的package即可.
 
>> BTW:我印象中IBM在还没做出过什么让人称道的软件产品
IBM的软件产品,无论从外观上还是稳定性上都超越了M$的东东,
只是用IBM的人很少。
>> 3.(100分)怎样捕获事件?我研究了一些代码,发现捕获方法五花八门

在Window中,如Delphi中对消息的捕获和处理也有很多种呀!


 
3.首先,事件是有handleEvent(Event e)捕获,然后java根据自己的xx在分门别类的根据事件
的类型分发到不同的方法!
例如::evt是一个动作事件(Event.ACTION_EVENT),则e调用了action()方法!
如果是Event.KEY_DOWN,这调用keyDown(),
如果是Event.MOUSE_DOWN则调用mouseDown()//参数没写了
.............................
如发生一个动作事件Event.ACTION_EVENT
所以你可以在handleEvent对事件进行判定写出处理方法if(e.id==.......)
也可以在action里面对事件action进行处理,
6,只能定义一个public的类,别的只要不是public class就行
 
java刚开始学,听课的:)
 
同意lha and apathy.不用ms自己的package,干吗要用ms VJ++?
 
1. String类是仅有的一个特例,允许不是用new来创建,其实这是C++遗留下来的问题。
不过在Java中直接赋值和用new创建还是有区别,如
String s1="abc",s2="abc";
String s3=new String("abc"),s4=new String("abc");
s1==s2 --------- true
s1.equals(s2) -- true
s3==s4 --------- false
s3.equals(s4) -- true
s1==s3 --------- false
s1.equals(s3) -- true
2. 首先你得弄清楚什么是重载(override),什么是过载(overload),我看你提的其实是
过载的问题,过载在Delphi中如下实现,
procedure func(a:Integer);overload;virtual;
procedure func(a:Integer;b:String);overload;virtual;
这样你得到了多个同名方法。在Java中就比较简单,没有Delphi中这么多的限定词。
3. handleEvent, mouseDown等均是jdk1.2之前的,sun已建议不要用这些方法去处理事件了,
其缺点很多,如太多占用cpu资源等。现在的程序应使用Listener,Adapter进行监听。
4. 不用你自己释放,你也管不了。对内存的回收正是Java号称的优点,当然你也可以在程序
结束时硬是执行一下回收语句如下,
System.gc();
不过JVM何时运行Garbage Collector,回收到如何的程度你都无法控制。
另外,在Delphi中你可能习惯用object.Free()方法,那你在Java中可保持此习惯,只是
换成如下语句,
object=null;
让Garbage Collector更容易地追踪你的object,提高内存回收速度。
我给你的建议是,用Java编程内存多多益善,一旦发现运行速度太慢,将机器重起一下。
5. Java中的Component类及其子类可接受focus,顾名思义可显示组件才有捕获focus的必要。
关于Z-order等的问题,我建议你好好的读一下《Java 2图形设计》卷1和卷2,说来实
在是话长。关于是哪个接听到了信息,其实正是我们刚才讨论的使用何种事件处理机制的
问题,新的Listener机制使用注册分发的功能,保证关心此事件的object才能接收到事件,
再也不会产生Delphi中的事件bulb了。
6. 一个java文件中可定义无数的类,包括内类及匿名内类,只不过可用public修饰的仅允许
有一个而已,且文件名必须和此类的类名一致。
另:
VJ++已是淘汰的产品,希望你不要中毒太深。
 
多人接受答案了。
 
后退
顶部