一、Java中的char类型是16位,其范围是0??65536,没有负数的char。在java 中,char是int的一个子集。
二、ASCII字符集占用了Unicode字符集的前127个值
三、Java 的自动类型转换:两个条件(1、这2种类型是兼容的,2、目的类型数的范围比原类型的大;)。
第六章
一、new 运算符是在运行期间为对象分配内存的,即动态性;但内存是有限的,因此new 有可能由于内存不足而无法给一个对象分配内存。此时就会出现异常。
二、类是一个逻辑构造,对象有物理的真实性;
三、当将一个对象引用赋值给另一个对象时,你并没有创建对象的一个拷贝,而是仅仅对引用的一个拷贝。
四、构造函数的任务就是初始化一个对象的内部状态,以便使创建的实例变量能够完全初始化,可以被对象马上使用。当new 创建对象时,每个对象被他的构造函数指定的参数初始化。
第七章
一、方法重载:同一个类中的两个或两个以上的方法可以有同一个名字,只要他们的参数声明不同即可。他是实现多态性的一种方法。
二、方法重载支持多态性,因为他是java 实现“一个接口,多个方法”范型的一种方式。重载的价值在于他答应相关的方法可以使用同一个名字来访问。
三、当创建自己的类时,为了方便高效的构造对象,必须为同一构造函数提供多种形式。
四、总的来说,计算机语言给子程序传递参数的方法有两种:1。按值传递(call-by-value);2、引用调用(call-by-reference)。
当一个简单类型传递给一个方法时,使用按值传递;对象传递则按引用传递。
五、 封装将数据和处理数据的代码连接起来。同时也提供另一个重要属性:访问控制(Access control)。一个成员被访问取决与修改他的声明的访问指示符(access specifier)。java的访问指示符有public、private、protected.protected仅用于继续情况中。外部类对他的private成员变量进行访问只能通过他的public 方法。在大多数实际应用的类中,有必要仅仅答应通过方法来对数据操作。
六 、static要害字可使一个类成员的使用完全独立与该类的任何对象。即他能够在他的类的任何对象创建之前被访问,而不必引用任何对象。static 成员的最常见的例子是main()。因为在程序执行时必须调用main()。static变量实质就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。
声明为static的方法有以下几条限制:
1、他们仅能调用其他的static方法。2、他们只能访问static数据。3、他们不能以任何方式引用this或super。
在一个static 方法中引用任何实例变量都是非法的。
八、一个被声明为final的变量是不可修改的,这就意味着必须再声明final变量时对他进行初始化。
九、java中的数组是作为对象来实现的。所有的数组都拥有length实例变量。length仅反映了数组能够包含的元素的个数。
一○、嵌套类:在另一个类中定义的类就是嵌套类(nested classes)。
若A嵌套B,则B可访问A的所有成员,包括private成员;而A不可以 访问B的任何成员。嵌套类在处理applet时非凡有帮助。
一一、String类:(字符串)
在java中所创建的字符串,包括字符串常量 都是string类型的一个对象。与其他类型对象一样,string也可以组成数组。
一二、命令行参数:
java中的命令行参数是作为字符串存储在传递给main()的string数组中。
第八章 继续(extends)
一、尽管子类中包括超类的所有成员,他不能访问超类中被声明为private的成员。一个被定义为private 的类成员为此类私有,他不能被该类外的所有代码访问,包括子类。
二、 继续的本质: 一旦已创建了一个定义了对象一般属性的超类,该超类可以被继续以生成非凡用途的类。
三、超类变量可以引用子类对象:
是引用变量的类型??而不是引用对象的类型??决定了什么成员可以被访问。即 当一个子类对象的引用被赋值给一个超类变量时,只能访问超类定义的对象的一部分。
四、super 的两种通用形式:1、调用超类的构造函数;2、用来访问被子类的成员隐藏的超类成员。 当一个子类调用super(),他调用他的直接超类的构造函数。这样,super() 总是引用调用类直接的超类。还有,super()必须是子类构造函数中的第一个执行语句。 java支持多级类层次结构。
继续的部分价值:他答应代码重用。构造函数以派生的顺序被调用。
五、方法重载:(8、5的内容)
在类层次结构中,若子类中的一个方法与他超类中的方法有同样的方法名和类型声明,称子类中的方法重载(override)超类中的方法。当从子类中调用重载方法时,他总是引用子类定义的方法,而超类中的方法将被隐藏。方法覆盖仅在两个方法的名称和类型声明都相同时才发生。假如他们不同,那两个方法就只是重载。
方法重载构成java的一个最强大的概念基础:动态方法调度(dynamic method dispatch)。动态方法调度是一种在运行时而不是在编译时调用重载方法的机制。 过程如下:当一个重载方法通过超类引用被调用,java根据当前被引用对象的类型来决定执行哪个版本的方法。若引用的对象类型不同,就会调用一个重载方法的不同版本。即:是被引用对象的类型(而不是引用变量的类型)决定执行哪个版本的重载方法。因此,若超类包含一个被子类重载的方法,那么当通过超类引用变量引用不同对象类型时,就会执行该方法的不同版本。
重载方法答应java支持运行时的多态性。多态性是面向对象编程的本质。重载方法是java实现他的“一个接口,多个方法”的另一种方式。
六、使用抽象类:
当创建自己的类库时会发现,超类中的方法没有实际意义并不罕见。有两种方法处理这种情况。1、仅报告一个错误信息;2、通过子类重载该方法使他对子类有意义。
任何含有抽象方法的类都必须声明为抽象类。抽象类没有对象,即一个抽象类不能通过new操作符直接实例化。而且,不能定义抽象构造函数或抽象静态方法。所有抽象类的子类都必须执行超类中的所有抽象方法或者他自己也声明为abstract。
尽管不可能创建一个Figure类型的对象,但可以创建一个Figure类型的引用变量。变量figref声明为Figure的一个引用,即他可以用来引用任何从Figure派生的对象。
七、Final要害字的三个用途:1、创建一个已命名常量的等价物;其他的两个用法是应用于继续的。:2、使用final 防止继续 ; 3、防止方法重载。
在类之前加final可防止类被继续;声明一个final类就含蓄的宣告他的所有方法都是final.
第九章
接口不定义任何实现,尽管他与抽象类相似,接口有一个非凡的功能:类可以实现多个接口。相反,类只能继续一个超类。
java源程序可以包含下面的四个内部部分的任何一个:
1、单个接口声明(可选) 2、任意数目的引入语句(可选)3、单个公共类声明(必须)4、对包来说是私有的任意数目的类(可选)
一、包(package):包既是命名机制也是可见度控制机制。可在包内定义类,且在包外的代码不能访问类。package语句定义了一个存储类的名字空间。java用文件系统目录来存储包。目录名必须和包名完全匹配。
类是java的最小的抽象单元。因为类和包的相互影响,java将类成员的可见度分为四个种类:
1、相同包中的子类;2、相同包中的非子类;3、不同包中的子类;4、既不在相同包又不在相同子类中的类。
若希望一个元素在当前包外可见,但仅仅是元素所在类的子类直接可见,则把元素定义为protected.
一个类只有两个控制级别:默认的或公共的。若一个类声明为public,他可以被任何其他代码访问。若该类默认访问控制符,他仅可以被相同包中的其他代码访问。 当一个包被引用,仅仅是该包中声明成public的项目可以在引入代码中对非子类可用。
二、接口(interface ):用interface可以指定一个类必须做什么,而不是规定他如何去做。
1、接口的真正含义:接口和类处于不同的层次中,且与类层次无关的类实现相同的接口是可行的。
2、在接口中指定的方法没有默认的实现,每个包含接口的类必须实现所有的方法。
3、实现接口的方法必须声明为public,而且,实现方法的类型必须严格与接口定义中指定的类型相匹配。
4、一个接口引用变量仅仅知道被他的接口定义声明的方法。
5、可以把变量定义成使用接口的对象引用而不是类的类型。任何实现了所声明接口的类的实例都可以被这样的一个变量引用。当通过这些引用调用方法时,再实现引用接口的实例的基础上,方法被正确调用。 调用代码在完全不知“调用者”的情况下可以通过接口来调度。
六、若一个类包含一个接口但是不完全实现接口定义的方法,那么该类必须定义为abstract型。并且任何继续这个类的类也必须实现所有接口中定义的方法或者将自己定义为abstract类。
可使用接口来引入多个类的共享常量。接口还可以运用要害字extends被其他接口继续。其语法与继续一样。当一个类实现一个继续了另一个接口的接口时,他必须实现接口继续链表中定义的所有方法。
第十章异常处理
异常是一种运行时错误。java异常是一种描述代码段中发生的异常情况的对象。java异常处理通过5个要害字控制:try,catch,throw,throws ,finally.系统产生的异常被java运行时系统自动引发。手动引发一个异常,用要害字throw。任何被引发方法的异常都必须通过throws子句定义。任何方法返回前绝对执行的代码被放置在finally块中。
所有异常类都是内置类throwable的子类。
为防止和处理一个运行时错误,只需要把所要监控的代码放进一个try块即可。进跟着try块的,包括一个说明希望捕捉的错误类型的catch子句。当使用多catch语句时,异常子类必须在他们任何父类之前使用。
引发(throw)有两种获得throwable对象的方法:1、在catch 子句中使用参数;2、用new操作符创建。程序执行在throw语句之后立即停止;后面的任何语句不被执行。
所有的java内置的运行时异常有两种构造函数:1、没有参数;2、带有一个字符串参数。当用到第二种形式时,参数指定描述异常的字符串。
throws子句:列举了一个方法可能引发的所有异常类型。这对于除Error或RuntimeException及他们子类以外类型的所有异常是必要的。一个方法可以引发的异常必须在throws子句中声明。若不这样做,将会导致编译错误。 若一个方法可以导致一个异常但不处理他,他必须指定这种行为方法的调用者可以保护他们自己而不发生异常。作到这点可以在方法声明中包含一个throws子句。
finally创建一个代码块。该代码块在一个try/catch块完成之后另一个try/catch出现之前执行。finally无论是否有异常引发都会执行。
若finally块与一个 try联合使用,finally块将在try结束之前执行。
异常处理为控制具有很多动态运行特征的复杂程序提供了一个强大的机制。
java编程时,当方法失败时,引发一个异常;而不是返回一个错误代码??这是处理失败模式的一个更简洁的方法。
第十一章 多线程
多任务处理的两种类型:基于多进程的;基于多线程的。
在java程序中出现线程阻塞,进有一个线程暂停,其他线程继续运行。
管程(monitor)??一种控制机制:一旦线程进入管程,所有线程必须等待直到该线程退出管程。
每个对象都拥有自己的隐式管程,当对象的同步方法被调用时管程自动载入。
Thread 类封装了线程的执行。为创建一个新的线程,程序必须扩展Thread或实现Runnable接口。 为实现一个Runnnable接口,一个类仅需要实现一个run()的简单方法:public void run()
在run()中可以定义代码来构建新的线程。run()方法可以象主线程那样调用其他方法,引用其他类,声明变量。今有的不同是run()在程序中确立另一个并发的线程执行入口。当run()返回时,该线程结束。
在已经创建了实现Runnable接口的类以后,需要在类内部实例化一个Thread类的对象。建立新的线程后,他并不运行直到调用了他的start()方法,该方法在Thread类中定义。本质上,start()执行的是一个对run()的调用。
运用join()方法可确保主线程最后结束。
线程同步:同步的要害是管程(semaphore)的概念。他是一个互斥锁定的对象(互斥体)。在给定的时间,仅有一个线程可以获得管程。当一个线程需要锁定,他必须进入管程。 进入某一对象的管程,就是调用被synchronized要害子修饰的方法。为了退出管程,并放弃对对象的控制权给其他等待的线程,拥有管程的线程仅需从同步方法中返回。
任何时候在多线程情况下,有一个方法或多个方法操纵对象的内部状态,都必须用synchronized要害字来防止出现竞争。
注重:一旦线程进入实例的同步方法,没有其他线程可以进入相同实例的同步方法。然而,该实例的其他不同步方法却仍然可以被调用。
线程间的通讯:java包含了通过wait(),notify()和notifyAll()方法实现的一个进程间通讯机制。这些方法在对象中用final方法实现,所以所有的类都含有他们。且这三个方法仅在synchronized方法中才能被调用。
需要避免的多任务处理有关的非凡错误类型是死锁(deadlock)。
一旦线程被终止,他不能被resume()恢复继续运行。
第十二章
java程序通过流来完成输入输出。流通过java的输入输出系统与物理设备连接。
219。。。。。。待续。。。。。。