java面向对象学习笔记_第1页
java面向对象学习笔记_第2页
java面向对象学习笔记_第3页
java面向对象学习笔记_第4页
java面向对象学习笔记_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、概述1、安装JDK2、配置Path路径3、第一个小程序:HelloWorld.javaJavac:用来编译Java:用来解释执行注:java是由一个一个类*.Java源文件命名要跟public修饰的类名一致4、最小的程序单位是类(class),所以java程序必须以类的形式存在。不允许执行语句、变量、方法等成分的独立存在。5、JAVA源文件的命名规则A、源文件的后缀名必须是.javaA.编译型:使用专门的编译器。将程序源代码一次性翻译成B.主文件名必须大写字母开头,不能符号、数字。C、Java源文件命名要跟public修饰的类名一致。一个类里只能有一个public类。注:一个Java的源文

2、件可以包含多个类的定义。但是只能有一个public类。(原则上不推荐一个源文件写多个类,正确的方式为:一个源文件定义一个类,且名字要相同)。6、Java的运行机制B、高级的程序语言按程序的执行方式分为:编译型和解释型。特定平台(特定的操作系统)可以执行的机器码。解释型:使用专门的解释器逐行解释成特定平台(特定的操作系统)的机器码并立即执行。7、Java的两大核心机制JVM:Java虚拟机(Java Virtual Machine)实现了JAVA 一次编译,到处执行。垃圾回收:不再使用的内存空间应立即回收,就叫垃圾回收。显示回收的缺点:A、忘记回收,内存泄漏B、错误的回收程序的核心类库的内存,系

3、统崩溃。JAVA的回收机制:Java的内存分配和回收都是JRE(Java Runtime Environment)在后台自动进行的。JRE会负责回收不再使用的内存,这种机制就叫垃圾回收机制。2、JAVA的基础语法1、Java的注释:说明某段代码的作用,。*、可读性第一,效率第二。2、注释的形式:单行注释 : /多行注释:/* */文档注释:如果编写JAVA源程序时添加了合适的文档注释。然后通过JDK提供的javadoc工具可以直接将源代码中的文档注释提取成一份系统的API文档。4、下载java 7的API文档:.html5、Java的标识符跟关键字标识符:所谓的标识符就是给变量、方法、类命名的

4、符号。即所有程序员自己命名的,都叫标识符,都要遵守标识符命名规范。标识符命名规范:A、以字母、数字、下划线、美元符号组成,但是不能数字开头。 B、不能有空格。C、不能包含其他的特殊字符D、不能包含JAVA关键字跟保留字注: 标识符命名要“见名知意” 一般采用驼峰命名。分隔符:A、分号(;): 对语句进行分隔。B、大括号():定义一个代码块。C、中括号():用于访问数组元素。D、小括号():定义方法时来包含所有形参声明。调用时用它来包含实参。E、空格:出现在很多地方。F、圆点:通常是类/对象与其属性/方法之间的分隔符JAVA的关键字:Java当中有一些具有特殊用途的单词被称为关键字。abstra

5、ct assert boolean break byte case catch char class continue default do double else enum extend final finally float for if implement import instanceof int interface long native new package private protected public return short static strictfp synchronized super switch this throw throws transient try

6、void volatile while 还有两个保留字:goto和const;6、Java的数据类型分类A、强类型语言在编译时进行严格的语法检查。B、声明语法:Type varName;C、JAVA数据分为两大类:基本类型和引用类型7、基本类型分类:分为4类8种八大基本类型:byte short int long floatdoublechar boolean整型:byte short int long (JAVA整数常量默认为int类型Byte :在内存中占一个字节8位。表数范围:-2的7次方 2的7次方减1(-128127)Short:在内存中占两个字节16位。表数范围:-2的15次2的1

7、5次方减1(-3276832767)Int:在内存中占四个字节32位。表数范围:-2的31次2的31次方减1Long:在内存中占八个字节64位。表数范围:-2的63次2的63次方减1字符型:char通常用表示单个的字符,必须用单引号()括起来。字符型的常量有3种表达形式:A、直接通过单个字符指定常量转义字符 所代表的意义转义字符 所代表的意义f 换页 反斜线b 倒退一格' 单引号r 归位" 双引号t 跳格n 换行B、通过转义(逃逸)字符表示特殊的字符常量。以下为常用转义字符。C、直接使用Unicode值来表示字符常量。”uXXXX”浮点型:float和double(单精度浮点

8、数跟双精度浮点数)(JAVA浮点数常量默认为double类型(开发中常用 BigDecimal)浮点型有三个特殊的浮点常量:正无穷大、负无穷大、非数布尔型:boolean,值只有”true”和”false”,用于表示逻辑上的“真”和“假”,用于流程控制,也可以用于三目运算符。8、基本类型的类型转换分为两种:一种是自动类型转换,另一种为强制类型转换。自动类型转换:表数范围小的数值或变量直接赋给表数范围大的一个变量。强制类型转换:表数范围大的数值或变量直接赋给表数范围小的一个变量。格式为:(Type)value;9、表达式类型的自动提升当一个算术表达式包含多个基本类型时,整个算术表达式的的数据类型

9、将发生自动提升。注:两个整数相除时,如果不能整除,得到的结果将是把小数整个截取。10、直接量:通过源代码直接指定的值11、JAVA当中的运算符A、算术运算符B、赋值运算符C、比较运算符D、逻辑运算符E、位运算符算术运算符:+、-、*、/、%、+、-赋值运算符:=、+=、-=、*=、/=、%=比较运算符:用于判断两个变量的或常量的大小。比较运算的结果是一个布尔值(true or false)>、>=、<、<=、=、!=逻辑运算符:|、&&、!&&:前后两个操作数都为true才返回true,否则false|:或,只要有一个操作数为true就返

10、回true,两个都不为true,才返回false!:非,只需要一个操作数,如果操作数为true ,返回false,如果为false,返回true;三目运算符: ? :10、JAVA的流程控制A、顺序结构:从上往下顺序执行,没有判断跟跳转B、分支结构:用于实现根据不同条件来选择性的执行某段代码。If语句:注: 用if . Else if .else语句时不要忽略了else的隐含条件。Switch语句:开关语句,由一个控件表达式跟多个case标签组成。Switch语句后面的控制表达式的数据类型只能 byteshortcharint 四个整数类型和枚举类型。Java 7新增了String类型。在每一

11、个Case标签后必须要有一个break;语句,如果没有,当某一个case标签的值匹配成功后,后面每一个case的值都不在判断。全部执行,直到遇到break;或执行完毕。Default可有可无。C、循环结构:用于实现根据循环条件重复执行的某段代码。循环语句包含的四个部分:初始化语句:一条或多条语句。循环条件:是一个逻辑表达式。步进值:结合循环条件作用,作为一个退出循环条件 。循环体:要重复执行的代码 。11、JAVA方法类似于其他语言里的函数。(Method)作用:简化程序的结构。把具有特定功能的代码独立出来。提高效率,实现代码的复用性。声明方法的方式:修饰符 方法返回类型 方法名 (形式参数列

12、表)/零条或多可执行的语句组成的方法体修饰符:可以省略,可以是:public private protected (default static final abstract;public private protected 不能一起使用。final abstract不能一起使用。返回类型:事先约定好的返回值的类型,可以是JAVA任何类型,包括基本类型和引用类型。如果没有返回值,必须用void来声明没有返回值。返回值:方法在执行完毕后返回给调用环境的数据。形式参数:在方法被调用时用于接收外界输入的数据。 “参数类型 参数名”多个形参用“,”隔开。实参:调用方法时给出的实际参数。注意:1、 调用

13、的形式:对象名.方法名(实参列表);2、 实参的数目、数据类型和次序必须要与所调用的方法声明的形参一致。3、 Return语句终止方法的运行。并指定要返回的数据。三、面向对象程序设计(一)1、提供了定义类、成员变量、方法等最基本的功能 。2、类可以被认为成一个自定义的数据类型。(通过自定义类型声明的变量都是引用变量)JAVA 三大特征:封装、继承、多态。Java通过 public private protected三个访问修饰符来实现封装。通过关键字 extends来实现继承。Java通过实现接口来表现JAVA的多态修饰符 class 类名/0或者多个构造器。/0或者多个成员变量(属性)。/0

14、或者多个方法。注:类与对象是面向对象的核心 。类是对象的抽象,对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占有内存空间。3、类的定义,类与对象的关系。4、对象与引用。5、方法详解:在JAVA中,方法必须属于类与对象。A、方法不能独立定义,只能定义在类体内。B、方法要么属于该类本身,要么属于该类的一个对象。C、永远不能独立执行方法,必须使用类与对象作为调用者。方法的参数传递机制:值传递。值传递,就是将实参的值的复制传入方法里,而参数本身是不受影响。6、成员变量和局部变量注、类成员变量的作用域跟这个类的生存在范围相同;实例成员变量从该类的实例被创建时开始存在,直到系统销毁这个实例,

15、其作用域与对应实例的生存范围相同。*、成员变量的初始化及内存里存储机制:*、局部变量的初始化及内存里存储机制:局部变量因为要显式初始化,系统不会为其初始化,即不会为其开辟内存空间,直到有赋值操作时,系统都会分配内存。局部变量不属于任何类和实例,所以它总是保存在方法的栈内存中。7、变量的使用规则变量的的范围扩大有两个害处:A、增加了变量的生存时间,导致了更大的内存开销。B、增加变量的作用域 。8、对象的this引用 this关键字总是出现在类的方法定义中。总是指向调用该方法的对象。this 作为对象的引用总是出现在两个地方:A、构造器中引用该构造器正在初始化的对象。B、在方法中引用调用该方法的对

16、象。注:this关键字最大的作用就是让类中一个方法,访问类中另一个方法或成员变量。9、构造方法构造方法是一种特殊的方法,具有以下特点。(1)构造方法的方法名必须与类名相同。(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。(4)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。(5)构造方法可以重载,以参数的个数,类型。但是,不区分参数的排列顺序。注:当自己定义了构造方法后,系统将不在提供默认的构造方法

17、。10、方法重载:一个类中包含了多个同名的方法,但是形参列表不同,就被称为方法重载。JAVA 允许一个类中定义多个同名方法,形参列表不一致。注:在JAVA中,确定一个方法有三个要素:A、调用者,就是方法的所属者,可以是类,也可以是对象。B、方法名。C、形参列表,系统会根据传入的实参列表匹配。11、构造器重载12、理解封装A、封装是面向对象的三大特征之一(另外两个是继承和多态);它是将对象的状态信息隐藏在类的内部,不允许外部程序直接访问,而是通过提供方法来实现对内部信息的操作和访问。B、对一个类实现封装,可以实现以下目的:隐藏类的实现细节。让使用者只能通过预定的方法来访问数据。从而可以加入控制逻

18、辑,限制对成员变量的不合理访问。可进行数据检查,从而有利于保证对象信息的完整性。便于修改,提高代码的可维护性。注:封装有两个方面的含义:把该隐藏的隐藏起来,该暴露的暴露出来。把对象的的成员变量和实现细节隐藏起来,不允许外部直接访问。把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作。13、访问控制符访问控制级别由小到大为:Private:(当前类访问权限如类中的成员变量、方法、构造器用private修饰。那么这个成员只能在当前类内部被访问。Default:(包访问权限),如类中的成员变量、方法、构造器不使用任何修饰符修饰,default访问控制的成员或者外部类可以在相同包下其他类访

19、问。Protected:(子类访问权限)如类中的成员变量、方法、构造器用protected修饰,那么这个成员可以被同一个包中的其他类访问,也可以被不同包中的子类访问。用protected来修饰一个方法,通常是希望其子类来重写该方法。public (公共访问权限)注:封装后,类的成员变量只能在该类中操作和访问。在该类之个的类只能通过各自对应的setter和getter方法来操作和访问 。例如,某个类包含了一个abc,那么其对应getter和setter方法分别为setAbc(和getAbc(.如果每个Field都用private 修饰,且都提供了正确的getter和setter方法,那么这个类就

20、是个符合的javaBean规范的一个类。14、PackageJava允许在类名前加一个前缀来限定这个类,这就是包机制。提供了多重命名空间。解决类的命名相同、类文件管理的问题。注:加了包的限定后,例:package com.easytop; 必须要有相同的文件系统目录。注:package语句必须写在除注释行外的第一行,这个源文件里的所有的类都属于这个包,一个源文件只能指定一个包。注:java的包机制需要两个方面的保证:A、源文件里要用package语句指定包名。B、Class文件必须放在相应的路径下。15、Import可以向某个Java类中导入指定层次下的某个类或全部类。16、继承:面向对象的三

21、大特征之一,也是实现代码复用的重要手段。Java的继承具有单继承的特点。每个类只能有一个直接父类。通过extends关键字来实现。方法重写:“两同两小一大”两同:方法名、形参列表相同两小:子类方法返回值类型要比父类的返回值类型更小或相同。子类方法声明抛出的异常类要比父类方法声明抛出的异常类更小或相同。一大:子类方法的访问权限要比父类方法的访问权限要大。注:如果父类方法具有private访问权限,则该方法对其子类是隐藏的,因此子类无法访问该方法,即无法重写。如果子类定义了一个与父类private方法具有相同的方法名、相同形参列表、相同的返回值类型,依然不是重写,只是在子类中定义了一个新的方法。注

22、2:覆盖方法与被覆盖方法要么都是类方法,要么都是实例方法。17、super:用于限定该对象调用他从父类继承得到的Field和Method,正如this 不能出现在static修饰方法中一样,super也不能出现在static修饰方法中。static修饰的方法是属于类的。该方法的调用者是一个类,而不是对象,所以super就失去意义了。注:为了在子类方法中访问父类中定义的、被隐藏的实例变量,或为了在子类方法中调用父类中定义的、被覆盖(Override)的方法,可以通过super.作为限定来调用这些实例变量和实例方法。18、调用父类的构造器:子类不会获得父类的构造器,但子类构造器可以调用父类的构造器

23、。用super调用来完成。注:使用super调用父类的构造器必须要写在子类构造器的第一行。用this来调用本类重载的构造器时也必须写在构造器的第一行,所以this调用和super调用不能同时出现。注2:不管是否使用super来调用父类构造器,子类构造器总会调用父类构造器一次。子类调用父类构造器的三种情况:A、使用super显式调用,系统将根据传入实参列表调用父类对应的构造器。B、子类构造器第一行使用this来调用本类重载的构造器时,系统将根据传入实参列表调用本类对应的构造器。执行本类另一个构造器之前会调用父类构造器。C、子类构造器中既没有super调用,也没有this调用,系统会执行子类构造器

24、之前会调用父类无参数构造器。19、toString方法:当直接打印对象时,系统就调用toString(方法,toString方法可以理解为“自我描述”的方法。用于告诉外界该对象的状态信息。20、 = 和 equals方法:= =用于比较基本类型时, (只比较值,)不一定要求数据类型严格相同。“= =”只要变量的值相等就返回ture。=号比较引用类型时比较的是地址,是栈内存中的值。“equals”是不能比较基本类型的,比较的是值即堆内存中的值。21、String直接量与new关键字创建的对象“hello”直接量与new String(“hello”的区别:当java程序直接使用“hello”的字

25、符串直接量(包括可以在编译时就计算出来的字符串值)时,JVM会使用常量池来管理这些字符串,当使用new String(“hello”时,JVM会先使用常量池来管理 “hello”直接量,再调用String类的构造器来创建一个新的对象,新创建的对象保存在堆内存里,所以,new String(“hello”一共产生了两个对象。注:JVM常量池保证相同的字符串直接量只有一个。注1:重写equals方法的原则:A、自反性:对任意x,x.equals(x一定返回true;B、对称性:对任意x和y,如果x.equals(y返回true,那么y.equals(x也返回true;C、传递性:对任意x和y和z,

26、如果x.equals(y返回true,y.equals(z也返回true,那么x.equals(z也要返回true;D、一致性:对任意x和y,如果对象中用于等价比较的信息没有改变,那么无论调用x.equals(y多少次,返回的结果都应该一致。E、对任何不是null的x,x.equals(null一定返回false;22、对象转型:基类的的引用变量指向其子类的对象,java允许把一个子类对象直接赋给一个父类引用变量,无须类型转换,被称为向上转型。(子类其实是一个特殊的父类)。基类的引用不可以访问其子类对象新增加的成员(变量和方法)。注:通过引用变量来访问其包含的实例成员变量时,系统总是试图访问它

27、编译时类型所定义Field,而不是它运行时类型所定义的Field。强制类型转换:编写java程序时,引用变量只能调用编译时类型的方法,而不能调用它运行时类型的方法。即使它实际所引用的对象确实包含该方法。如果一定要调用,则必须要把它强制转换成运行时类型。(类型强制转换的运算符是小括号)。强制类型转换时要注意:A、基本类型之间的转换只能在数值类型之间进行。数值类型和布尔之间不能进行类型转换。B、引用类型之间的转换只有在具有继承关系的两个类型进行转换。如果试图把一个父类的实例转换成子类类型,则这个对象必须是子类的对象(即编译时类型是父类,运行时类型是子类)。否则会引发ClassCastExcepti

28、on异常。C、23、instanceof运算符 :instanceof运算符的前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类(接口),它用于判断前面的对象是否是后面的类,或者子类、实现类的实例。如果是,返回true,否则返回false;注:instanceof运算符前面操作数的编译时类型要么与后面的类相同,要么与后面的类具有父子继承关系,否则会引起编译错误。24、多态BaseClass bc = new SubClass(; /SubClass是BaseClass 的子类,且SubClass重写了BaseClass 的test(方法。bc.test(调用的是子类的test(方法。

29、Why?Bc引用变量编译时类型是BaseClass ,而运行时类型是SubClass,当运行时调用该引用变量的方法时,其方法行为总是表现出子类方法的行为特征。而不是父类方法的行为特征,这就可能出现:相同类型的变量、调用同一个方法时呈现出多种不同的行为特征,这就是多态。25、初始化块初始化块是Java类的第四种成员(成员变量、方法、构造器)。一个类里可以有多个初始化块。相同类型的初始化块,前面定义的先执行,后面定义后执行。修饰符 /可执行性代码 注:这个修饰符只能是static,使用static就是静态初始化块。注2:初始化块总是先于构造器执行。系统同样可以使用初始化块进行初始化(初始化一定程度

30、可以当做构造器的补充)。注3:与构造器类似,创建一个Java对象时,不仅会执行该类的初始化块和构造器,还会执行其父类的初始化块和构造器,一直上溯到类,先执行类的初始化块和构造器,依次向下执行。最后才执行该类的初始化块和构造器。26、静态初始化块如果定义初始化块时,用static修饰,则这个初始化块就叫静态初始化块,与类相关,系统在类初始化阶段执行静态初始化块。4、面向对象程序设计(二)1、Java的包装类:为了解决八种基本类型不能当做Object类型变量使用的问题,Java提供了包装类 (Wrapper Class)的概念,分别为其定义了相应的引用类型。并称为Java的包装类。基本数据类型和包

31、装类的对应关系 byte Byteshort Short int Integerlong Longchar Characterfloat Float double Double boolean Boolean 注:八个包装类中除了Character之外,还可以通过传入一个字符串参数来构造对象。2、自动装箱(Autoboxing)和自动拆箱(AutoUnboxing自动装箱,就是可以把一个基本类型变量直接赋给包装类变量,或者赋给一个Object变量(Object是所有类的父类,子类对象可以直接赋给父类引用变量)。自动拆箱,就是允许直接把一个包装类对象赋给一个对应的基本类型。3、包装类还可以实现基

32、本类型与字符串之间的转换。把字符串类型的值转换成基本类型的值有两种方式。(除了Character之外)。A、利用包装类提供的Xxx(String s)构造器。B、利用包装类提供的parseXxx(String s 静态方法。4、final修饰符final关键字用于修饰类、变量和方法。用于表示类、变量和方法是不可改变的。final成员变量:对于final修饰的成员变量而言,一旦有了初始值,就不能被重新赋值。Java语法规定:final 修饰的成员变量必须显式的指定初始值。Final能修饰的类Field、实例Field能在哪里指定初始值?类Field:静态初始化块、声明该Field时直接指定初始值

33、。实例Field:构造器、初始化块、声明该Field时直接指定初始值。注:final修饰基本类型变量时,不能对变量重新赋值,但是final修饰引用类型变量时,变量保存的是一个引用地址,final只保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以发生改变。final修饰方法:表示该方法不能被重写。final修饰类:表示该类不可以有子类。5、不可变类:创建该类的实例后,该实例的Field是不可改变的。(8个包装类和String类都是不可变类。)如何自定义一个不可变类:A、使用private和final修饰该类的Field。B、提供带参数的构造方法。C、仅为该类提供

34、getter方法。D、如有必要,重写equals方法。6、抽象方法和抽象类抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类。抽象方法和抽象类的规则:A、抽象方法和抽象类必须使用abstract修饰符来修饰,抽象方法不能有方法体。B、抽象类不能被实例化。无法使用关键字new来调用抽象类的构造器创建抽象类的实例。即使该抽象类不包含抽象方法,也不能实例化。C、抽象类可以包含Field、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类、枚举类。抽象类的构造器不能用于创建实例,主要是用于其子类调用 。D、含有抽象方法的类(包括直接定义一个抽象方法;继承了一

35、个抽象父类,但是没有完全实现父类包含的抽象方法),只能被定义成抽象类。7、如果编写一个父类,父类提供了多个子类的通用方法,并把一个或多个方法留给其子类实现,这就是一种模板模式。(父类的方法依赖于一个抽象方法,而抽象方法则推迟到子类中提供实现。)模板模式的简单原则:A、抽象父类可以只定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给子类去实现 。B、父类里提供的方法只是定义了一个通用算法,其实现也许并不完全由自身实现,而必须依赖于其子类的辅助。8、接口:接口定义的是多个类共同的公共行为规范,这些行为是与外部交流的通道,这就意味着接口里通常定义一组公用方法。注:一个接口可以有多个直接父接

36、口,但接口只能继承接口,不能继承类。接口里的成员:Field (常量、方法(抽象方法、内部类(包括内部接口、枚举);因为接口定义的是多个类共同的公共行为规范,所以所有的成员都是public 访问权限,可以省略。注:对于接口里定义的方法而言,只能是抽象的方法,所以系统会自动为其增加abstract修饰符。对于接口里定义的Field而言,因为只能是常量,所以是static final修饰的,系统会自动为其增加。接口没有构造器跟初始化块,所以常量只能在声明变量时直接赋给初始值。9、抽象类与接口相同:A、都可以包含抽象方法。B、都不能被实例化。不同:A、接口只能包含抽象方法,抽象类可以包含普通方法B、

37、接口不能定义静态方法,抽象类可以。C、接口只能定义静态常量,抽象类既可以定义静态常量,也可是普通Field。D、接口不能定义构造器,抽象类可以。(抽象类的构造器不是用创建对象,面是让其子类调用来完成属于抽象的初始化)E、接口不能包含初始化块,抽象类可以。F、一个类最多只能有一个直接父类(包括抽象类),但一个类可以实现多个接口。10、内部类把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含这个类的类就被称为外部类。 内部类的作用:A、内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包下其他类访问。B、内部类成员可以直接访问外部类的私有数据,因为内部类被

38、当成其外部类的成员,同一个类成员之间可以互相访问。(外部类不能访问内部类的实现细节,如内部类成员变量)C、匿名内部类适合用于创建那些仅需要一次使用的类。11、定义内部类,只要把一个类在另一个类内部定义,包括类中任何位置,甚至在方法中也可以定义内部类(局部内部类)内部分为两种:静态内部类和非静态内部类,使用static修饰的成员内部类就是静态内部类,没有使用static修饰的成员内部类就是非静态内部类。注:因为内部类是外部类一个成员,所以可以使用任何访问控制符:private defaultprotectedpublic注1:非静态内部类成员可以直接访问外部类的私有实例变量,这是因为在非静态内部

39、类对象里保存一个它寄存的外部类的对象的引用。(当调用非静态内部类的实例方法或变量时,必须有一个非静态内部类的实例,而非静态内部类实例必须寄存在外部类实例里。注2:JAVA不允许在非静态内部类里定义静态成员。12、静态内部类:静态内部类可以包含静态成员,也可以包含非静态成员。根据静态成员不能访问非成静态成员的规则,静态内部类不能访问外部类的实例成员。注:静态内部类是外部类的一个静态成员,因此外部类的静态方法、静态初始化块中可以用静态内部类来定义变量、创建对象等。12、使用内部类(1) 在外部类内部定义内部类注:在外部类的内部使用内部类的子类与平常定义子类没有太大区别。(2) 在外部类以外使用非静

40、态内部类如果希望在外部类以外的地方访问内部类(包括静态和非静态两种),则内部类不能用private修饰。注:在外部类以外的类继承内部类要注意:内部类的子类(在该内部类所在的外部类之外)在构造器中调用非静态内部类的构造器必须使用其外部类的对象来调用。(3) 在外部类以外使用静态内部类13、局部内部类:如果把一个类放在方法里定义,那么这个是就是局部内部类。注:局部内部类不能在外部类的方法以外的地方使用,所以不能用访问控制符和static修饰。14、匿名内部类:用于创建只需要使用一次的类。创建匿名内部类时会立即创建一个该类的实例。定义:new 父类构造器(实参列表) | 实现接口()/匿名类类体注:

41、匿名内部类必须继承一个父类,或者实现一个接口,但是最多只能继承一个父类,或者实现一个接口。注1:匿名内部类不能是抽象类,因为系统在创建匿名内部类时,会立即创建匿名内部类的对象。匿名内部类不能定义构造器,因为匿名内部类没有类名。但匿名内部类可以定义实例初始化块来完成初始化工作。15、枚举类实例有限而且固定的类,就叫做枚举类。注:手动实现枚举类,通过以下方式:(1) 通过private把构造器隐藏起来。(2) 把这个类所有可能的实例都使用public static final修饰的类变量来保存(3) 如果有必要,可以提供一些静态方法,允许其他程序根据特定参数来获取与之匹配的实例。16、enum关键

42、字:用来定义枚举类。(跟classinterface地位相同)枚举是一个特殊的类,它可以有Field、方法,可以实现一个或者多个接口,也可以定义构造器。跟普通类的区别:(1) (2) 使用enum定义非抽象的枚举类默认会使用final修饰。因此枚举类不能有子类。(3) 枚举类的构造器只能使用private访问控制符。如果省略了构造器的访问控制符,会默认使用private修饰。(4) 枚举类的所有实例必须在枚举类的第一行显式列出,否则这个枚举类永远无法产生实例。列出这些实例时,系统会自动添加public static final修饰。17、对象和垃圾回收当程序创建一个数组、对象等引用类型实例时,

43、系统会在堆内存中为之分配一块内存区。当这块内存不再被任何变量引用时,这块内存就变成垃圾。等待垃圾回收机制进行回收。注:(1) 垃圾回收机制只负责回收堆内存中的对象。(2) 程序无法精确的控制垃圾回收的运行。垃圾回收会在合适的时候进行。(3) 在垃圾回收任何对象之前,总会调用它的finalize(方法,该方法可以使用对象重新复活。A、 对象在内存中的状态:可达状态:当一个对象创建后,有一个以上的引用变量引用它。则这个对象的状态就为可达状态。可恢复状态:如果一个对象不再有任何引用变量引用它,则这个对象的状态就为可恢复状态。不可达状态:当对象与所有的引用变量的关联被切断,且系统已经调用它的final

44、ize(方法,依然没将其变成可达状态,则这个对象将永久失去引用。状态就为不可达状态。B、 强制垃圾回收:程序只能控制一个对象何时不被任何引用变量引用。不能控制它何时被回收,只能通知垃圾回收机制。强制系统垃圾回收的两种方式:(1) 调用System类的gc(静态方法:Sysetm.gc(;(2) 调用Runtime对象的gc(实例方法:Runtime.getRuntime(.gc(;C、finalize(方法18、常用类A、 Object类:类层次结构的根类。每个类都使用 Object 作为超类。方法:clone(:创建并返回此对象的一个副本。实现“克隆”的步骤:(1) 自定

45、义类实现Cloneable接口。(2) 自定义类实现clone(方法。(3) 实现clone(方法通过super.clone(;调用父类的clone(方法。B、 String、StringBuffer和StringBuilderString:是一个不可变类,包含在String对象里的字符序列是不可改变的。StringBuffer和StringBuilder: StringBuffer和StringBuilder对象代表是字符序列可变的字符串。不同的是:StringBuffer是线程安全的。StringBuilder没有实现线程安全,所以性略高。C、 Math类D、 ThreadLocalRan

46、dom和Random类E、 国际化注:完成国际化主要通过三个类:资源文件命名格式:baseName_language_pertiesbaseName_pertiesbaseNperties19、数据结构:数据元素相互之间的关系称为结构。有四类基本结构:集合、线性结构、树形结构、图状结构; 集合结构:除了同属于一种类型外,别无其它关系 线性结构:元素之间存在一对一关系常见类型有: 数组,队列,栈,链表,它们之间在操作上有所区别.例如:链表可在任意位置插入或删除元素,而队列在队尾插入元素,队头删除元素,栈只能在栈顶进行插入,删除操作. 树

47、形结构:元素之间存在一对多关系,常见类型有:树(有许多特例:二叉树、平衡二叉树、查找树等 图形结构:元素之间存在多对多关系,图形结构中每个结点的前驱结点数和后续结点多个数可以任意。20、集合:用于存储数量不等多个对象,并可以实现常用的数据结构,如数组、栈、队列、链表等。集合大致分为三类:List、Set、Map 注:Set与List继承于Collection。Set:代表无序,不可重复的集合。List:代表有序,可重复的集合。Queue:队列集合。(JDK1.5之后增加的)注: 结构图。21、迭代器(遍历器)Iterator接口:主要用于遍历Collection集合元素。Iterator的对象就叫迭代器。注:迭代器仅用于遍历。22、List接口,代表一个有序的集合,集合中每一个元素都一个对应的顺序索引号。List集合允许使用重复元素。通过指定的索引来访问相应位置的集合元素。List默认按元素的顺序设置索引号。还可以通过索引来插入、删除、替换集合元素。23、Vector 与ArrayListA、相同点:都是基于对象数组实现的,所以在用法上完全相同。都封装了一个动态再分配的对象数组。B、不同点:ArrayList是线程不安全的。当多个线程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论