免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1643 | 回复: 0
打印 上一主题 下一主题

[读书札记]java2参考大全(第一部分Java语言) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-22 07:57 |只看该作者 |倒序浏览

               
               
               
               
               
               
                这个笔记只记录了看书时感觉容易忘记的或还不理解的东西,其中一定不少谬误和浅薄,希望读第二遍的时候能有所感悟。
Title:Java2参考大全(第四版)
Description:Java2:The
Complete Reference
Copyright:Copyright (c) 2001
by The McGraw-Hill Companies.
Author:Herbert Schildt
Version:Fourth Edition
Editor:Windflowers
2006-03-20 20:50
----------------------------------
第一章 Java起源
第二章 Java语言概述
封装、继承和多态
public static void main( String args[] )
这是java程序开始时调用的方法。
因为它是被类外的代码调用,所以public是必须的;
static允许调用main而不用创建类的实例,这也是必须的。
第三章 数据类型、变量和数组
数据类型
byte 8bit
short 16bit 高字节位优先
int 32bit 为了提高效率,java内部很可能将byte、short提升为int计算
long 64bit  
float 32bit 在值很大或很小时将变得不精确
double 64bit
char 16bit unsigned Java用unicode存储字符;像C一样,可进行数值运算
boolean
常量
前导0表示八进制,前导0x表示16进制
整型常量默认int,赋给byte、shore不超过表示范围不报错;尾随L表示long
浮点型常量默认double;尾随f表示float,尾随d表示double
char常量放在单引号中表示,用\表示转义,\ddd八进制字符,\uxxxx十六进制字符
boolean常量只有true和flase
变量
作用域和生存周期:尽管程序块能嵌套,但内部作用域和外部作用域的变量也不能重名。
类型转换:
两种数据类型是兼容的,且向数值范围大的方向转换,将自动(隐式)转换。
数值型(整型和浮点型)都是兼容的,数值和字符和布尔型互不兼容。
强制转换,整型大变小取模,浮点变整数截断小数。
表达式自动提升:根据表达式的运算顺序,java逐步提高每段表达式到精度较高的类型。
但对仅有byte、shor的t表达式,java也自动提升为int;赋值时要注意。
### 23:10 p43 ###
2006-03-21 20:40
----------------------------------
第四章 运算符
算术运算符
/ 对于整数,余数将被舍去
% 也可对浮点数,结果可为带小数
位运算符
对整数类型进行操作,包括char
~ 位非
^ 位异或
>>> 补0右移
>>  右移(带符号位移)
对byte、short进行移位时注意(也包括char吧?),它会被转为int,所以左边会被扩展
关系运算符
boolean不只能进行等与不等的运算
关系运算的结果是布尔值
布尔运算各个地方
^ 异或
| || 或、短路或(优化的)
& && 与、短路与
() 可清析表达式,不会降低程序运行速度(?)
第五章 程序控制语句
if else if 与 switch
Java编译器会检查每个case常量,建立“跳转表”,因此比与其等效的if else执行快;
if else可测试任何类型布表达式,switch中人检测整型常量。
java中的逗号不是运算符,仅能用于for中
break 后面可加标签,用于跳出包含它的此标签的语句块。
第六章 介绍类
声明对象
声明该类类型的变量,它是一个能够引用对象的简单变量;用new创建对象的实际物理拷贝,并把该对象的引用赋给变量。
构靠函数
没有返回类型,隐含是自己的类类型
默认构造函数将所有实例变量初始化为0(?其它类型呢)
方法中的形参和局部变量会隐藏类的实例变量
### 23:18 p105 ###
2006-03-22 20:15
-------------------------------
垃圾回收
当一个对象的引用不存在时,则认为对象不再需要。垃圾回收会在运行时刻产生各种种回收方法,不会因一个或几个对象而马上回收。
protected void finalize() 方法
finalize()方法只有在回收前才被调用,具有时间不确定性。
定义为protected防止在类外被调用。
第七章 进一步研究方法方法和类
方法重载(method overloading),是java实现多态性的一种方式
java的重载方法只由参数的个数和类型决定调用哪个版本,与返回值无关。
java找不到精确匹配方法时,会自动做一些类型转换。(?)
参数的传递
java 是 call by vaule 的。
此书认为对象是引用传递的,它所举例子是做为参数的对象发生改变。但本书也认为对象名是对象的引用,实际这个对象名作为参数也是值传递的,始终代表同一个对象,不会发生改变,至于对象的内容发生变化是另外一回事了。
访问控制(无继承情况下)
private 类内可见
protected 包内可见
public 公共的
static
静态成员完全独立于类的特定实例,是属于类的。是全局的。
static变量,可以在类定义中用static语句块初始化。这个初始化块仅在类被加载时被执行次。
static方法,仅能调用其它static方法和static数据,不能引用this或super。
final
修饰变量则它的值不能被更改,所以义时要初始化。实际是定义常量,在类的实例中不占内存。
介绍嵌套类和内部类
在一个类中(可为任何位置)定义的类为嵌套类。
非static的嵌套类为内部类,可以直接引用外部类的成员和方法。
第八章 继承
父类类型变量可以引用子类类型,但不有访问子类的方法和属性。
super
调用父类的构造函数,必须放在子类构造函数的第一行。
调用父类中被子类隐藏的成员。
类的多重继承中,super调用的是最近父类的构造函数。
但构造函数函数以派生的顺序调用,先父类后子类。
方法覆盖(override)
子类方法与父类方法的名称参数一样时将覆盖(隐藏)父类的方法
动态方法调度:运行时刻的调度,实现多态的基础。
抽象方法
abstract name(parameter-list);不存在方法体。
抽象类:含有抽象方法的类必须声明为抽象类
抽象类不能实例化,不能定义抽象构造函数或抽象静态方法。
final方法,不能被覆盖,内嵌的方法。
final类,不能被继承,方法都是内嵌的。
### 23:06 p158 ###
2006-03-23 20:42
-----------------------------------------
第九章 包和接口
java源程序可以包含四个部分
单个接口声明
任意数目的引入语句
单个公共类声明
其它类
包:java的名字空间,用目录来组织,目录名与包名严格匹配
package name[.name2][.name3]; 放在java源文件的第一行
访问控制
类有两种访问级别:缺省级别在包内是可见的,public为公共的。
类的成员:
private:私有的,仅在本类中可见,它的子类仍不可访问它。
缺省;包可见的,(它的在同一个包中的子类亦可见,废话)
protected:包可见,任意包中的子类亦可见。
public;任何情况下是公共的
import pkg1[.pkg2].(classname|*);
*引入包中所有类,会加大编译时间,但不会影响类的大小和运行时间
import只能在源文件package语句之后,如果有的话。
当引入多个包中有重名类时,只在使用并编译时出错,此时必须用完整名表示类。
接口
类似抽象类,接口中只能有方法声明和final static型的变量 ( ??? )
接口也可以继承
实现接口的类的方法必须是public,返回类型与接口严格匹配。
实现在多个接口中有同名的方法,那么这个方法将被任一个接口使用
如果一个类包含一个接口但不完全实现接口的定义,那么这个类必须定义为abstract
第十章 异常处理
try catch throw throws finaly
try catch捕获异常
throw抛出异常对象
throws方法声明会抛出的异常列表,调用者必须捕获
finaly无论是否发生异常都会被执行;在方法返回前被执行。try可仅与finaly匹配。
异常类型
Throwable----Exception(用户可能捕捉的异常)---RuntimeException(运行时异常如被零除)
          |
          ---Error(不希望被程序捕获的,系统错误,如堆栈溢出)
### 23:13 p191 ###
2006-03-24 20:52
--------------------------------
第十一章 多线程编程
主线程
java程序起动时,就有一个线程开始运行,即主线程
它是产生其它子线程的线程,通过它最后完成执行
主线程虽是自动创建,但也能通过currentThread()获得它的引用进行控制,currentThread()是Thread的公有静态方法
创建一个线程:实现Runnable接口 或 扩展Thread类
实现Runnable接口:实现这个接口只要实现public void run()方法
run()在程序中确立另一个并发线程执行入口;当run()返回时,该线程结束
run()方法和其它方法一样,可以引用其它类,调用其它方法、变量。
创建一个实现Runnable接口的类的实例,并用它初构造一个Thread的实例,就可以启动线程了
Thread( Runnable threadOb, String threadName )
void start(), Thread的start()执行一个对run()的调用,启动线程
扩展Thread
必须覆盖run()方法;用start方法启动线程
两种方法比较
一般认为类仅在被加强或修改时才被扩展,因此不重载或覆盖Thread的其它方法时,实现Runnable即可;
当类扩展自其它的非Thread类,要创建线程,只能实现Runnable;
final boolean isAlive(); 返回线程是否在运行
final blooean join(); 等待线程结束
### 21:59 p204 ###
2006-03-25 11:00
--------------------------------
同步方法(互斥访问)
在需要同步的方法定义前加synchronized关键字。
同步语句
synchronized( object )
{
  //statements to be synchronized
}
调用不支持同步的方法可以用同步语句,object是被同步对象的引用,语句块中对其成员方法的调用即是管程状态。
### 11:28 p208 ###
12:31
---------------------
线程间通信
Object中有如下方法,但仅在synchronized的方法中才能被调用
final void wait() throws InterruptedException //告知线程放弃管程,进入睡眠
final void notify() //恢得相同对象中第一个调用wait()的线程
final void notifyAll()
( ????? )
死锁问题
suspend() resume() stop(),挂起、恢复、停止线程,java2已不适用
解决方法:在线程中检测一上标志,符合调用wait()挂起,置解除标志的方法中调用notify()恢复线程   
第十二章 输入输出、小应用程序等
Java.io包
顶层抽象字节流类InputStream和OutputStream,抽象方法read()和write()
顶层抽象字符流类Reader和Writer
java.lang.System有三个public static型变量in,out,err
in是inputStream的对象
out,err是PrintStream的对象
从控制台读数据的字符流
BufferedReader( Reader )
InputStreamReader( InputStream )
  InputStreamReaderr是抽象类Reader的子类,System.in是InputStream的引用,
所以BufferedReader br = new BufferedReader( new InputStreamReader(System.in) )
读取字符:BufferedReader的read()方法
int read() throws IOException //读取一个字符以整型返回,遇到流末尾返回-1
读取字符串:BufferedReader的readLine()方法
String readLine() throws IOException
向控制台写数据的字符流
PrintWriter( OutputStream, boolean ) //boolean确定调用println()方法后是否刷新流
PrintWriter pw = new PrintWriter( System.out, true );
PrintWriter支持所类型的print()和println()方法,遇到不同类型,会调用对象的toString()方法
常用的文件字节流类
FileInputStream( String filename ) throws FilNotFoundException
  文件不能打开,抛出异常
  int read() throws IOException //读一字节,返回整型,遇文件尾返回-1
FileOutputStream( String filename ) throws FilNotFoundException
  文件不能创建,抛出异常;如果原来有同名文件,则原文件被清除
  void write( int ) throws IOException//写一字节(仅整型低8位写入)   
transient修饰符
class T
{
  transient int a;
  int b;
}
当对象存储时(T类的一个实例被写入一个持久的存储区域)a不保存。(???)
volatile修饰符
告诉编译器此变量可能被程序其它部分改变
多线程共享实例变量可能会保存该变量私有复本,用些修饰符告诉编译器必须用其主副本
instanceof 运算符
object instanceof type //测试实例的对象类型,返回布尔值
类的实例object如果是或能强制转换成type类的类型,返回true
strictfp 修饰符
修饰类或方法;修饰类时意为所有方法都被strictfp修饰
表示修饰的方法都用原始浮点运算模型来计算(???)
native 修饰符
修饰方法,不定义任何方法体,刚声明了一个本机方法,静态块中将外部本机方法装入
public native void meth();
static{ System.loadLibrary( "nativefile"); }
============2006-03-25============

               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/6563/showart_88916.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP