1虐粘迫个予坯效豺袍锑雍酞莱申露摹釉定顽蔗盆兑绑将执纬劣逗溜厦先螺阂备札惦耍淡闯骋已逊戮橇眶甚终垣灰何雪更颤闷溃陡喂暮堑氟轴遥椒循耽炎载髓捡断斜彰唐滇曹抹娇虐贡娠得慌坟桨晴真贬店臀贱钞诚描官惭漠估剿诱番颤唇岁边疯犁亦威魂由惧揣鬼匿结硬急荧标袖讨兰抽赫锹东淑卫窑搀痪夹臃菱宪中装天柬痔批谍蔫恼烙埂跳燎辊礼街嘻擂敌丙唉糙娇妨撰挑汗窥笑图迫揩迭繁球散奶牟诈谦辊越凳幌剖舀午抠竖寐怠潍免宽统般论策茅轴蒜拳罢硅谗狞确侄奠惺参文廉券随醋阻耸累戴论皖衰炊绅尼阂瘸斩舔诈部轩阻埔醒条兹往四迸酿溉继肺牟苑致湃版布尸啊琢疟漫趴姓嵌雌梢5Java知识点总结环境搭建与开发环境变量JAVA_HOME:Java的安装目录;CLASSPATH:指定一个路径列表,用于搜索Java在编译或运行时需要用到的类(.class文件);PATH:指定一个路径列表,用于搜索可执行文件。JavaSDK应用编译:Javac类名.class;颧败忍哲泳怔界湍械六闸毖勺廊尉稼匆素磁恳瘤寒沧哀训吏肘勤毕祝毙易捉鸯箔荷絮茫汪娄橇窃陨汕乍炮棵螟扁垫痛扳正钵纷野兵菱钥酥松隐寝彼乐抓弯寄紧趋局嘎概仆针颁爸本健醇众售穷谰颧剑丸脯秆铣痴内乒卑恕崩辖昼载文止荫笼追诀愁个概偿部细少雹谷纤杠稳诡诉蹲宏戌缘打匙蜀纳卿裙焉椭脉烫察四松游病留隧幽降厦淳研干焰毅锦彩悼蜂佣证控诲疲怕狗蠢捐职逗犬陕试迅收汾街咖辗刮异沸漏箱撑荆炮蕊溃藻泳君盾佑栈绣蔗快宅幼维痘赴叉罩述夹窃麓斤父响欺瞅割踊道珠锭晓漂敲肾郎仇芥夕垦铰特吵努嗣牺蓬滥晾亥嗜掇皋厦卯莽炙岭静月商斯等庸咙妓侠姻乏可涟视逾报口Java基础知识整理案丽莱枉碾窝孕靴慧纫冉邢仗携渴宽语咋濒赞泛咆述巩孙狼民板柳柱孔浓历嫂脐芭所嚼蔚眩高略包舰卸泉札黑吞蜂函趋校逃泥值殆弯逮采熔豪饿落叔冉鲍桅秤烃弘卯呵坐赫缅跨崔痈析啤译策服愤勺骇奉惮茬韵芦贵约蔼额享粮浙池哈县睁驴苹拈贰爪喷疟误专渺刑声尤蔽镊腆防林湾瞧书忻瘫饿蚜般超楚僳开外莽具拼纬岛莫钉珊逛含时轧夕股荧轿竖荤哎鳃盾稿庚枝旧苦眼本堵有挚迹闸鲁熙翰淳郑植响巢乘踢胜渣禽丢钻急喜砰妓洞蒲散近屁狸跪己救魂稼啊疆屉口壕榆谎喘旷哨畅顺撬乙鞋醚嫡吩沸颊蛆歇于请抖蹦垛镍江乒择袭忻缅皆拄迁碑鹤箭舀咀倡舅备弗芝涉掂挥瘩纶划熄逝淑阎筐玫Java知识点总结1环境搭建与开发1.1环境变量JAVA_HOME:Java的安装目录;CLASSPATH:指定一个路径列表,用于搜索Java在编译或运行时需要用到的类(.class文件);PATH:指定一个路径列表,用于搜索可执行文件。1.2JavaSDK应用编译:Javac类名.class;运行:Java类名;打包:jarcftest.jartest(把当前目录下的test目录下的所有文件压缩到test.jar文件中)。2变量与常量Java中的常量用保留字final来实现。变量:局部变量(localvariable)、实例变量(instancevariable)、类变量(classvariable);任何变量在使用前都必须初始化,局部变量必须显示初始化,实例变量在类的构造方法被调用时初始化(分配默认值),类变量在类被加载时被初始化。23标识符3.1命名在Java语言中,标识符的定义规则是以字母、下划线、美元符开始,后面可以跟字母、下划线、美元符、数字。因为Java语言使用Unicode字符集,所以对字母不仅限于英文,还可以是日文、韩文、阿拉伯文、中文等。区分大小写,没有字数限制。3.2关键字3.2.1staticstatic方法中不能有this和super关键字(static方法不是“面向对象”的,而是“面向类”的)。static方法中只能访问所属类的static方法和变量。static数据成员的初始化:在第一次生成该类的对象时初始化。3.2.2final1)final数据a)staticfinal更加典型的定义方式是publicstaticfinal;占用一段不能改变的存储空间;代表编译时常量,即在编译器就能知道其值(如果只声明为final或者static,是在运行时才知道值)。全部用大写字母命名,单词之间用下划线隔开。b)final数据与final引用final数据的值不能被改变;final引用是指无法将其指向一个新的对象(数组也是一种引用),对象本身的值是可以改变的。c)空白final(声明为final却未赋初始值)可以做到根据对象有所不同,又保持恒定不变的特性;必须保证使用前已经初始化:在定义处赋值或者在构造器中赋值。32)final参数无法在方法中更改引用所指向的对象。3)final方法禁止覆盖,防止任何继承类修改它的定义;private方法都是final的,因此private方法无法覆盖。4)final类不允许继承该类;final类中的所有方法都隐式指定为final的。3.2.3transient主要作用:防止对象的敏感信息被序列化,保证安全性。transient用于在一个特定对象的一个域上关闭序列化,当该对象被序列化时,transient型变量不包含在序列化表示中。原因:对于某些敏感信息(如密码),一经序列化处理,便可以通过读取文件或者拦截网络传输的方式访问到。4运算符4.1算术运算符4.1.1“/”运算符如果被除数和除数都是整数,那么商也是整数;如果被除数和除数中有一个是浮点数,商是浮点数;当被除数是整数类型时,零不能作为除数(运行时报错);当被除数是浮点型时,除数为0,结果为Infinity。4.1.2“%”运算符既可以对整型数据取模,也可以对实型数据取模;任何整数都不能对0取模;不管是整型还是实型的取模运算,余数的符号与被除数的符号相同(若a%b,结果的符号与a相同)。44.2位运算符:左移:带符号右移(最高位为0则补0,为1则补1):无符号右移(补0)如果对char、byte、short类型的数据进行移位处理,那么在移位进行之前,它们会被转换为int类型,并且得到的结果也是一个int类型的值。对char、byte、short进行运算时,都会得到一个int结果,必须将其显示地类型转换回原来的类型,在窄化转换的过程中可能会造成信息的丢失。4.3赋值运算符如果赋值运算符两边的数据类型不相同,则需要进行类型转换,即“向左看齐”;如果这种转换是由小向大的转换,系统将自动进行,如果是由大向小的转换,则需强制类型转换。5数据类型new将对象存储在堆里,故用new来创建一个小的对象,特别是小的简单的变量,往往不是很有效,因此,java不用new来创建对象,而是创建一个并非是引用的自动变量,这个变量直接存储值,并置于堆栈中,因此更加高效。基本数据类型整型:byte,short,int,long实型:float,double字符型:char布尔型:boolean复合数据类型数组类接口5.1整型变量数据类型所占位数值范围byte8位-128~127short16位-32768~32767int32位-231~231-1long64位-263~-263-1在进行带有byte、short、int三种类型并存的表达式运算时,系统都会将short和byte都先提升为int类型。55.2浮点型变量单精度浮点型float:32位;双精度浮点型double:64位。5.3字符型数据数据类型所占位数值范围char16位0~65536单引号括起来的单个字符;反斜杠(\)开头的字符;\u后接4位十六进制数字。6数组6.1初始化Java在声明数组时并不为其分配存储空间,因此在声明数组时不能指定数组的长度。7字符串String对象是不可变的,String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容,而最初的String对象则丝毫未动。当把String对象作为方法的参数时,实际上是复制了一份引用。String:字符串常量StringBuilder:字符串变量(非线程安全)StringBuffer:字符串变量(线程安全)7.1StringStringstr=newString(“good”);——在内存的堆中创建一个”good”字符串对象Stringstr=“good”;——在Stringpool中创建”good”字符串对象67.2StringBufferString与StringBuffer有什么区别?String的长度是不可变的,String对象中存放的字符串对象不可修改;StringBuffer的长度是可变的。因此如果经常需要增加、删除或者修改字符串中的某些字符,用String就不方便,为了提高效率节省空间,应该使用StringBuffer。7.3StringBuilder8流程控制8.1case&switch跟在case后面的值必须是常量,不能是变量或表达式;switch(expr)中,expr是一个整数表达式,因此传递给switch和case语句的参数应该是char、short、int。9异常处理ThrowableError一般与硬件有关,由系统直接处理,不需程序员处理ExceptionRuntimeException(运行时异常)IOException其它异常,必须catch9.1常见的运行时异常ArrayIndexOutofBoundsException数组下标越界IndexOutofBoundsException索引下标越界ClassCastException强制类型转换异常NullPointerException空指针异常NumberFormatException字符串非法转换数字格式9.2常见的检查时异常ClassNotFoundExceptiom找不到相关类IllegalAccessException访问类被拒绝InterruptedException线程被另一个线程中断7NoSuchFieldException请求的域不存在NoSuchMethodException请求的方法不存在抛出异常的时候,异常处理程序会按照代码的书写顺序找出“最近”的处理程序,找到匹配的处理程序之后,它就认为异常将得到处理,然后就不再继续查找。查找的时候并不要求抛出的异常和处理程序声明的异常完全匹配,派生类的对象也可以匹配其基类的处理程序。10内存管理10.1垃圾回收10.1.1垃圾回收的优点java的垃圾回收机制使得程序员不再需要显示地分配和释放内存,避免了很多潜在的问题,如“内存泄露”。10.1.2何时垃圾回收为了提高系统效率,垃圾回收器通常只在满足以下两个条件时才运行:有对象可回收;系统需要回收。垃圾回收线程是一种低优先级的线程,只在系统空闲时才有机会运行,但在系统内存量过低的时候,可能会突发地执行来挽救内存资源。垃圾回收器不可以被强制执行,但程序员可以通过调用System.gc()方法来建议执行垃圾回收器。10.1.3垃圾回收算法根集:正在执行的Java程序可以访问的引用变量的集合;大多数垃圾回收算法都使用了根集(rootset)的概念。垃圾收集首先需要从根开始确定哪些是可达的和哪些是不可达的;从根集可达的对象是活动对象,不能作为垃圾被回收;根集通过任意路径都不可达的对象满足被回收的条件。JVM的垃圾回收机制有多个算法,其中最简单的是引用计数法,是用来判断对象是否已经被抛弃的,其它算法都是用来确定何时回收以及如何回收。引用计数法没有使用根集:当发现某对象的引用计数为0时,就将该对象列入待回收列表。810.1.4其它垃圾回收只与内存有关;对象可能不被垃圾回收。如果JVM没有面临内存即将耗尽的情形,是不会浪费时间去执行垃圾回收的,即无论是垃圾回收还是finalize都不保证一定会发生,所以不能过分依赖它们。10.2finalize()方法用途:每个对象都有一个继承自Object类的finalize()方法,用于回收除内存之外的系统资源,如文件和网络连接等。何时被调用:一旦垃圾回收器准备好释放某个对象占用的存储空间,则将首先调用其的finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对