31.接口:作用是弥补类不能多继承的缺陷.==在实现接口的非抽象类中必须实现接口中所有的方法,且实现接口的方法中必须声明为public 因为在接口的所有的方法中默认的均是隐示"public abstract".===在接口中声明的方法时,不能使用native,static,final等修饰符.和public类一样, public接口也必须定义在与接口同名的文件中.==接口中可以有数据成员,这些数据成员默认都是public static final(隐示)===从接口的组成上讲,接口可以理解为一种特殊的抽象类,且接口与接口之间可以多继承.
32.在java中类只能是单继承类,但可以实现多个接口.且一个类在继承另一个类的同时,还可以实现多个接口(注意的是要先继承类,再实现多个接口,否则会报错)一个接口可以有多个接口继承.
33.内部类详解:
>>内部类可以访问外部类的所有成员变量和成员方法(强调的是访问私有成员,这也算是内部的一个重要作用).但如果在方法中定义内部类,如果要访问局部变量(非成员变量和方法),则这个局部变量必须被声明为final >>内部类可以是private或protected,还可以声明为abstract或final.内部类也可以声明为"static"的,但此时就不能再使用外部类的非静态的成员变量和非静态的成员方法. 非静态的内部类中的成员不能声明为"static"的(也即是说如果要在某个内部类中声明static成员,则只有把这个内部类声明为static),只有在顶层类或"static"的内部类中才可以声明static成员.>>内部类主要用法1)由于内部类中,可以随意的访问外部类的成员,这样可以更好的组织代码,增加可读性.(2)内部类可以用于创建适配器类(适配器类主要用于实现接口,比如在图形界面的监听事件中构造匿名内部类),来实现接口,以更好地定位与接口关联的方法在代码中的位置.
34.在方法调用时,应根据参数判断是传值调用还是传址调用.当基本类型作为参数时,进行的是传值调用.当复合类型作为参数时(如数组,对象等)进行的是传址调用,也即是通常所说的地址引用,并采用动态联编.
35.符号常量:用一个标示符表示一个不允许修改的量,且定义常量必须赋初值.格式:"访问控制符 final 数据类型 符号常量名=初值"(在一个类中,只允许类的成员定义为符号变量,而不能在方法中定义符号常量)定义符号常量主要是为了修改方便,同时为了节省内存空间一般把符号常量定义为"static",这种符号常量也即是最终变量.
36.除了一般格式定义的最终方法,class中所有的private和static方法也算是final方法.最终类中所有方法均是最终方法.最终方法的作用是防止被子类覆盖,用来确保在继承过程中保持这个方法的行为不变.从效率上考虑,编译器会对此方法调用进行优化.需注意的是:编译器会自行对final方法进行判断,并决定是否进行优化.通常在方法体积很小(代码量小),而我们确实不希望它被覆盖时,才将其声明为final.
37.对象赋值:将一个对象赋给另一个对象,其实质是进行地址值传送.(系统会再将地址值传给新的对象名时,释放原对象所占的内存空间).此时,这两个对象同时指向这个地址值,也即是说一个对象有两个名字.从对象三大属性上讲,对象赋值的本质是将原对象的的状态(对象变量),行为(方法)用新的标志(新的对象名)来表示.
38.一般成员变量和静态成员变量的区别:一般成员变量是定义在对象级别上的,即是说类的每个对象都会有它专属的一般成员变量.而静态成员变量是定义在类的级别上的,会受不同对象的不断操作(或是类本身操作)来改变其值,而每次都是保存最终的值.
39.构造方法调用的顺序:每个子类的构造方法中都直接或隐含地调用了父类的构造方法,且在子类的每个构造方法中不会同时出现"this();super();"这两种形式.据此来理解构造方法的调用顺序.
40.子类和父类对象的赋值规则:子类对象可以直接赋给父类对象(子类对象完全继承了父类对象的特点),父类对象赋给子类对象必须经过强制类型转换(父类对象不具备子类对象的所有属性)
41.成员覆盖:子类继承父类后,重新定义继承的成员变量和成员方法,使父类的相应变量和方法被隐藏.这时如果要访问被子类覆盖的父类方法或者变量就需要通过super来访问.从子类本身的作用上看,对父类某些方法的合理覆盖,可以使子类更好地完成自己的任务.
42.final与abstract不能用来同时修饰一个类.
43.类实现接口规则:抽象类实现接口,可以不实现接口中所有方法,但在抽象类的非抽象类的子类中必须实现其父类所实现的接口中的所有方法.非抽象类实现接口,必须实现接口中的所有方法.在实现抽象方法时,一定要和接口中方法的方法头相同,且要显示用public来修饰.
44.变量:>>可见性:在规定的作用域内,变量可被访问操作>>存在时间:只有在规定的作用域内,变量是存活的.从基本类型上看变量不存在即是说内存立即被回收,从对象变量上看,对象句柄不存了,对象不再被操作,对象内容还存在.
45.break:结束整个循环,退出循环体 continue:结束本次循环.注意他们和标号的用法.
46.全局变量:在程序运行的全过程中,由程序自动向内存申请内存空间,空间的内容可以在程序全过程中进行操纵或修改.局部变量:在程序局部过程中,由程序自动向内存申请内存空间,空间的内容在程序局部范围内可以被操作.
47.类设计思想: 1.永远保持数据私有 2.永远初始化数据 3.不要在一个类中使用太多的数据基本类型 4.尽量使类的功能单一化
48.导入包只是导入该包中的类,并不能导入该包的子包中的所有类,如果要导入子包中的类,还应有相应的import语句.
49.异常处理:>>对于RuntimeException,通常不需要我们去捕获,这类异常通常由java运行系统自动抛出并自动处理 但如果是在方法中声明抛出非RuntimeException异常时,则在调用的方法中必须对其捕获(当然也可以继续声明抛出) >>如果父类的方法抛出多个异常,则子类中的覆盖方法如果要抛出异常(可以不抛出异常),则要么抛出相同的异常,要么抛出异常的子类(总之要小于等于父类方法抛出的异常),但不能抛出新的异常(父类构造方法抛出异常不遵守此规则) >>我们可以在方法中声明时,声明一个不会抛出的异常,java编译器就会强迫方法的调用者对异常进行处理.这种方法通常用于抽象基类abstract base class 和接口interface中. >>finally方法终是被执行(除非在方法前有相应的exit方法),利用此来合理地设置相关代码的执行.
50.程序进程线程:>>程序是计算机指令的集合,它以文件的形式存储在磁盘上。>>进程是一个程序在其自身的地址空间中的一次执行活动.进程是资源申请,调度和独立运行的单位,因此,它使用系统中的运行资源.而程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此,它不占用系统的运行资源.>>线程是进程中的一个单位的连续控制流程.一个进程可以拥有多个线程.线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单.
51.总结集合之间相互转换方法:>>Arrays对象调用asList()可以转换为List对象>>ArrayList对象调用toArray()可以返回一个对象数组>>
52.关于迭代器Ietrator中的remove()方法:此方法是移除迭代器返回的最后一个元素,即是说此方法在调用前至少要调用一次next方法,因为在迭代器对象调用next方法时,才会有一个返回元素. 而如果多次调用next方法后,再调用remove方法,会把其最后一个next方法所返回的元素移出.注意的是:remove是一个可选的操作.
53.由java中的集合框架引出的数据结构:>>线性表:>>
54.利用File类创建目录或文件步骤:>>1.构建File类对象“File f=new File("e:\\java\\myjava","1.txt")”,注意"\\"实际是"\",因为在java的解释系统下,"\"代表后面跟一个转义字符.当然也可以通过其它构造方法构建File类对象. >>2.第一步构建的File类对象f调用mkdir()可以构建一个名为"1.txt"的目录;调用createNewFile()可以构建一个名为"1.txt"的文件.但要注意的是:尽管能同时调用这两个方法(即编译不会报错),但不能凭此来达到同时构建一个文件和一个目录的目的(一般我们也不希望这样做,因为文件都有后缀名,而目录一般不会用到点号,尽管用点号不会错).所以在调用mkdir()或者createNewFile()时,先调用的那一个会起作用,后调用的基本没的实质性的作用. ==总结:创建目录还是文件,我们应有一个明确的目的,也是我们在构造File类对象的一个参准,有目的性的构造一个File类对象以供我们调用合适的方法来构建文件或者是目录 补充>>关于File类移植总结:File类的字段separator作为与系统有关的默认名称分隔符,具有较强的通用性.比如在构建一个File对象时,可以"File fi=new File(File.separator)"来构建一个File对象,这个fi代表当前路径.这个File对象fi可以传给"File(File parent, String child)"这种形式的构造方法,即"File f=new File(fi, "myjava"+File.separator+"a.txt")" 再f来调用相应的mkdir()或者createNewFile()来创建文件或目录.说明:字段File.separator代表一个路径分隔符在windwos下代表"\" 而在linux下代表"/".
55.在流的操作中,如果涉及到缓冲流,一定要注意对这个缓冲流进行刷新.一般通过调用flush()或者调用close()来关闭这个流.(说明:缓冲流是在写入或者读出时,该流的缓冲区满时,才会实质性的读写到目标地方.) 如果不对这个缓冲流对象进行刷新或者关闭流操作,则这个流的数据不会有实质性的读写操作,在目标地方我们也就看不到.
56."=="解析:比较的是变量的值.>>8种基本类型变量的比较从值很容易看出比较结果.>>如果比较的是对象变量(八种基本类型外的引用变量),首先分析下对象变量的内存分配问题,举例:String str=new String("abc"),str这个变量被存储在栈内存中,且这个栈内存中str所占的内存单元的内容是指向一个堆内存的地址(即str实际是存放的一个对堆内存的引用地址),而这个被指向的堆内存地址才是真正的存放"abc".对象new时会有不同的指向, 而这个指向就是一个对堆内存的实际地址的引用,也是str在栈内存的实际数据. 对于基它的非基本类型同样如此,强调:声明一个对象变量时,实际是在这个变量所对应的栈内存单元中存放一个引用地址,而这个地址正是指向实际的对象的内容存放的位置. ====具体分配步骤:声明str时,在栈内存取得一个内存空间,这时的这个空间没有任何内容,是一个空指向.当new一个对象时,在堆内存存放这个对象的具体内容,并把这个堆内存的地址空间给str所在的栈空间,这时这个str栈空间才有实质性的引用指向. "equals"方法解析:比较两个对象变量所代表的对象的内容是否相等,通常会根据程序设计需要重写此方法(重写时也可能用到"=="这个操作符,)
57.交换两个变量值的一个不用中间变量的经典操作:假如要交换的是x,y则操作为:
x=x+y;y=x-y;x=x-y;(或者y=x+y;x=y-x;y=y-x;)
58.克隆时,我们一定要调用super.clone():在运行时刻,Object中的clone()识别出你要复制的是哪一个对象,然后为此对象分配空间,并进行对象的复制,将原始对象的内容一一复制到新对象的存储空间中.
59.在applet小应用程序中,必须把类名声明为public,以便浏览器加载,另外在烛应用程序中建议不要导入整个包,以便浏览器快速加载
60.巧用appletviewer:小程序一般终是和html文件关联,我们可以这样:appletviewer html文件来执行含有小应用程序的html文件. 而如果我们以注释的形式把<applet code="Test.class" height="500" width="400"></applet>添加到.java文件中 我们便可以appletviewer Test.java了.因为编译不会出错,得到了.class文件,而appletviewer执行时,会忽略掉除了<applet>...<applet>之外的所有内容.
32.在java中类只能是单继承类,但可以实现多个接口.且一个类在继承另一个类的同时,还可以实现多个接口(注意的是要先继承类,再实现多个接口,否则会报错)一个接口可以有多个接口继承.
33.内部类详解:
>>内部类可以访问外部类的所有成员变量和成员方法(强调的是访问私有成员,这也算是内部的一个重要作用).但如果在方法中定义内部类,如果要访问局部变量(非成员变量和方法),则这个局部变量必须被声明为final >>内部类可以是private或protected,还可以声明为abstract或final.内部类也可以声明为"static"的,但此时就不能再使用外部类的非静态的成员变量和非静态的成员方法. 非静态的内部类中的成员不能声明为"static"的(也即是说如果要在某个内部类中声明static成员,则只有把这个内部类声明为static),只有在顶层类或"static"的内部类中才可以声明static成员.>>内部类主要用法1)由于内部类中,可以随意的访问外部类的成员,这样可以更好的组织代码,增加可读性.(2)内部类可以用于创建适配器类(适配器类主要用于实现接口,比如在图形界面的监听事件中构造匿名内部类),来实现接口,以更好地定位与接口关联的方法在代码中的位置.
34.在方法调用时,应根据参数判断是传值调用还是传址调用.当基本类型作为参数时,进行的是传值调用.当复合类型作为参数时(如数组,对象等)进行的是传址调用,也即是通常所说的地址引用,并采用动态联编.
35.符号常量:用一个标示符表示一个不允许修改的量,且定义常量必须赋初值.格式:"访问控制符 final 数据类型 符号常量名=初值"(在一个类中,只允许类的成员定义为符号变量,而不能在方法中定义符号常量)定义符号常量主要是为了修改方便,同时为了节省内存空间一般把符号常量定义为"static",这种符号常量也即是最终变量.
36.除了一般格式定义的最终方法,class中所有的private和static方法也算是final方法.最终类中所有方法均是最终方法.最终方法的作用是防止被子类覆盖,用来确保在继承过程中保持这个方法的行为不变.从效率上考虑,编译器会对此方法调用进行优化.需注意的是:编译器会自行对final方法进行判断,并决定是否进行优化.通常在方法体积很小(代码量小),而我们确实不希望它被覆盖时,才将其声明为final.
37.对象赋值:将一个对象赋给另一个对象,其实质是进行地址值传送.(系统会再将地址值传给新的对象名时,释放原对象所占的内存空间).此时,这两个对象同时指向这个地址值,也即是说一个对象有两个名字.从对象三大属性上讲,对象赋值的本质是将原对象的的状态(对象变量),行为(方法)用新的标志(新的对象名)来表示.
38.一般成员变量和静态成员变量的区别:一般成员变量是定义在对象级别上的,即是说类的每个对象都会有它专属的一般成员变量.而静态成员变量是定义在类的级别上的,会受不同对象的不断操作(或是类本身操作)来改变其值,而每次都是保存最终的值.
39.构造方法调用的顺序:每个子类的构造方法中都直接或隐含地调用了父类的构造方法,且在子类的每个构造方法中不会同时出现"this();super();"这两种形式.据此来理解构造方法的调用顺序.
40.子类和父类对象的赋值规则:子类对象可以直接赋给父类对象(子类对象完全继承了父类对象的特点),父类对象赋给子类对象必须经过强制类型转换(父类对象不具备子类对象的所有属性)
41.成员覆盖:子类继承父类后,重新定义继承的成员变量和成员方法,使父类的相应变量和方法被隐藏.这时如果要访问被子类覆盖的父类方法或者变量就需要通过super来访问.从子类本身的作用上看,对父类某些方法的合理覆盖,可以使子类更好地完成自己的任务.
42.final与abstract不能用来同时修饰一个类.
43.类实现接口规则:抽象类实现接口,可以不实现接口中所有方法,但在抽象类的非抽象类的子类中必须实现其父类所实现的接口中的所有方法.非抽象类实现接口,必须实现接口中的所有方法.在实现抽象方法时,一定要和接口中方法的方法头相同,且要显示用public来修饰.
44.变量:>>可见性:在规定的作用域内,变量可被访问操作>>存在时间:只有在规定的作用域内,变量是存活的.从基本类型上看变量不存在即是说内存立即被回收,从对象变量上看,对象句柄不存了,对象不再被操作,对象内容还存在.
45.break:结束整个循环,退出循环体 continue:结束本次循环.注意他们和标号的用法.
46.全局变量:在程序运行的全过程中,由程序自动向内存申请内存空间,空间的内容可以在程序全过程中进行操纵或修改.局部变量:在程序局部过程中,由程序自动向内存申请内存空间,空间的内容在程序局部范围内可以被操作.
47.类设计思想: 1.永远保持数据私有 2.永远初始化数据 3.不要在一个类中使用太多的数据基本类型 4.尽量使类的功能单一化
48.导入包只是导入该包中的类,并不能导入该包的子包中的所有类,如果要导入子包中的类,还应有相应的import语句.
49.异常处理:>>对于RuntimeException,通常不需要我们去捕获,这类异常通常由java运行系统自动抛出并自动处理 但如果是在方法中声明抛出非RuntimeException异常时,则在调用的方法中必须对其捕获(当然也可以继续声明抛出) >>如果父类的方法抛出多个异常,则子类中的覆盖方法如果要抛出异常(可以不抛出异常),则要么抛出相同的异常,要么抛出异常的子类(总之要小于等于父类方法抛出的异常),但不能抛出新的异常(父类构造方法抛出异常不遵守此规则) >>我们可以在方法中声明时,声明一个不会抛出的异常,java编译器就会强迫方法的调用者对异常进行处理.这种方法通常用于抽象基类abstract base class 和接口interface中. >>finally方法终是被执行(除非在方法前有相应的exit方法),利用此来合理地设置相关代码的执行.
50.程序进程线程:>>程序是计算机指令的集合,它以文件的形式存储在磁盘上。>>进程是一个程序在其自身的地址空间中的一次执行活动.进程是资源申请,调度和独立运行的单位,因此,它使用系统中的运行资源.而程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此,它不占用系统的运行资源.>>线程是进程中的一个单位的连续控制流程.一个进程可以拥有多个线程.线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单.
51.总结集合之间相互转换方法:>>Arrays对象调用asList()可以转换为List对象>>ArrayList对象调用toArray()可以返回一个对象数组>>
52.关于迭代器Ietrator中的remove()方法:此方法是移除迭代器返回的最后一个元素,即是说此方法在调用前至少要调用一次next方法,因为在迭代器对象调用next方法时,才会有一个返回元素. 而如果多次调用next方法后,再调用remove方法,会把其最后一个next方法所返回的元素移出.注意的是:remove是一个可选的操作.
53.由java中的集合框架引出的数据结构:>>线性表:>>
54.利用File类创建目录或文件步骤:>>1.构建File类对象“File f=new File("e:\\java\\myjava","1.txt")”,注意"\\"实际是"\",因为在java的解释系统下,"\"代表后面跟一个转义字符.当然也可以通过其它构造方法构建File类对象. >>2.第一步构建的File类对象f调用mkdir()可以构建一个名为"1.txt"的目录;调用createNewFile()可以构建一个名为"1.txt"的文件.但要注意的是:尽管能同时调用这两个方法(即编译不会报错),但不能凭此来达到同时构建一个文件和一个目录的目的(一般我们也不希望这样做,因为文件都有后缀名,而目录一般不会用到点号,尽管用点号不会错).所以在调用mkdir()或者createNewFile()时,先调用的那一个会起作用,后调用的基本没的实质性的作用. ==总结:创建目录还是文件,我们应有一个明确的目的,也是我们在构造File类对象的一个参准,有目的性的构造一个File类对象以供我们调用合适的方法来构建文件或者是目录 补充>>关于File类移植总结:File类的字段separator作为与系统有关的默认名称分隔符,具有较强的通用性.比如在构建一个File对象时,可以"File fi=new File(File.separator)"来构建一个File对象,这个fi代表当前路径.这个File对象fi可以传给"File(File parent, String child)"这种形式的构造方法,即"File f=new File(fi, "myjava"+File.separator+"a.txt")" 再f来调用相应的mkdir()或者createNewFile()来创建文件或目录.说明:字段File.separator代表一个路径分隔符在windwos下代表"\" 而在linux下代表"/".
55.在流的操作中,如果涉及到缓冲流,一定要注意对这个缓冲流进行刷新.一般通过调用flush()或者调用close()来关闭这个流.(说明:缓冲流是在写入或者读出时,该流的缓冲区满时,才会实质性的读写到目标地方.) 如果不对这个缓冲流对象进行刷新或者关闭流操作,则这个流的数据不会有实质性的读写操作,在目标地方我们也就看不到.
56."=="解析:比较的是变量的值.>>8种基本类型变量的比较从值很容易看出比较结果.>>如果比较的是对象变量(八种基本类型外的引用变量),首先分析下对象变量的内存分配问题,举例:String str=new String("abc"),str这个变量被存储在栈内存中,且这个栈内存中str所占的内存单元的内容是指向一个堆内存的地址(即str实际是存放的一个对堆内存的引用地址),而这个被指向的堆内存地址才是真正的存放"abc".对象new时会有不同的指向, 而这个指向就是一个对堆内存的实际地址的引用,也是str在栈内存的实际数据. 对于基它的非基本类型同样如此,强调:声明一个对象变量时,实际是在这个变量所对应的栈内存单元中存放一个引用地址,而这个地址正是指向实际的对象的内容存放的位置. ====具体分配步骤:声明str时,在栈内存取得一个内存空间,这时的这个空间没有任何内容,是一个空指向.当new一个对象时,在堆内存存放这个对象的具体内容,并把这个堆内存的地址空间给str所在的栈空间,这时这个str栈空间才有实质性的引用指向. "equals"方法解析:比较两个对象变量所代表的对象的内容是否相等,通常会根据程序设计需要重写此方法(重写时也可能用到"=="这个操作符,)
57.交换两个变量值的一个不用中间变量的经典操作:假如要交换的是x,y则操作为:
x=x+y;y=x-y;x=x-y;(或者y=x+y;x=y-x;y=y-x;)
58.克隆时,我们一定要调用super.clone():在运行时刻,Object中的clone()识别出你要复制的是哪一个对象,然后为此对象分配空间,并进行对象的复制,将原始对象的内容一一复制到新对象的存储空间中.
59.在applet小应用程序中,必须把类名声明为public,以便浏览器加载,另外在烛应用程序中建议不要导入整个包,以便浏览器快速加载
60.巧用appletviewer:小程序一般终是和html文件关联,我们可以这样:appletviewer html文件来执行含有小应用程序的html文件. 而如果我们以注释的形式把<applet code="Test.class" height="500" width="400"></applet>添加到.java文件中 我们便可以appletviewer Test.java了.因为编译不会出错,得到了.class文件,而appletviewer执行时,会忽略掉除了<applet>...<applet>之外的所有内容.