《java学习笔记finally.doc》由会员分享,可在线阅读,更多相关《java学习笔记finally.doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流java学习笔记finally【精品文档】第 16 页01 Java标识符Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符。 凡是可以自己取名字的地方都叫标识符,都要遵守标识符的命名规则。Java标识符的命名规则 标识符由字母、下划线“_”、美元符号”$”或数字组成。 标识符应以字符、下划线或美元符号开头。 Java标识符区分大小写,长度无限制。约定俗成:Java标识符应做到见文知意,且不能与java 语言关键字重复。Java关键字:02 Java常量 Java常量值用字符串表示,区分为不同的数据类型。如整型常量123 实型常量 3.13
2、 字符常量 ”a” 逻辑常量 true false 字符串常量 “hello world” 注意:区分字符常量和字符串常量。 参见final关键字。 常量指示的是值是不能改变的变量。03 Java变量 Java变量是程序中最基本的存储单元, 其要素包括变量名,变量类型和作用域。 Java程序中每一个变量都属于特定的数据类型,在使用前必须对其声明,声明格式为:Type varname=value;如 int a=123; 从本质上讲,变量其实是内存中的一小快区域,使用变量名来访问这块区域。因此,每一个变量使用前必须要先声明(申请),然后必须进行赋值(填充内容),才能使用。04 程序执行过程1程序
3、从硬盘加载到内存区2找到main函数开始执行3 执行过程中的内存管理 heap 堆 stack 栈05 Java变量的分类 按其声明的位置划分局部变量:方法或语句块内部定义的变量。方法体内部声明的变量(包括形参)称为局部变量。方法体内部是指与方法对应的大括号内部。成员变量:方法外部、类的内部定义的变量。方法体外,类体内声明的变量称为成员变量。注意:类外面不能有变量的声明。局部变量和成员变量在内存中属于不同的区域。 按所属的数据类型划分:基本数据类型变量引用数据类型变量Java基本数据类型(4种8类)不同的是数据在内存中所占的长度大小以及0,1在内存中的排列。数值型:整型(byte 字节型,in
4、t 整型,short 短整型,long 长整型)Java各整数类型有固定的表数范围和字段长度。一个字节为8位。三种整型常量表示方式:十进制:12八进制:012十六进制:0x12Java语言的整型常量默认为int型,声明long型常量可以后在l或L。浮点型:(float 单精度 double双精度)有固定的表数范围和字段长度,不受平台的影响。两种表示方式:十进制法:12.32科学计数法方式:12e3Java 浮点数默认为double类型,如要声明一个常量为float类型,则需在数字后面加f或F。如double e=122.323; float f=343.34f;字符型(文本型):char。字符
5、常量为单引号括起来的单个字符。Java字符采用Unicode编码,每个字符占两个字节。注意:二进制,八进制和十六进制的转换。布尔型:boolean。适用于逻辑运算,一般用于程序流程控制。只允许取值true或false,不可以用0或非0替代true和false,这点和C语言不同。06 基础数据类型的转换l Boolean类型不可以转换为其他的数据类型。l 整型、字符型、浮点型的数据在混合运算中相互转换,转化时遵循以下原则: 容量小的类型自动转换为容量大的数据类型;数据类型按容量大小排序为:byte,short,charintlongfloatdoublebyte,short,char之间不会相互
6、转换,他们三者在计算时首先会转换为int类型。 容量大的类型转换为容量小的数据类型时,要加上强制符,但可能造成精度降低或溢出,使用时要格外注意。 有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。实数常量默认为double。整数常量默认为int.07 程序格式比算法还重要。格式应该注意的问题。 大括号对齐 遇到缩进,Tab/Shift+Tab 程序块之间加空行 并排语句之间加空行 运算符两侧加空格1、 有特定条件 前面有空格 成对编程程序格式的原则 要让别人看得清楚 要让别人看得舒服08 运算符Java语言支持如下运算符: 算法运算符 +, -
7、 ,* ,/ ,%, + ,- 关系运算符 ,=, , 赋值运算符:=,当两侧数据类型不一致时,可以适用默认类型转换或使用强制类型转换原则进行处理。对于byte,short,char等类型变量,只要不超出其表数范围,则不需要强制类型转换。 扩展赋值运算符:+=,-=,*=,/=, 字符串连接运算符:+。+运算符两侧的操作数中只要一个是字符串类型,系统会自动将另一个操作数转换为字符串然后再进行连接。+放在后面,先取值后运算+放在前面,先运算再取值。当进行打印的时候,无论任何类型都自动转换为字符串进行打印。09 表达式符合一定语法规则的运算符和操作数的序列。表达式的值和类型:对表达式中的操作数进行
8、运算得到的结果称为表达式的值。表达式的值的类型即为表达式的类型。表达式的运算顺序应按照运算符的优先级从高到低的顺序进行。优先级相同的运算符按照事先约定好的结合方向进行。运算符优先级,结合方向。三目条件运算符X?Y:Z其中X为boolean类型表达式,先计算X的值,若为true,则整个三目运算的结果为Y的表达式的值,否则整个运算结果为表达式Z的值。默认情况下,实例变量和类变量的初始值取决于其数据类型。l 数值变量:0l 字符变量:0l 布尔变量:falsel 对象:null字符串的运算运算符+拼接运算10 对象创建对象使用newVolcanoRobot robbie = new VolcanoR
9、obot();圆括号很重要,不能省略。括号可以为空,在这种情况下,创建的将是最简单最基本的对象;也可以包含参数,这些参数决定了对象的实例变量的初始值和其他初始量。测试和修改对象的类变量获取值要获取实例变量的值,可以使用句点表示法。实例变量和类变量由两部分组成,.句点运算符左边为对象和类的引用;.句点运算符右边为变量名句点表示法是一种引用对象的实例变量和方法的方式。类变量是在类中定义和存储的,它们的值适用于类及其所有的实例。定义类变量的方法是,在前面加上关键字static.修改类变量的值将影响所有的实例。调用对象的方法调用对象的方法时也使用句点表示法。被调用的对象位于句点的左边,方法名及其参数位
10、于句点的右边。如:将对象从一个类转换为另一个类类的对象也可被转换为其他类的对象,但必须满足如下条件:源类和目标类之间存在继承关系,即其中一个类是另一个类的子类。比较对象、判断对象所属的类、判断对象是否是特定类的实例比较对象= 比较对象是否相同(即引用(地址)equals 比较对象的值是否相同判断对象所属的类想确定对象所属的类,可以采用下述方法,这里判断的是赋给key的对象所属的类:String name = key.getClass().getName();另一种检测方式是instanceof 运算符,它使用两个操作数,左边为对象的引用,右边为类名,该表达式返回一个布尔值,如果该对象是这种类或
11、子类的实例,为true,否则为false。11 数组、逻辑和循环创建数组 new 系统自动初始化访问、修改数组,数组名加索引访问和修改数组元素。如: int a = new int 99; 自动初始化为0;a23访问,a23 = 23;对数组元素进行修改。多维数组:数组可以是多维的,包含多个下标,以多维方式存储信息。块语句Java中的语句被组织为块,块以花括号表示开始,表示结束。它为块中声明的局部变量创建了作用域,在其中变量存在并可使用,如果在变量的作用域外使用它,将发生错误。if语句条件语句仅在指定条件满足时才执行。if 条件语句使用布尔表达式来判断是否执行语句。如果表达式返回true,则执
12、行语句。也可以在条件为false的时候执行其他语句,else。switch 条件语句如果要与多个值进行比较,用switch语句更佳。如:在每个case之后,可以有任何数目的语句,每个case中都有一个break 语句,用于指出何时停止执行语句,如果case中没有break语句,则找到匹配的情况后,该case中的语句及其后到break或switch末尾的所有语句都执行。for循环for循环用于重复执行语句,直到条件得到满足。在Java中,for循环的格式如下:initialization 是一个表达式,用来初始化循环的起始状态,test是每次迭代前都要进行的检测,它必须是布尔表达式或返回值为布尔
13、值的函数,increment 用于修改循环变量的值,从而将循环状态引向返回false的状态,最终结束循环。while和dowhile循环while循环用于重复执行一条语句,直到特定条件不为true为止。先判断条件,再执行。dowhile 循环do 循环与while循环非常类似,主要区别在于检测条件的位置。while循环在循环执行前检测条件,因此如果首次检测条件为false,则循环体一次也不会执行。do 循环在检测条件之前,至少执行循环体一次,因此如果首次检测条件为false,则循环体已经执行一次了。跳出循环在所有循环中,当测试条件满足时循环将结束,有时,在循环执行过程中,当发生了某种情况后,需
14、要提前结束循环,在这种情况下,可以使用关键字break 和continue。break 立即结束当前循环,如果在循环中嵌套了循环,将跳到外层循环中。continue 关键字直接进入循环的下一次迭代。对于do 和while 循环这就意味着重新回到块语句从头执行,对于for循环,则计算增量表达式,然后执行块语句。注意:break和continue的区别12 创建类和方法在Java中,程序由main 主类以及用于支持主类的其他类组成。支持类包括你可能需要的Java2类库中的类(如String 、Math).类定义的组成部分class Ticker/the body of the classexten
15、ds 关键字用于指定超类创建和使用实例变量每当创建类时,都需要定义新类不同于其超类的行为。行为是通过指定新类的变量和方法定义的。Java中有3中常用的变量:类变量、实例变量和局部变量。实例变量:在方法定义外声明且没有使用关键字static修饰的变量都是实例变量。类变量适用于整个类,而不是类的各个对象,适合用于在同一种类的不同对象之间共享信息或记录类级信息。在类定义中使用关键字static来声明类变量。创建和使用方法方法定义了对象的行为,即在对象被创建时发生的事情或对象在其生存期内能够执行的各个任务。定义方法:在Java中,方法定义有4个基本的部分:l 方法名;l 参数列表;l 方法返回的对象类
16、型或基本数据类型l 方法体。方法定义的前面2个部分构成了方法的特征标。基本的方法定义:方法的参数列表是一组变量声明,它们被放在圆括号内,并用逗号分隔。这些参数是方法体内的局部变量,当方法调用时,将获得它们的值。方法体内可以包含语句、表达式、对其他对象的方法调用、条件语句、循环等。除非返回类型被声明为void ,否则方法执行完毕时,将返回某种类型的值,必须在方法的出口点使用关键字return 显式地返回这个值。关键字this有时候,你可能想在方法体中引用当前对象,即其方法被调用的对象,以便将当前对象的实例变量或当前对象作为参数传递给其他方法。在这种情况下,要引用当前对象,可以使用关键字this。
17、关键字this指向当前对象,可用于任何可使用对象引用的地方,在句点表示法中,作为方法的参数,作为当前方法的返回值等。用于this是指向当前实例的引用,因此只能在实例方法的定义体内使用它。在类方法中(用关键字static声明的方法)中,不能使用this。变量的作用域和方法的定义要使用变量,必须知道其作用域。作用域是程序的一部分,在其中可以使用某个变量或其他类型的信息,超出作用域后,该变量将不复存在。在java中声明变量时,便限定了该变量的作用域。如,局部变量只能在定义它的语句块中使用,实例变量的作用域是整个类,因此可以被类中的任何实例方法使用。当引用变量时,java从最里面的作用域向外查找其定义
18、。在这个类中,有两个名称皆为test的变量。前者是实例变量,被初始化为10;后者是局部变量,值为20.方法printTest()中的局部变量隐藏了实例变量test。在方法main()中调用printTest()时,它显示的值为20,虽然有一个值为10的实例变量test。为了避免这种问题,可以使用this.test 来引用实例变量,使用test来引用局部变量,但更好的方法是尽量避免使用相同的变量名和定义。将参数传递给方法调用接收对象参数的方法时,对象是按引用传递的。类方法类变量和实例变量之间的关系与类方法和实例方法的关系相同。类方法可以被类的任何实例使用,也可被其他类使用,此外,与实例方法不同,
19、调用类方法时,不需要有类的对象。定义类方法时,需要在方法定义前加上关键字static。如果方法前没有关键字static,则该方法是实例方法,实例方法只能在对象中运行,而不能在类中运行。大多数操作或影响特定对象的方法都应定义为实例方法,哪些提供通用功能,但不直接影响特定对象的方法应声明为类方法。不同于实例方法,类方法不能被继承,因此在子类中不能覆盖超类中的类方法。Java应用程序中的main()方法应用程序的入口类,是程序的入口。应用程序运行时,Java虚拟机将调用该方法。创建重载方法,名称相同但定义和特征标不同创建同名方法:使用java类库时,通常会遇到很多同名方法的类。名称相同的方法是通过下
20、述两个因素区分的:l 参数个数l 参数的数据类型或对象这两个因素都是方法特征标的一部分,使用多个名称相同但特征标不同的方法被称为重载。方法重载可以避免使用完全不同的方法来完成几乎相同的任务。重载也使得方法能够根据收到的参数进行不同的操作。当调用对象的方法时,Java将对方法名和参数进行匹配,以确定应执行哪个方法定义。要创建重载方法,可在同一类中创建多个不同的方法定义,它们的名称相同,但参数列表不同。不同之处可以是参数数目、参数类型,也可以两者都不同。只要参数列表是独特的,Java允许对方法进行重载。创建构造函数在类定义中,还可以定义构造函数,这些方法在对象被创建时自动被调用。构造函数是在对象被
21、创建(被构造)时调用的方法。与其他方法不同,构造函数不能被直接调用。使用new来创建类的实例时,Java完成下述3项工作:l 为对象分配内存l 初始化对象的实例变量,赋予初值或设置为默认值(数值为0,对象为null,布尔值为false、字符值为0)调用类的构造函数如果类没有构造函数,则结合使用new和该类的名称时,仍将创建一个对象。通过在类中定义构造函数,可以为实例变量设置初值,调用基于这些变量的方法,调用其他对象的方法以及设置对象的初始属性。如果类包含接收一个或多个参数的构造函数,则仅当这个类有不接受任何参数的构造函数时,才能调用这样的构造函数。基本的构造函数构造函数与常规方法类似,但有3个
22、基本区别:l 名称与类名相同l 没有返回类型l 不能使用return 语句来返回一个值调用另外一个构造函数构造函数的重载与常规方法一样,构造函数也能接受不同数目和不同类型的参数。覆盖方法创建覆盖现有方法的方法要覆盖方法,只需在子类中创建一个特征标(名称、返回值和参数列表)与超类相同的方法即可。可在SubPrinter类中覆盖printMe()方法,并在其中添加一条显示实例变量z的语句:调用原来的方法例子:13 包、接口和其他类特性类是用于创建对象的模板,对象能够存储数据和完成任务。控制对方法和变量的访问将类、方法和变量固定下来,禁止在子类中覆盖其定义或值创建抽象的类和方法,将通用行为放到超类中
23、将多个类组合成包使用接口填补类层次结构中的空白限定符Java语言提供了4种级别的访问控制:公有、私有、受保护和默认(不使用访问控制限定符)默认:声明变量和方法时,如果没有使用任何访问控制限定符,则它们对同一个包中的其他任何类都是可用的。私有:要完全将方法或变量隐藏起来,不被其他类使用,可使用private限定符,这种变量仅在其所在的类中是可见的。私有实例变量可被其所属类中的方法使用,但不能被其他任何类的对象调用,私有方法也可被其所属类中的其他方法调用,但不能被其他任何方法调用。这种限制也会影响继承:任何私有变量和私有方法都不能被子类继承。公有:类中的方法或变量可供任何类使用。保护:使方法和变量
24、仅供以下类使用(子类和同一包中的其他类)比较各种访问控制级别继承方法的法则l 在超类中被声明为公有的方法在子类中必须也是公有的;l 在超类中被声明为保护的方法在子类中可以是保护的或公有的,但不能是私有的;l 对于没有访问控制的方法(没有指定限制符),在子类中其访问控制可以更严格。被声明为私有的方法根本不能继承,因此上述规则不适用。final类、方法和变量限定符final用于类、方法和变量,指出它们将不会被修改。final类不能被继承final方法不能被子类覆盖final变量的值不能被修改抽象类抽象类可以包含常规类能够包含的任何东西,包含构造函数,因为子类可能需要继承这种方法,抽象类也可以包含抽
25、象方法,这时只有方法特征标,而没有实现方法,这些方法将在抽象类的子类中被实现。抽象类用限定符abstract来声明,不能在非抽象类中声明抽象方法,如果一个抽象类除抽象方法外什么都没有,则使用接口更合适。包包是一种组织类的方式。包中可以包含任意数量的类,这些类的用途相关或有继承关系。包的用途l 包能够将类组织成单元l 包减少了名称冲突带来的问题。l 包能够大面积地保护类、变量和方法而不是分别对每个类进行保护。l 包可以用于唯一地标识类。14 异常和线程(线程是重点,重新看)Java中两个功能最强大的元素,线程和异常。线程是实现了Runnable接口或继承了Thread类的对象,能与Java程序的
26、其他部分同时运行;异常是表示Java运行阶段可能发生的错误的对象。线程让程序能够更高效地利用其资源,这是通过将程序的计算密集型部分分离开来,避免其降低程序其他部分的速度来实现的;异常让程序能够识别错误并作出响应,异常甚至可以帮助程序校正状态,并在可能的情况下继续运行。异常线程使用Java进行编程时,需要考虑的问题之一是如何使用系统资源。图形、复杂的数学计算和其他密集型任何可能占用大量的处理器时间。使用图形用户界面的程序尤其如此。如果你编写的图形Java程序需要完成某种占用大量计算机时间的任务,将发现该程序的图形用户界面的响应速度非常慢。为解决这种问题,可将Java程序中占用大量处理器时间的函数
27、分离开来,让它们同程序的其他部分分开运行。这时通过线程的特性来实现的。线程是程序的一部分,它们在程序的其他代码执行其他工作时独立运行,这也被称为多任务,因为程序可以同时处理多项任务。线程适合用于完成占用大量处理时间且连续运行的任务。通过将程序的工作负荷放到线程中,可以让程序的其他部分处理其他任务。这也使虚拟机能够更容易地对程序进行处理,因为所有的处理器密集型工作都被放到独立的线程中。15 Java类库数据结构表示数据的类,包括如下所述的数据结构l 位组(bit set):用于存储布尔值l 链表(array list):可调整长度的数组l 堆栈(stack):后进先出(LIFO)型结构l 散列映
28、射(hash map):使用键存储数据项iterator 接口接口iterator 提供了一种以定义好的顺序遍历一系列元素的标准方式。方法hasNext() 定义了结构是否还包含其他元素方法next()获得结构中的下一个元素数据结构的遍历堆栈数据结构堆栈用于模拟以特定顺序进行访问的信息。在Java中,Stack类被实现成一个后进先出的堆栈,这意味着最后加入的项将首先被弹出。堆栈的声明:Java类Stack 包含用于操作堆栈的方法可使用push()将新元素加入堆栈,这个方法将元素加入到栈顶。上述代码将6个字符串压入堆栈,最后一个字符串Six位于栈顶。可以使用pop()方法将元素从堆栈中弹出,从而
29、将其删除;上述代码将最后两个字符串从堆栈中弹出,只留下前4个字符串。如果要获得栈顶元素,但并不将其从堆栈中弹出,可以使用方法peek();上述操作将返回字符串Four,但该字符串仍保留在堆栈中。可以使用search()方法在堆栈中搜索元素:如果找到,则将返回该元素离栈顶的距离,否则返回-1.Map接口Map为实现键映射数据结构定义了一个框架,这种结构可用于存储通过键值引用的对象,键值的作用与数组中的索引作用相同,它一个独一无二的值,可用来存储数据结构中指定位置的数据。可使用类HashMap或其他实现了接口Map的类来实现键映射方法。键值映射数据结构的组织结构方法:put(String,Obje
30、ct): 加入对象get(String,Object): 获取对象remove():删除指定键对应的元素size():获悉结构中包含多少个元素isEmpty():检查结构是否为空keyset() 返回set 键值的集合values()返回collection 值得集合泛型可使用java语言支持的泛型来指定数据结构期望的类。期望类信息被加入将结构赋值给变量或使用构造函数来创建结构的语句中。将期望类用字符括起,并将其放在数据结构名的后面。如:上述语句创建了一个用于存储Integer对象的ArrayList,不能将String对象加入到这个链表中。再如:创建了一个分别用String 对象和Float对象作为键值和值的散列映射,这样,便不能将字符串作为值加入到散列映射中。16 Java编程输入和输出Java中,可以使用被称作流的通信系统来存储和检索信息。创建输入流和输出流以读取和存储信息。字节流:用于处理字节、整数和其他简单数据类型。字符流:用于处理文本文件和其他文本源。具体参见:注释单行注释 多行注释文档注释Java非访问限制修饰符Java 访问控制修饰符17 Java面向对象设计