掌握Java语言基本且必备的知识点,在实践中运用并总结!
34.因为Thread类实现了Runnable,所以,可以定义一个Thread的扩展类,并且实现run方法,如图29-5a所示。然后,在客户端程序中创建这个类的一个对象,并且调用它的start方法来启动线程,如图29-5b所示。
但是,不推荐使用这种方法,因为它将任务和运行任务的机制混在一起。将任务从线程中分离出来是比较好的设计。
35.Thread类还包含方法stop( )、suspend( )和resume( )。由于普遍认为这些方法具有内在的不安全因素,所以,在Java 2中不提倡(或不流行)这些方法。为替代方法stop( )的使用,可以通过给Thread变量赋值null来表名它被停止。
36.任何同步的实例方法都可以转换为同步语句。例如,下图a中的同步实例方法等价于图b中的同步实例方法:
37.可以创建不受限的LinkedBlockingQueue或PriorityBlockingQueue。对于不受限队列而言,put方法将永远不会阻塞。
38.在java.util.Vector、java.utilStack和java.uitl.Hashtable中的方法已经被通步。它们都是在Java中出现的旧类。应该使用java.util.ArrayList替换Vector,用java.util.LinkedList替换Stack,用java.util.Map替换java.util.Hashtable。如果需要同步,就使用同步包装类。
39.如果企图在已经使用的端口上创建服务器套接字,就会导致java.net.BindException异常。
40.程序可以使用主机名localhost或者IP地址127.0.0.1来引用客户端正在运行的计算机。
41.如果不能找到主机的话,Socket构造方法就会抛出异常java.net.UnknowmHost-Exception。
42.当创建一个客户端套接字时,必须为其制定一个端口(例如8000)。当客户端与服务器相连(Client.java的第43行)时,在客户端上创建一个套接字。这个套接字有 它自己的本地端口。端口个数(例如2047)由Java虚拟机自动选取,如图30-6所示。
为了看到客户端的本地端口,在client.java中的第46行插入下面的语句:
System.out.println(“local port: “ + socket.getLocalPort( ) );
43.每个swing用户界面类都具有local属性,它是从类Component继承而来的。
44.一个属性可以有多个get和set方法,但是其中必须有一个get或set 方法的签名与该属性的命名方式一致。
45.属性可以是只读的,只有get方法而没有set方法;也可以是只写的,只有set方法而没有get方法。
46.可以不使用ArrayList,而使用java.swing.event.EventListenerList来存储监听器。使用EventListenerList会更好一些,因为它支持同步,并且没有监听器的情况下也是有效的。
47.由于创建一个事件必须指定其源对象,因此,事件类没有无参构造方法。
48.EnrollmentEvent组件是从头开始创建的。如果通过扩展可产生事件的组件来创建新组件,那么新组件就继承了产生相同类型事件的能力。例如,JButton是java.awt.Component的一个子类,而Component可触发鼠标时间MouseEvent,所以,JButton也可以检测和产生鼠标事件。由于在父类中已经给出了相应代码,所以,不需要在扩展子类中再编写产生这些事件和注册事件监听器的代码。但是,对于父类不支持的事件,还是要在组件中编写能够触发这些事件的代码。
49.装入applet时,Web浏览器通过调用applet的无参构造方法,创建一个applet的实例。所以,构造方法是在init方法之前调用的。
50.注册/注销/处理事件的方法(第54-80行)与程序清单32.2中的第49-82行相同。如果使用像NetBeans或Eclipse这样的开发工具,可以自动生成这些代码。
51.如果创建一个未指定模型的JSpinner对象,则所创建的微调文本域会显示一个整数序列。
52.所有关系数据库系统都支持主键约束和外键约束。不是所有的数据系统都支持域约束。例如,在Microsoft Access数据库中,不能指定numOfCredits的值大于0且小于5的约束。
53.关系数据库管理系统由很多种。它们共享相同的SQL语言,但是不一定支持SQL的每个特征。一些系统对SQL语言进行了扩展。本章介绍所有系统都支持标准SQL语言。
54.在Windows系统中,每次计算机启动时启动MySQL数据库服务器。输入命令net stop mysql 可以终止它,输入命令net start mysql能够重新启动他。
55.SQL的关键字不区分大小写。本书采用以下命名规则:表格的命名方式与Java类的命名方式一样 ,属性的命名方式和Java变量的命名方式一样。SQL关键字的命名方式和Java关键字的命名方式相同。
56.SQL中的比较运算符和布尔运算符与Java中的意义相同。在SQL中相等运算符是=,但在Java中是==。在啥情况中不等于运算符是<>或!=,但在Java中是!=。not、and和or运算符在Java中是!、&&(&)和||(|)。
57.要选择表中的所有属性,不需要在select字句中列出所有属性的名字,而只需要使用一个星号(*),用它表示多有的属性,例如,下面的查询显示CS系且居住在邮编为31411的学生的所有属性。
58.在MS Access的早起版本中,通配符“*”,而自符“?”与任意单字符匹配。
59.关键字as在MySQL和Oracle中是可选的,但是在MS Access中是必须的。
60.com.mysql.jdbc.Driver是mysqljdbc.jar中的一个类,oracle.jdbc.driver.OracleDriver是ojdbc6.jar中的一个类。mysqljdbc.jar和ojdbc.jar包含许多支持驱动程序的类。这些类由JDBC使用,但不直接由JDBC程序员使用。当你在程序中明确使用某个类时,它被JVM自动加载。但是在程序中不显示地使用驱动程序类,因此,必须编写代码告诉JVM加载它们。
61.Java6支持驱动程序自动加载,因此不需要显式地加载它们。但是,在编写本书的时候,并不是所有的驱动程序都有这个特性。为安全起见,应该显式加载驱动程序。
62.如果在DOS提示符下运行本程序,请在classpath中指定合适的驱动程序,如图37-20所示。
classpath目录和jar文件用逗号分隔。句点(.)表示当前目录。为了方便起见,驱动器文件放在lib目录下。
63.Connection接口处理事务表名他们是如何处理的。默认情况下,新链接是自动提交(autocommit)模式,并且每条SQL语句都作为一个单独的事务执行和提交。提交发生在一条语句完成或下次执行发生时,不管哪一个先发生。对于返回结果集的语句,语句完成是指已经获取了结果集的最后一行或结果集已经关闭。如果一条语句返回多个结果,那么提交发生在获取所有结果的时候。可以用setAutoCommit(false)放法取消自动提交,此时,调用方法commit()或rollback()之前的多有语句都被组织成一个事务。rollback()方法无效事务引起的所有变化。
64.关于如何创建存档文件的信息,请参阅补充材料III.Q“打包和部署java工程”。使用下面的命令创建文件FindGrade.jar:
C:book>jar -cf FindGrade.jar FindGrade.class FindGrade$1.class
65.若要从applet中访问数据库,安全性限制要求必须从数据库所在的服务器上下载它。因此,只能在服务器上发布applet。
66.这个程序中有一个安全漏洞。如果在SSN字段中输入’1 or true or ‘1,就会得到第一个学生的成绩,这是因为查询字符串现在变成了:
Select firstname, mi, lastname, titlle, grade
from student, Enrollment, course
Where student.ssn = ’1' or true or ‘1’ and
Enrollment.courseId = ‘ ‘ and
Enrollment.courseId = Course.courseId and
Enrollment.ssn = student.ssn;
67.存储进程的语法是和特定厂商相关的。这里使用Oracle PL/SQL演示本书中的存储进程。PL/SQL是SQL的程序化语言扩展。它是一个完全功能化的程序设计语言,语法和Ada很相似。



