java笔记整理1_第1页
java笔记整理1_第2页
java笔记整理1_第3页
java笔记整理1_第4页
java笔记整理1_第5页
已阅读5页,还剩169页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1一JAVA基础JAVA语言基础DAY012011/12/301LINUX简介1文件系统2当前工作目录,就是当前正在使用的默认文件夹文件夹目录PWD打印显示当前工作目录3用户主目录USERHOME,是属于当前登录用户个人的目录个人主目录,用户拥有对自己用户主目录全部管理权限4MKDIR创建文件夹MKDIRDEMO在当前文件夹工作目录里创建文件夹DEMO5CD切换更改当前工作目录代表上层目录,CD切换到上层目录代表当前目录CD指定的目录CD/到跟目录CD/HOME/LIUCS到主目录CD命令默认返回用户主目录USERHOME6LS显示文件夹内容7绝对路径和相对路径A以根ROOT“/“为开始的路径是绝对路径B不是以“/“开始的是相对路径,相对路径默认相对于当前目录8RMRFDIR删除目录9启动ECLIPSECD/OPT/ECLIPSE/ECLIPSE2JAVA简介1JAVA特点简单,面向对象,跨平台,安全,多线程支持2JAVA的跨平台JAVA通过JVM实现了跨平台技术JAVA源代码(JAVA)经过JAVA的编译器编译成JAVA字节码(CLASS),执行JAVA字节码,JAVA字节码经过JVM的解释为具体平台的具体指令,并执行。不同平台有不同的JVM,主流平台都提供了JVM。所以JAVA字节码可以在所有平台上能够解释执行。在这个意义上JAVA是跨平台的。也就是说JAVA的字节码是跨平台的。3JAVAJDKJDKJAVA开发工具包/OPT/JDKOR/OPT/JDK_1601|BIN开发工具命令JAVA,JAVAC,JAR,JAVAD,JAR,RMIC,JPS2|LIBTOOLSJAR开发工具的实现|JREJREJAVA运行环境|LIBRTJARJAVAAPI应用编程接口,系统类库|JAVA提供的现成组件|BINJAVA_VMJVMJAVA虚拟机3JAVAAPP1HELLOWORLDJAVAPACKAGEBASICDAY01/ECLISPE自动将当前文件编译到WORKSPACE/JSD1205/BIN/BASIC/DAY01/HELLOWORLDCLASS工作空间/项目/BIN/包文件夹/类文件执行时候,执行这个类文件AUTHORTEACHER/PUBLICCLASSHELLOWORLD/JAVA软件的入口方法PUBLICSTATICVOIDMAINSTRINGARGS/在控制台输出“HELLOWORLD”SYSTEMOUTPRINTLN“HELLOWORLD“2JAVA的编译PROJECT|SRC|BASICDAY01|HELLOWORLDJAVA|JFRAMEHELLOWORLDJAVA|BIN|BASICDAY01|HELLOWORLDCLASS|JFRAMEHELLOWORLDCLASS4JAVA的注释,被JAVAC编译器忽略的部分1单行注释/2多行注释/3文档注释/5ECLIPSE日食/月食1来自IBM开源,有ECLIPSEORG基金会维护开发是主流的JAVA开发平台,可以开发PHP,RUBY,ANDROIDSUN对这个软件很有意见ECLISPE是JAVA开发的,需要JDK来运行32ECLIPSEORG下载3JDKJAVASUNCOM2012/6/1DAY02变量,JAVA的变量存储(二进制)JAVA的变量类型数据类型转换1JAVA变量1变量就是自然语言中的代词PERSONHEINTAGE15/AGE00000000000000000000000000001111SYSTEMOUTPRINTLNAGE/152JAVA中的变量,JAVA是强类型语言,A变量必须声明,并且初始化以后使用B变量必须有明确的类型C变量不能重复定义3变量的作用域A在声明的地方开始,到块结束为止B离开变量的作用域结束,变量将回收。2进制转换基础1十进制逢10进1基数10权10N,10000100010010123678102100003100061007108121043103610271018100236792二进制逢2进1基数2权2N,12864321684210100000121641165103补码基础1281000000011111111111111111111111110000000102进制8421111101111111111111111111111111111111011181000111110001111111111111111111111111111100071001111110011111111111111111111111111111100161010111110101111111111111111111111111111101045101111111011111111111111111111111111111110114110011111100111111111111111111111111111111003110111111101111111111111111111111111111111012111011111110111111111111111111111111111111101111111111111111111111111111111111111111111110000000000000000000000000000000000000000000001000100000001000000000000000000000000000000012001000000010000000000000000000000000000000103001100000011000000000000000000000000000000114010000000100000000000000000000000000000001005010100000101000000000000000000000000000001016011000000110000000000000000000000000000001107011100000111000000000000000000000000000001110000100000000000000000000000000000001000127011111110000000000000000000000000111111112800000000000000000000000010000000补码运算1111111111111111111111111110101000014AJAVA内部只有二进制补码BJAVA内部采用补码运算,自动发送上溢出和下溢出CJAVA内部没有10进制但是JAVA尽量按照人类习惯输入输出D补码的负数最高位是1,也称作符号位516进制,是2进制的简写,方便专业人员书写2进制数据16进制逢16进1基数16权16N,25616116进制数字0123456789ABCDEF012345678910111213141541164161165100100000125842184214116128643216842101000001练习转换以下十进制为二进制19210137101451019210110000002C016810FFFFFFF816补码有符号数32位有符号数32位补码3JAVA数据类型分为引用类型和基本数据类型1基本数据类型8种BYTE,SHORT,INT,LONGFLOAT,DOUBLECHARBOOLEAN2整数类型BYTE,SHORT,INT,LONG,都是有符号补码整数BYTE8位补码最大值0X7F127最小值0X80128SHORT16位有符号数0X7FFF327670X800032768INT32位0X7FFFFFFF2G1231121亿0X800000002GLONG64位0X7FFFFFFFFFFFFFFFL整数字面量直接量默认是INT类型,如果不超出范围,可以给小类型直接赋值使用整数类型BYTE,SHORT,INT要注意取值范围,超范围运算JAVA底层BYTE,SHORT按照32位计算/SHORTAGE18LONG类型的字面量使用“L“,“L“后缀字面量直接量就是直接给出的数值3浮点数,小数不必掌握浮点数的存储方式浮点数原理10进制浮点数科学计数法原理23561892356189106概念尾数2356189指数6基数10PI31431415926535897932384626433二进制浮点数101001010101101001010101210116概念尾数101001010101指数1011基数2FLOATF233333FLOAT32位其中1位符号位,8位指数,23位尾数精度23位INTMAX01111111111111111111111111111111FLOATF111111111111111111111111200011110DOUBLE64位其中1位符号位,11位指数,52位尾数浮点数的字面量默认是DOUBLE,DD后缀是DOUBLE,FF是FLOAT4字符类型CHAR,字符是一个16位无符号整数,是一个二进制数数值是一个字符的UNICODE编码值UNICODE编码是全球范围内的编码方法,编制了英文,中,日,韩阿拉伯,希伯来,8万字符中20013田30000A65其中英文部分与ASCII兼容,英文字符和数字是连续编码的ASCII0128JAVACHAR的范围065535不能表示全部UNICODE但是可以表示UNICODE只能够最常用的部分最小值0,最大值655352161字符字面量使用单引号为定界符号中字面量也是整数常量特殊字符采用转义字符表示如NEWLINE换行RRETURN回车TTABBBACKSPACEFPAGEBREAK“U4E2D中U0041AU0000编码为0的字符,是不可见字符不是所有字符都可以打印可见75BOOLEAN布尔类型表达真TRUE/假FALSE建议使用长变量名定义变量BOOLEANSTARTEDTRUEBOOLEANISMANTRUE/纯爷们ISMANFALSEBOOLEANUSEDTRUE/二手的IFUSEDSYSTEMOUTPRINTLN“打八折“IFISMAN/不建议定义没有意义的变量BOOLEANUTRUE/UYOUIFU/BOOLEANFLAGFALSEIFFLAGSYSTEMOUTPRINTLN“打八折“4数据类型转换CHARBYTESHORTINTLONGFLOATDOUBLE1自动类型转换,正方向,小类型到大类型的转换会自动完成符号位会自动扩展,负数补1,正数补0,保证补码数值不变注意,整数到浮点数转换会损失精确度自动类型转换也叫“隐式类型转换“,是自动发生的,一般不需要处理INTI1LONGLI2强制类型转换显示类型转换,需求明确处理,是按照反方向,进行的转换,这种转换会溢出,或者损失精度要注意数据的范围INTI128256/00000000000000000000000110000000BYTEBBYTEI/128LONGL0XF80000000LINTCINTL/负数L88INTDINTLFLOATPIFLOAT31415926535/损失精度CHARC0CHARXCHARC22012/6/4DAY031JAVA中的函数方法2数学运算符1JAVA的方法METHOD函数FUNCTION,功能,动作1方法就是函数YFX3X62方法的语法修饰词返回值类型方法名参数列表/方法体PUBLICSTATICVOIDMAINSTRINGARGS如PUBLICSTATICINTFINTXINTY3X4RETURNY4如果有返回值定义就必须有RETURN语句,返回和返回值类型兼容的数据5方法的参数和方法内部的变量都是局部变量,这些变量作用域只在方法内部6实参方法调用时候实际传递的参数变量形参方法的参数定义,是临时变量2JAVA运算符1数学运算符/A运算的封闭性补码运算的封闭性1同种类型参与运算可能需要自动类型转换2返回同种类型可能发生上溢出和下溢出3BYTE,SHORT,CHAR按照INT运算如INTA1AB整数的除法是整除,除以2相当于移位运算移动小数点CJAVA中字面量的运算被JAVAC优化了,优化为一个固定的常量D计算除法的余数10对其他数的余数是02N3是周期函数,函数值0,393负数的余数是负数考试可能出现,工作中很少用2自增自减运算1可以将当前变量自我增加减少12I,后,先将I的值作为整个表达的值,然后将I增加13I,先,先将I增加1,然后将I的值作为整个表达的值I33逻辑与比较运算1逻辑运算与并且/否定条件4JAVAARRAY一群学生,他们来了集合代词他们数组的引用变量数组变量一组个体一群学生数组对象每个个体学生数组的元素INTARY2,3,4ARY数组的引用变量数组变量2,3,4数组对象2数组的元素1数组变量的声明INTARY声明了数组变量ARY,数组变量是代词,INTARY为了与C语法兼容的写法,不建议写法,2数组对象动态初始化ARYNEWINT4/数组变量引用了具体数组对象,就是代词指代了具体事务数组元素是自动初始化的,自动初始化为“零“值“零“值0,00,U0000,FALSE,NULL12ARYNEWINT1,2,3直接给出元素的初始化3数组对象的静态初始化,只能用在声明数组变量时候同时初始化不能用于赋值语句INTARY1,2,3ARY3,4,5,6/编译错误JAVA关键字IF,PUBLIC,CLASS,ELSE,WHILE特殊关键字GOTO,CONSTJAVA中TRUE,FALSE,NULL不是关键字,是字面量4数组变量,数组对象,数组元素如INTARY1,2,3ARY是数组变量指代一个具体的数组对象1,2,3数组对象1,2,3是数组元素5数组元素的访问,数组对象的大小是固定的,长度是N,下标0N1A使用下标访问数组元素B越界访问小于0/大于等于N,都会发生运行异常C使用LENGTH属性可以获取数组对象长度5数组的复制与动态扩展算法1数组对象的复制2数组的扩展问题1JAVA数组对象的大小是固定的,数组对象是不能扩展的2利用数组复制到方法可以变通的实现数组扩展3SYSTEMARRAYCOPY可以复制数组4ARRAYSCOPYOF可以简便的创建数组副本5创建数组副本的同时将数组长度增加就变通的实现了数组的扩展案例1统计一个字符在字符串中的所有位置字符串统计一个字符在字符串中的所有位置字符字返回4,76数组的迭代将每个数组元素重复的处理一遍FORINTI0IARYJIJ8|2,3,7,10182TRUE822|8,3,7,10223FALSE2|8,3,7,10327FALSE2|8,3,7,10421TRUE211,8|3,7,21283TRUE831,3|8,7,21337FALSE1,3|8,7,21432TRUE321,2,8|7,32387TRUE871,2,7|8,32473TRUE731,2,3,8|73487TRUE871,2,3,7,84I0ARYJ/ARYIARYJINTTEMPARYIARYIARYJARYJTEMP2冒泡排序原理A逐一比较数组中相邻的两个元素,如果后面的数字小于前面的数字,就交换先后元素B经过一个轮次的比较,一定有一个最大的排在最后的位置C每次比较剩下的元素,经过N1次比较,可以实现排序14简单说比较相邻元素,大的向后交换原理说明ARY8,2,3,7,1ARY2,8,3,7,1ARY2,3,8,7,1ARY2,3,7,8,1ARY2,3,7,1|8ARY2,3,7,1|8ARY2,3,7,1|8ARY2,3,1|7,8ARY2,3,1|7,8ARY2,1|3,7,8ARY1,2,3,7,8I代表次数J代表比较位置ARYIJJ1ARYJARYJ1JJ1JJ18,2,3,7,100182TRUE822,8,3,7,101283TRUE832,3,8,7,102387TRUE872,3,7,8,103481TRUE812,3,7,1|810123FALSE2,3,7,1|811237FALSE2,3,7,1|812371TRUE712,3,1|7,820123FALSE2,3,1|7,821231TRUE312,1|3,7,830121TRUE211,2,3,7,8I0J1JJ13插入排序原理A将数组分为两部分,将后部分的第一张逐一与前部分每一张比较,如果当前元素小,就一点被比较元素B找到合理位置插入原理说明TEMP18|2,3,7,12,8|8,7,12,3,8|7,12,3,8|8,12,3,7,8|8152,3,7,7|82,3,3,7|82,2,3,7|81,2,3,7|8TEMP代表取出的待插入元素I代表后组待插入元素位置J代表前组每个元素的位置移动插入ARYITJARYJTJ1TJ18|2,3,7,51208TRUE8J18|8,3,7,51212J12,8|3,7,52318TRUE8J12,8|8,7,52302FALSE3J12,3,8|7,53728TRUE8J12,3,8|8,53713FALSE7J12,3,7,8|54538TRUE8J12,3,7,8|84527TRUE7J12,3,7,7|84513FALSE5J12,3,5,7|85I10,JIFTJ1/移动ELSEBREAKJTJ1/插入2JAVA系统排序ARRAYSSORT,排序算法性能很好3方法的递归调用1JAVA的栈是JAVA进程启动时候在内存中开辟的存储空间栈内存的利用方式LIFO后进先出JAVA所有局部变量都在栈中分配压入,方法的参数也是局部变量,局部变量在离开作用域时候回收就是从栈中弹出删除2JAVA方法调用使用栈实现,递归调用就是栈实现的3递归时候要按照递归深度分配全部临时变量,栈开销很大,性能不好,要注意不要超过栈的大小,并且一定要给出结束条件,否则会造成栈溢出错误案例123NFNNFN1STRINGNAMESTRINGISBN/书号STRINGAUTHORS/作者DOUBLEPRICE3引用变量与对象的创建过程AJAVA的内存管理与分配栈是一块JAVA使用内存区域,使用的方式LIFO后来者居上堆也是一块JAVA使用内存区域,使用方式无需随机分配B局部变量与堆对象空间分配JAVA局部变量在栈中分配,是按照变量的类型分配对象在堆中分配,按照类的属性实例变量分配空间C变量类型与分配变量分为基本类型和引用类型基本类型变量的空间大小就是基本类型的空间大小,值是基本类型的值引用变量的值是一个对象的地址值,引用变量通过地址引用了一个堆对象引用类型变量的占用空间大小和值管理是“透明的不可看见“,由JAVA系统管理变量占用空间以及值的管理,都是透明的4对象的属性默认自动初始化的自动初始化为“零“值,引用为NULL5在NULL引用上调用属性或方法,会发生运行时异常案例平面绘图坐标系中的一个点POINT,定义合理的属性坐标是INT类型OX|PX,Y|Y3构造器构造方法的作用用来描述对象的初始化过程的1如月饼实例的创建,使用面和馅创建制作构造器25月饼模子类月饼对象原料构建参数点类型原点坐标1,22JAVA中的构造器声明在类内部,方法名与类名一致的方法叫构造方法,构造方法不能声明返回值类型构造方法可以包含参数,参数一般是创建对象实例必须依赖的条件前提条件PUBLICCLASSPOINTINTXINTY/构造器/PUBLICPOINTINTX,INTYTHISXXTHISYY3对象实例化过程NEW运算创建对象实例1根据类的属性在堆中分配对象空间并且自动初始化实例变量属性2根据参数类型调用构造器3NEW运算返回对象的引用地址这个地址就是引用4THIS关键字THIS是对当前对象的引用,是运行期间当前对象本身THIS是在运行期间,作为方法的第一个隐含参数,是局部变量可以使用THIS明确的访问当前对象的属性或者方法,类似于“我“THIS是调用本类的其他构造器,可以使用构造器的重用,简化代码的实现THIS必须写在构造器的第一行5构造方法重载参数不一样的构造器案例POINTJAVA方法签名方法名参数类型列表方法重载A方法名一样B方法参数不一样也可以说方法名一样,方法签名不同的方法6默认构造器1JAVA类一定有构造器案例CONSTRUCTORDEMOJAVA2如果类没有声明任何构造器,JAVAC自动提供一个默认构造器,无参数默认构造器263如果提供构造器声明,JAVAC将不再提供默认构造器4对象的方法1表示对象的功能,依赖于对象存在案例POINTJAVA如P1DISTANCE和P2DISTANCE方法是动作,是功能,一般用动词声明2方法也经常重载,重载方法名一样,参数不一样重载体现了,功能的多态重载的方法经常互相重用OOPDAY032012/6/11关于类一个JAVA源文件只能有一个PUBLICCLASS文件名与公有类类名一致源文件中可以有多个类,但是不能都是公有的如果没有公有类,文件名与某个类类名一致一般情况下一个源文件一个类,类是公有的类体CLASSBODY中的成员属性方法构造器语句块以后讲,很少用成员不能重复属性名不能重复方法签名不能重复构造器签名不能重复1方法签名方法的识别关键字方法签名方法名参数类型列表ADDINTX,INTY,INTZJAVA类中不能存在相同方法签名的方法方法重载方法名一样,方法签名不同的方法CHARCHSA,B,CINTARYA,B,CSYSTEMOUTPRINTLNCHS/ABC/PRINTLNCHARSYSTEMOUTPRINTLNARY/34ADCD/PRINTLNOBJECTSYSTEMOUTPRINTLNARYTOSTRING/34ADCDSYSTEMOUTPRINTLNA/A/PRINTLNCHAR打印字符SYSTEMOUTPRINTLN65/65/PRINTLNINT打印整数方法重载就是动词的多意现象,打人,打牌,打酱油,打车27就是行为的多态保存联系人,保存通话记录,保存访问过的地址SAVECONTACTSAVELOGSAVEURLSAVEMESSAGE2JAVA方法参数的传递规则基于值的传递,是变量值的复制,1基本类型就是其中值的复制,2引用类型是引用值地址的复制,对象不复制案例PARAMATERDEMOJAVA变量的值A基本类型的值是其本身,B引用变量的值是一个地址值,是被引用对象的首地址为了避免引用参数传递的副作用,建议一切结果使用返回值带回继承,类型的继承继承涉及到语法属性,方法构造器,方法覆盖3继承用来表达概念上具体化延续的具体概念1子类继承父类的属性和可见方法可继承的资源2构造器不能继承3实例化子类,会递归分配所有父类的空间4子类构造器一定调用父类构造器类一定有构造器4关于继承中的构造器1子类构造器中,一定调用父类构造器。2子类构造器默认调用父类无参数构造器3如果父类没有无参数构造器,就必须在子类中明确指定调用父类的有参数构造器4使用SUPER调用父类构造器,必须写在子类构造器第一行THIS必须写在子类构造器第一行5编程建议所有的类都提供无参数构造器减少继承时候的麻烦。5关于对象的实例化过程1检查类是否加载,如果没有加载就加载这个类,要加载所有父类。读取CLASS文件到内存懒惰式加载(按需加载)如果第一次用到就加载,只加载一次。通过CLASSPATH指定的路径寻找类文件CLASS,加载以后是一个对象,类型是CLASS。获得这个类对象STUDENTCLASSCLASS实例2分配父类型空间,按照属性分配空间,属性自动初始化为“零“3执行父类属性的初始化代码,如INTA1284执行父类构造器代码5父类构造器结束,返回子类构造器,分配子类空间按照属性分配空间,属性自动初始化为“零“6执行子类属性的初始化代码,如INTB27执行子类构造器代码所有类默认继承于OBJECT所有类都是OBJECT东西啥都是东西继承表达“是“7继承中的语法现象1父类型变量可以引用子类型的实例,父类型的实现是多态的2子类可以覆盖/重写父类的方法,修改父类的行为。方法覆盖/重写子类覆盖了父类“相同方法签名”的方法。方法的覆盖是由方法动态绑定实现的,就是JAVA虚拟机运行时候确定执行那个那个对象那个方法,JAVA最终执行子类的方法。重载OVERLOAD本类/子类中具有不同的方法签名重写/覆盖OVEREIDE子类修改父类行为,“相同方法签名”的方法作业1练习课题案例2实现如下案例设计图形(SHAPE)类及其子类(CIRCLE、RECTANGLE)(SHAPE有属性POINTX,Y是图形位置,1)SHAPE提供计算面积方法AREA,子类覆盖2SHAPE提供检查是否包含指定坐标的方法,子类覆盖3试题QUESTION,单选题SINGLECHOICE和多选题MULTICHOICE之间的继承关系要求1QUESTION包含题干属性TEXT2QUESTION包含检测标准答案的方法BOOLEANCHECKINTANSWERSANSWERS是用户提供的答案,是单选就应该只有一个答案3)MULTICHOICE和SINGLECHOICE是QUESTION类的子类,MULTICHOICE包含属性选项STRINGOPTIONS多选标准答案INTANSWERSSINGLECHOICE包含属性选项STRINGOPTIONS单选标准答案INTANSWER4在MULTICHOICE实现参数为STRINGTEXT,STRINGOPTIONS,INTANSWERS的构造方法,29其中TEXT是题干,OPTIONS是选项,ANSWERS是多选标准答案,是正确选项的序号5在SINGLECHOICE实现参数为STRINGTEXT,STIRNGOPTIONS,INTANSWER的构造方法。其中TEXT是题干,OPTIONS是选项,ANSWER是标准答案,是正确选项的序号6)在MULTICHOICE和SINGLECHOICE类中重写QUESTION类CHECK方法提供具体的检查用户答案的逻辑OOPDAY042012/6/12访问控制与类型转换FINALSTATIC1访问控制修饰符PUBLICPROTECTEDDEFAULT很少使用,很少使用PACKAGE作为访问控制的边界PRIVATE一般自然现象都是尽可能的封装典型声明属性和方法尽可能私有。这样才能做到尽可能的封装。提供适当的属性访问方法,适当的开放属性的访问。一个源文件可以有多个类,但是只能有一个PUBLIC类,文件名要与PUBLIC类一致如果有其他类,就只能是默认修饰不建议使用非公有类。就是说所有类都应该是公有的,并且一个源文件一个类。2引用类型转换(是引用变量的类型的转换)NUMBER数|INTEGER整数|LONG长整数|DOUBLE浮点数INTEGERINEWINTEGER5NUMBERNI/小类型引用变量到大类型引用变量的赋值/小类型到大类型会自动完成隐式/自动类型转换30INTEGERXINTEGERNDOUBLEDDOUBLEN/大类型父类型引用变量到小类型子类型引用变量的赋值/需要强制类型转换/两种情况1大类型引用变量实际引用的对象与小类型变量兼容转换可成功2大类型引用变量实际引用的对象与小类型变量不兼容转换会出现“运行异常“1向下转型(隐式/自动类型转换),是小类型到大类型的转换如CIRCLECNEWCIRCLE1,2,3SHAPESSHAPEC/表示圆一定是图形2向上造型(强制类型转换),是大类型到小类型。如SHAPESSHAPENEWCIRCLE1,2,3CIRLCLECCIRCLES/当S实际引用圆时候,能够转换成功SNEWRECTANGLE1,1,2,2CIRCLEC2CIRCLES/出现类型转换异常,因为/S引用的是RECTANGLE不是圆实例。3INSTANCEOF运算符,用来检查引用对象的类型。经常与“引用类型强制转换”配合,实现安全的类型转换,避免类型转换异常。JAVABEAN关于JAVABEAN规范1JAVABEAN不是语法规范,是习惯性编程规范,用这个规范写的类使用方便。有时候JAVABEAN的类也称为POJOPLANOLDJAVAOBJECT2简化规范A必须有包BJAVA类,具有无参数构造器。C有用GETXXX和SETXXX声明的BEAN属性。如GETNAME和SETNAMESTRINGN声明的BEAN属性为NAME,与是否有实例变量NAME无关BOOLEAN类型的GET方法可以有两种形式GETMARRIED或者ISMARRIEDD必须实现序列化接口在学习IO的时候具体学习。EJDK提供的类几乎都符合JAVABEAN规范。如STRING3JAVABEAN最大的好处“使用方便”STATIC静态关键字,修饰属性,方法,内部类,代码块STATIC修饰的资源属于类级别,是全体对象实例共享的资源属性,方法,内部类311静态属性,使用STATIC修饰的属性,是在类的加载期间初始化是属于类的,全体类的实例共享的变量,使用类名访问属性实例变量属于对象的属性2STATIC方法,使用STATIC声明的方法,属于类的方法,一般用来表示工具方法在类加载以后就可以自己调用,不需要创建任何类的实例3静态代码块,是在类加载期间运行的代码块,由于类只加载一次,所以静态代码块只执行一次用途不是很常见,一般用来在类加载以后初始化一些静态资源时候使用,如加载配置文件。4静态内部类(在内部类专题讲解)FINAL最终的1FINAL修饰的类,不能再被继承。JAVA的STRING就是FINAL类,不能被继承MATH也是FINALINTEGER包装类在实际项目开发中,原则上不允许使用FINAL类SPRING,HIBERNATE,STRUTS2,这个框架经常动态继承代理我们的类。使用FINAL的类可能造成这些框架的工作问题2FINAL修饰的方法,不能再被覆盖。在实际项目开发中,原则上不允许使用FINAL方法3FINAL修饰的变量,初始化以后不允许再修改了。AFINAL局部变量BFINAL方法参数CFINAL的成员变量4FINALSTATICJAVA使用FINALSTATIC修饰的变量作为常量。一般要求常量名都有大写字母。常量不是CONST常量和字面量/直接量PUBLICSTATICFINALINTACE13MATHPI31415926535897932384626MATHE/ACE常量13是直接给出的字面量“达内“字符串字面量常量和字面量都是不可改变的常数,广义上都称为“常量“减少硬编码“硬编码“是指在代码中直接使用“字面量“将字面量替换为常量/变量FORINTI0I啥都是东西继承了OBJECT的属性和方法如TOSTRING,HASHCODE,EQUALS2TOSTRING方法,经常有系统默认调用,活动当前对象的文本描述,OBJECT默认返回全限定名HASHCODE建议覆盖为当前对象的文本描述,看着办3EQUALS是用来比较两个对象是否相等的方法。区别引用相等与对象相等引用值相等使用“”对象的内容相等EQUALS方法EQUALS在OBJECT类中声明,默认的比较规则是比较引用建议覆盖,实现对象的比较比较对象的状态,就是比较对象的数据。覆盖规则A自反性对于任何非空引用值X,XEQUALSX都应返回TRUE。B对称性对于任何非空引用值X和Y,当且仅当YEQUALSX返回TRUE时,XEQUALSY才应返回TRUE。C传递性对于任何非空引用值X、Y和Z,如果XEQUALSY返回TRUE,并且YEQUALSZ返回TRUE,那么XEQUALSZ应返回TRUE。D一致性对于任何非空引用值X和Y,多次调用XEQUALSY始终返回TRUE或始终返回FALSE,前提是对象上EQUALS比较中所用的信息没有被修改。E对于任何非空引用值X,XEQUALSNULL都应返回FALSE。4HASHCODEAHASHCODE方法要与EQUALS方法一同覆盖A当两个对象EQUALS比较为TRUE时候,这两个对象应该具有相同的HASHCODE值B当两个对象EQUALS比较为FALSE时候,这两个对象应该具有尽可能不相同的HASHCODE值CHASHCODE值要稳定(一致性),一个对象创建以后就不应该再变化B默认的HASHCODE值是当前堆对象地址转换的一个整数,这个整数不是内存地址。C一般使用对象的OID值作为HASHCODE的值。OID对象的唯一编号,在工程项目中一般采用数据库来生成OID,也就是数据库中的“主键”IO流34I/O操作INPUT输入OUTPUT输出FILEJAVAIOFILE用于表示文件或目录,我们可以通过这个类来操作磁盘上的文件或目录FILE类提供了对文件或目录的提供相关信息文件名,文件大小等,但是不能对文件内容进行访问FILE常用API方法LONGLENGTH文件的大小长度LONGLASTMODIFIED文件的最后修改时间STRINGGETNAME获取文件名STRINGGETPATH获取文件路径BOOLEANEXISTS文件是否存在BOOLEANISFILE是否是一个文件BOOLEANISDIRECTORY是否是一个目录BOOLEANMKDIR创建一个目录BOOLEANMKDIRS创建一个目录创建所有不存在的父目录BOOLEANDELETE删除文件或目录若是目录,此目录必须为空BOOLEANCREATENEWFILE创建一个文件该方法要求捕获IOEXCEPTIONFILELISTFILE返回当前目录下的所有FILE相对路径有参照点,从参照点开始到目标所描述的路径绝对路径没有参照点,从系统提供的最基础路径开始到目标所描述的路径RANDOMACCESSFILERANDOMACCESSFILE提供了丰富的对文件的读写操作RANDOMACCESSFILE支持随机访问方式,可以访问文件的任意位置打开文件的模式1“RW“读写2“R“只读RANDOMACCESSFILE的几个基本元素INDEX下标,每个字节的位置POINTER游标,正在操作的字节的位置DATA数据,文件的字节内容变成习惯凡是进行读写操作的类,使用完毕后都应关闭以释放资源序列化基本类型序列化基本类型序列化将基本类型变量的值转换为BYTE序列的过程基本类型反序列化将BYTE序列转换为基本类型的数据的过程35IO流INPUTSTREAM,OUTPUTSTREAMINPUTSTREAM与OUTPUTSTREAM都是抽象类,所以不能直接实例化INPUTSTREAM抽象了应用程序读取数据的方式OUTPUTSTREAM抽象了应用程序写出数据的方式流是用于在应用程序与外界之间交互数据OUTPUT|APP|APP|FILE|36|DATAOUTPUTSTREAMFILEOUTPUTSTREAMFFFFFFFD37缓冲输入流输出流BUFFEREDINPUTSTREAMBUFFEREDOUTPUTSTREAM为读写操作提供缓冲,以加快读写效率提高性能注意缓冲流因为不是每次写出数据都立刻将数据写出,而是将要写出的数据放入缓冲区,当缓冲区数据达到缓冲区最大值时一次性将数据全部写出基于这个特性,我们经常发现,当我们将数据通过缓冲输出流写出以后,将流关闭,却发现数据没有被写到目标位置这是因为要写出的数据没有填满缓冲区导致没有发生真实的写出操作所以,使用缓冲输出流在关闭流前要调用FLUSH方法,此方法的作用是将缓冲区内容一次性写出FILEOUTPUTSTREAM以字节为单位写出数据DATAOUTPUTSTREAM以基本数据类型所占用的字节为单位写出数据BUFFEREDOUTPUTSTREAM以缓冲区大小的字节为单位写出数据字符串序列化STRING本质上是一个CHARCHAR转换为BYTE序列BYTE,这个过程就是字符串序列化,也称为字符串编码CHAR是16位无符号整数,值是UNICODE编码UTF16BEUTF16是以双字节描述一个字符,将16为CHAR从中间切开它是将UNICODE编码的CHAR序列转化为BYTE的编码方案UTF16最多支持65535个字符UTF8万国码采用变长编码1N方案其中英文是用1个字节,汉字用3个字节较常见的编码GBK中国国标,英文1个字节,汉字2个字节与UNICODE不兼容ISO88591西欧常用的编码集字符串编码从字符串转换到BYTE序列的过程BYTE的值取决于编码集字符串解码从BYTE序列转换到字符串的过程文本与文本文件JAVA中的文本CHAR是双字节16位无符号整数,UNICODE编码文件BYTEBYBYTE文件就是用一个字节序列组成文本文件以某种编码方案编码的字节序列保存的文件38字符流INPUTSTREAMREADER与OUTPUTSTREAMWRITER缓冲字符流BUFFEREDREADER缓冲字符输入流特点以行为单位返回字符串PRINTWRITER字符的高级流,以行的形式输出字符串对象序列化将对象OBJECT转换为BYTE序列的过程称之为对象序列化将BYTE序列转换为对象OBJECT的过程称之为反序列化对象的序列化与反序列化使用两个高级流来完成OBJECTINPUTSTREAM反序列化需要对象输入流来实现READOBJECT反序列化时使用的方法BYTEOBJECTOBJECTOUTPUTSTREAM序列化需要对象输出流来实现WRITEOBJECT序列化对象时使用的方法OBJECTBYTE序列化接口SERIALIZABLE此接口没有任何抽象方法,此接口的目的是表示实现了此接口的类是一个可序列化的类若一个类想要做序列化操作,那么它必须实现序列化接口,否则在序列化过程中会报错除了当前类需要实现序列化接口以外,这个类的所有属性必须也实现序列化接口,属性的属性也要实现序列化接口,属性的属性的属性也需要对象的深度复制通过对象序列化与反序列化的特性,我们可以做到对对象的深度复制表层复制JAVA默认的复制模式,方法定义在OBJECT中,方法为CLONE表层复制是复制现象,只复制对象的第一层表层复制的性能好,但是隔离性差深度复制复制对象的多有内容性能差,隔离性强以复制ARRAYLIST为例表层复制ARRAYLIST对象本身复制了一个新对象内容集合里的元素没有复制39深度复制ARRAYLIST对象以及内容都进行了复制BYTEARRAYINPUTSTREAM与BYTEARRAYOUTPUTSTREAM这一对输入输出流的真正终点不是设备,而是内建的一个BYTE就是将BYTE包装成了一个输入/输出流DATE时间和日期1JAVA中常见的日期类有两种DATE和CALENDAR2时间类的本质DATELONG操作CALENDARLONG操作3时间标准GMT格林威治时间19700101000000UTC协调世界时4JAVA中的基本时间是GMT5JAVA中提供的DATE是对一个LONG值的封装用来表示日期和时间6CALENDAR是对历法的抽象7GREGORIANCALENDAR是历法的实现采用公历太阳历8DATE和CALENDAR的默认时间是当前系统时间注意不要用DATE做时间操作,很多方法被API标注为已过时,因为DATE的很多获取时间的方式不安全,例如GETYEAR方法,会引发“千年虫“问题DATE现在常用在表示一个时间单纯的记录LONG值,做简单封装若要对时间做操作,要使用CALENDAR类或其子类日期格式之间的转换JAVA中,有3中方式表示日期LONG,DATE,CALENDARLONGDATE1通过DATE的构造方法DATEDATENEWDATENOW2通过DATE的方法SETTIMEDATESETTIMENOWDATECALENDAR1通过CALENDAR的SETTIME方法CALENDARSETTIMEDATEDATELONG1通过DATE的GETTIME方法LONGTIMEDATEGETTIMECALENDARDATE1通过CALENDAR的GETTIME方法DATEDATECALENDARGETTIME40三种类型分别如何代表当前系统时间LONG通过SYSTEM的方法SYSTEMCURRENTTIMEMILLISDATE通过默认构造方法DATEDATENEWDATECALENDAR通过默认构造方法CALENDARCALENDARNEWGREGORIANCALENDAR日期的输入和输出日期的输入日期输入本质是上格式化的字符串转换为DATE日期的输出本质上是将DATE转换为字符串JAVA提供了一个用于在字符串与DATE之间进行转换操作的类这个类SIMPLEDATEFORMATSIMPLEDATEFORMATSDFNEWSIMPLEDATEFORMATSTRINGSTR此STR为格式字符规定了表示时间的字符串格式例如“YYYYMMDD“20120621“YYYY/MM/DD“2012/06/21“MMDDYYYY“06212012“日期输入字符串转换DATE的过程SDFPARSESTRING日期输出DATE转换字符串的过程SDFFORMATDATE数字格式输入输出DECIMALFORMAT0一个数字可有可无一个数字必须有“0“05600056“0“56005599999999999999994NUMBERFORMAT查阅API异常EXCEPTION什么是异常异常是行为方法,过程的意外结果异常如果方法声明了抛出异常,调用者应捕获这个异常,或继续抛出如果方法声明了抛出异常,方法中应含有抛出异常的语句换言之,若方法中抛出了异常,那么该方法必须声明抛出异常抛出异常的语法规定在方法的参数列表后书写THROWS关键字空格后输出异常类型PUBLICSTATICVOIDMAINSTRINGARGSTHROWSEXCEPTIONPUBLICVOIDSAYHELLOTHROWSNULLPOINTEREXCEPTION41异常都是继承自EXCEPTION的异常的两种处理方式捕获异常使用TRY,CATCH,FINALLY进行捕获且处理异常TRY/可能出现异常的代码片段CATCHEXCEPTIONE/捕获异常后的处理逻辑CATCHEXCEPTIONEFINALLY/无论出不出错都会执行的逻辑CATCH代码块可以出现多次,用于捕获可能出现的不同种类异常抛出异常出现异常不解决,直接抛出异常的种类THROWABLE|ERROR错误系统级别的异常|OUTOFMEMORYERROR堆内存溢出|STACKOVERFLOWERROR栈内存溢出|EXCEPTION异常应用程序级别的异常|JAVATEXTPARSEEXEPTION解析异常|RUNTIMEEXCEPTION运行时异常编译器忽略的异常|NULLPOINTEREXCEPTION空指针异常|ARRAYINDEXOUTOFBOUNDSEXCEPTION|NUMBERFORMATEXCEPTIONINTEGERPARSEINT“A“|CLASSCASTEXCEPTI

温馨提示

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

评论

0/150

提交评论