06-9-20:
第二章:第一个程序
当我们运行Java程序的时候,意味着把一个特别的类的类名作为Java虚拟机的参数。
继承:Java的父类叫superclass,子类叫subclass,在Java中,每个类只有一个superclass,多个subclasses。
A extends B指明了A是B的subclass。通过继承机制,subclass可以加强和扩展superclass的功能。
JComponent类:提供framework来构建各种不同的UI组件。我们覆盖superclass的方法来实现特殊组件的行为。听起来是受限制的,尽管我们被限制一些预定义的例程,但是这些都不是问题。当我们引用一种对象的时候,意味着我们引用了他和他的子类。也就是说我们能够正确的引用HelloComponent作为一个JComponent,因为子类能够被认为是is a 关系,即子类是superclass的一种。
包和imports:Java包是一组相关的类。在同一个包中的类之间有特殊的访问权。类把包的名字作为他的全名,叫做fully qualified name。Java.lang包含了基础类,这个包是自动import的。(这个有点像.net中的using了,namespaces提了那么多年了,经久不衰)
HelloJava2:The Sequel:
实例变量:其实就是类的成员变量。另外实例变量是有默认值的,而局部变量没有默认值,编译会提示。
事件:跟windows程序设计中的事件驱动是一样的。Java也是事件驱动。为了与event工作,需要引入新的包,java.awt.event,这个包提供了特殊的Event对象,对于特殊的用户动作,Java GUI组件会产生事件。在事件源上注册一个listener能够使对象得到消息。比如说,为了声明一个listener想要接收一个组件的鼠标移动事件,你调用组件的addMouseMotionlistener方法,用listener对象作为一个参数。B.add*listener(A)表示A说我要接收B的*事件。如果没有listener,Java不会产生事件。最后两个问题:系统怎么知道我们的类包含必要的mouseDragged和mouseMoved方法?我们为什么要提供mouseMoved方法而不做任何事情?
repaint方法:repaint方法导致Java 窗口系统下一个可能的时候调用paintComponent方法。这个操作模型最好的优势是repaint行为被其他东西处理,我们就可以专注我们的业务。Java系统有一个分离的,专门的线程处理所有的repaint要求。
接口:对于编译器和开发人员来说,接口相当于合同。你要实现某个接口,就是说这些接口的函数必须要实现。一个类可以实现多个接口。