读张孝详《JAVA就业培训指导》二

来源:互联网 发布:flash for mac破解版 编辑:程序博客网 时间:2024/05/29 15:50
1、对象的多态性
同一段程序代码,比如吃饭,当叫来一个中国人时,我们看到的是用筷子,当叫来一个美国人时,用的是小刀和叉子
同一段程序代码却有两种截然不同的结果,这就是面向对象的多态性,有如下特点:
a、不必为每一个子类编写功能调用,只需要对抽象基类进行处理


2、自定义异常
我们不可能期待JVM自动抛出一个自定义异常,也不能够期待JVM会自动处理一个自定义异常。发现异常、抛出异常以及处理异常的工作必须靠编程人员在代码中利用异常处理机制自己完成。
一般情况下,发现和抛出一个自定义异常通过在try程序块中利用if和throw语句完成,即:
 
try {
    ...
    if (someExceptionConditon == true) {
        throw new CustomException("A custom exception xxx occurred. Please
        check your entry...")
    ...
    }
catch (CustomException e) {
    ...
}


public class CustomException extends Exception {    //或者继承任何标准异常类
    public CustomException()  {}                //用来创建无参数对象
    public CustomException(String message) {        //用来创建指定参数对象
        super(message);                             //调用超类构造器
    }   



3、访问控制


允许所有外部类访问使用public
允许子类和同包类访问使用protected
只能自己访问使用private


4、关于jar
jdk的包和类主要在rt.jar中,不需要配置在rt.jar中,jvm可以自动寻找到
配置JDK环境变量
1)在系统变量里新建JAVA_HOME变量,变量值为:C:\Program Files\Java\jdk1.6.0_14(根据自己的安装路径填写)
2)新建classpath变量,变量值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
3)在path变量(已存在不用新建)添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin(注意变量值之间用“;”隔开)
4)“开始”-->“运行”-->输入“javac”-->"Enter",如果能正常打印用法说明配置成功


5、多线程
代码与线程密不可分,同一段代码可以与多个线程相关联,在多个线程上执行的也可以是同一段代码
a、用Thread类创建线程:继承Thread类,子类要覆盖Thread类中的run函数;启动新线程,调用Thread子类对象的start方法
b、用Runable传入Thread


实现Runnable接口相对于继承Thread类来说,有如下好处
适合多个相同程序代码的线程去同理同一资源的情况
可以避免由java单继承特性带来的局限
程序健壮性


几乎所有都可用Runnable接口,建议使用


6、多线程的同步问题
线程安全:synchronized(object){// 代码段},同步方法


7、集合类


Vector与Enumeration
java不支持动态数组,Vector提供类似“动态数组”的功能
如果不能预先确定要保存对象的数目,或是需要方便获得某个对象的存放位置时,Vector合适
Vecotr.addElements;Vector.elements返回Enumeration接口对象;
Enumeration.hasMoreElement;Enumeration.nextElement


Collection与Iterator接口
不能直接使用基类Collection接口,要使用实现类,比如ArrayList


Vector所有方法是线程同步的,两个线程并发访问Vector对象时安全的
但只有一个线程访问Vector对象时,因为仍调用了同步方法,效率低些


ArrayList类中所有方法是非同步的


Collection—对象之间没有指定的顺序,允许重复元素
Set—对象之间没有指定的顺序,不允许重复元素
List—对象之间有指定的顺序,允许重复元素




Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。
第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。
一些资料建议,当需要同步时,用Hashtable,反之用HashMap。但是,因为在需要时,HashMap可以被同步,HashMap的功能比Hashtable的功能更多,而且它不是基于一个陈旧的类的,所以有人认为,在各种情况下,HashMap都优先于Hashtable。
  
关于Properties
有时侯,你可能想用一个hashtable来映射key的字符串到value的字符串。DOS、Windows和Unix中的环境字符串就有一些例子,如key的字符串PATH被映射到value的字符串C:\WINDOWS;C:\WINDOWS\SYSTEM。Hashtables是表示这些的一个简单的方法,但Java提供了另外一种方法。
Java.util.Properties类是Hashtable的一个子类,设计用于String keys和values。Properties对象的用法同Hashtable的用法相象,但是类增加了两个节省时间的方法,你应该知道。
Store()方法把一个Properties对象的内容以一种可读的形式保存到一个文件中。Load()方法正好相反,用来读取文件,并设定Properties对象来包含keys和values。
注意,因为Properties扩展了Hashtable,你可以用超类的put()方法来添加不是String对象的keys和values。这是不可取的。另外,如果你将store()用于一个不包含String对象的Properties对象,store()将失败。作为put()和get()的替代,你应该用setProperty()和getProperty(),它们用String参数。
好了,我希望你现在可以知道如何用hashtables来加速你的处理了。




8、IO/输入输出
数据流是一串连续不断的数据集合,就像水管里的水流,在水管的一端一点一点地供水
而在水管的另一端看到的是一股连续不断的水流。数据写入程序可以使一段一段地向管道
中写入数据,这些数据段会按照先后顺序形成一个长的数据流,不管怎样,写入效果都是
一样的。


将IO流分为两个大类,节点流类和过滤流类(处理流类或者包装类)
可以直接操作节点流类,也可以通过一个包装类去调用节点流类,以
更加灵活方便地读写各种类型的数据


InputStream和OutputStream是两个抽象类,还不能表明对应哪种IO设备
它们下面有许多子类,包括网络、管道、内存、文件等
FileInputStream、FileOutputStream;// 处理字节比较合适
Reader、Writer;// 处理字符比较合适
FileReader、FileWriter要结合包装类才更能体现优势


PipedInputStream和PipedOutputStream主要用来完成线程之间的通信
ByteArrayInputStream与ByteArrayOutputStream


过滤流与包装类
以FileOutputStream和FileInputStream为例,这两个类知识提供了读写字节的方法,我们要往文件中写入或者读取各种类型
的数据,我们就必须先进行转换,包装类就在内部提供了各种转换,
包装类
BufferInputStream/BufferOutputStream使用缓冲区进行了优化
DataInputStream/DataOutputStream提供了读写各种基本数据类型的方法
InputStreamReader和OutputStreamWriter完成字节流和字符流之间的转换

0 0