JavaSE面试题及其复习资料.docx
JavaSE面试题总结第一章初识JaVa11. JaVa跨平台原理(字节码文件、虚拟机)12. JaVa的平安性13. JaVa三大版本24. JaVa开发运行过程25. JaVa开发环境配置26. 什么是JYM?什么是JDK?什么是JRE?27. JaVa三种注释类型3其次章数据类型和运算符41. 8种基本数据类型及其字节数42. i+和+i的异同之处43. &和&&的区分和联系,I和II的区分和联系54. 用最有效率的方法算出2乘以8等于多少55. 基本数据类型的类型转换规则5第三章流程限制71. 三种流程限制结构72. if多分支语句和switch多分支语句的异同之处73. WhilC和dowhile循环的区分74. break和continue的作用75. 请运用递归算法计算n!86. 递归的定义和优缺点8第四章数组91. 数组的特征92. 请写出冒泡排序代码93. 请写出选择排序的代码104. 请写出插入排序的代码10第五章面对对象121. 类和对象的关系122. 面对过程和面对对象的区分123. 方法重载和方法重写(覆盖)的区分124. this和SUPCr关键字的作用135. StatiC关键字的作用(修饰变量、方法、代码块)136. final和abstract关键字的作用137. final、finallyfinalize的区分148. 写出类的六个常用方法149. PriVate/默认/protected/PUbliC权限修饰符的区分1410. 继承条件下构造方法的执行过程1511. =和CqUaIS的区分和联系1512. 多态的技能点(前提条件,向上转型、向下转型)1613. 接口和抽象类的异同之处1614. 简述JaVa的垃圾回收机制16第六章异样处理181. Error和EXCePtion的区分182. CheCkCd异样和RUntilnC异样的区分183. JaVa异样处理try-catch-finally的执行过程184. 异样处理中throws和throw的区分19第七章常用工具类201. 基本数据类型和包装类202. Integer与int的区分203. String类为什么是final的214. String、StringBufferStringBUilder区分与联系215. String类型是基本数据类型吗?基本数据类型有哪些216. Strings="Hello”;s=s+"world!”;执行后,S内容是否变更?217. StringS=newString("xyz”);创建几个StringObject?228. 下面这条语句一共创建了多少个对象:Strings=a+b+c+d;.2210.运用递归算法输出某个书目下全部文件和子书目列表23第八章集合251. JaVa集合体系结构(List、Set、COIIeCtiOn、MaP的区分和联系).252. Vector和ArrayList的区分和联系263. ArrayList和LinkedList的区分和联系264. HashMap和Hashtable的区分和联系265. HaShSet的运用和原理(hashCode()和equals()266. TrCCSet的原理和运用(COinParable和COnIParator)277. 集合和数组的比较(为什么引入集合)278. Collection和Collections的区分27第九章IO流错误!未定义书签。1. 输入流和输出流联系和区分,节点流和处理流联系和区分错误!未定义书签。2. 字符流字节流联系区分;什么时候运用字节流和字符流?错误!未定义书签。3. 列举常用字节输入流和输出流并说明其特点,至少5对。错误!未定义书签。4. 说明缓冲流的优点和原理错误!未定义书签。5. 序列化的定义、实现和留意事项错误!未定义书签。6. 运用IO流完成文件夹复制(结合递归)错误!未定义书签。第十章多线程错误!未定义书签。1. 进程和线程有什么联系和区分?错误!未定义书签。2. 创建线程的两种方式分别是什么,优缺点是什么?错误!未定义书签。3. JaVa创建线程后,调用Start()方法和run()的区分错误!未定义书签。4. 线程的生命周期错误!未定义书签。5. 如何实现线程同步?错误!未定义书签。6. 关于同步锁的更多细微环节错误!未定义书签。7. 简述SIeeP()和Wait()有什么区分?错误!未定义书签。8. Java中实现线程通信的三个方法的作用是什么?错误!未定义书签。第十一章网络编程错误!未定义书签。1. IP地址和端口号错误!未定义书签。2. 介绍OSl七层模型和TCP/IP模型错误!未定义书签。3. TCP协议和UDP协议的比较错误!未定义书签。4. 什么是Socket编程错误!未定义书签。5. 简述基于TCP和UDP的Socket编程的主要步骤错误!未定义书签。第十二章反射技术错误!未定义书签。1. JaVa反射技术主要实现类有哪些,作用分别是什么?错误!未定义书签。2. ClaSS类的作用?生成ClaSS对象的方法有哪些?.错误!未定义书签。3. 反射的运用场合和作用、及其优缺点错误!未定义书签。第十三章设计模式入门错误!未定义书签。1. 什么是设计模式,设计模式的作用。错误!未定义书签。2. 面对对象设计原则有哪些错误!未定义书签。3. 23种经典设计模式都有哪些,如何分类。错误!未定义书签。4. 写出简洁工厂模式的示例代码错误!未定义书签。5. 写出单例模式的示例代码错误!未定义书签。6. 请对你所熟识的一个设计模式进行介绍错误!未定义书签。第一章初识Java1.JaVa跨平台原理(字节码文件、虚拟机)WndowsTC语Me程过程JaVa语言编程过程JaVa源程序(扩展各jaa)JaV泞文件(扩展g.dass)石礴拟WindOwS下JaV行节码解程程序1.inuxTJaV行摊)解释程序能直将解释Java5的CPUWindowsILinux操礴统Il操作孤I1) C/C+语言都干脆编译成针对特定平台机器码。假如要跨平台,须要运用相应的编译器重新编译。2) JaVa源程序(Java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再说明成机器码运行。说明是通过JaVa虚拟机来执行的。3)字节码文件不面对任何详细平台,只面对虚拟机。4) Java虚拟机是可运行Java字节码文件的虚拟计算机。不同平台的虚拟机是不同的,但它们都供应了相同的接口。5) JaVa语言具有一次编译,到处运行的特点。就是说编译后的.class可以跨平台运行,前提是该平台具有相应的JaVa虚拟机。但是性能比C/C+要低。6) Java的跨平台原理确定了其性能没有C/C+高2 .Java的平安性语言层次的平安性主耍体现在:1) Java取消了强大但又危急的指针,而代之以引用Il由于指针可进行移动运算,指针可随意指向一个内存区域,而不管这个区域是否可用,这样做是危急的,因为原来这个内存地址可能存储着重要数据或者是其他程序运行所占用的,并且运用指针也简洁数组越界。2) 垃圾回收机制:不须要程序员干脆限制内存回收,由垃圾回收器在后台自动回收不再运用的内存。避开程序遗忘刚好回收,导致内存泄露。避开程序错误回收程序核心类库的内存,导致系统崩溃。3) 异样处理机制:JaVa异样机制主要依靠于try、catch、finally、throw、throws五个关键字。4) 强制类型转换:只有在满足强制转换规则的状况下才能强转胜利。底层的平安性可以从以下方面来说明Java在字节码的传输过程中运用了公开密钥加密机制(PKC)。在运行环境供应了四级平安性保障机制:字节码校验器类装载器-运行时内存布局文件访问限制3 .JaVa三大版本Java2平台包括标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本:StandardEditiOn(标准版)J2SE包含那些构成Java语言核心的类。比如:数据库连接、接口定义、输入/输出、网络编程EnterPriSeEdition(企业版)J2EE包含J2SE中的类,并且还包含用于开发企业级应用的类。比如:EJB,servlet,JSP、XML、事务限制MieroEdition(微缩版)J2ME包含J2SE中一部分类,用于消费类电子产品的软件开发。比如:呼机、智能卡、手机、PDA、机顶盒他们的范围是:J2SE包含于J2EE中,J2ME包含了J2SE的核心类,但新添加了一些专有类应用场合,APl的覆盖范围各不相同。4 .Java开发运行过程在安装好JDK并配置好path,classpath后开发运行步骤如下:1、可以用任何文本编辑器创建并编辑JaVa源程序,JaVa源程序用”java”作为文件扩展名2、编译JaVa源程序编译器,运用吩咐"javac”编译“java源程序文件名Java”。最终编译成JaVa虚拟机能够明白的指令集合,且以字节码的形式保存在文件中。通常,字节码文件以“.class”作为扩展名。3、执行java程序,运用“java”吩咐运行CIaSS(字节码)文件“java文件名",JaVa说明器会读取字节码,取出指令并且翻译成计算机能执行的机器码,完成运行过程。5 .Java开发环境配置详细配置步骤如下:0)找到自己的jdk安装路径,如:C:Javajdkl.7.0_60bin1)右击桌面“我的电脑”,选择“属性”2)选中“高级系统设置”一高级一环境变量设置3)在系统变量中找到“path”并选中,点击“编辑”,4)变量值栏按键盘“home”键,输入英文的“;”5)将第0)步打算的路径复制过来就行。点一些列“确定”完成配置6,什么是JVM?什么是JDK?什么是JRE?1、JVM:JVMJavaVirtualMachine(JaVa虚拟机)的缩写,它是整个java实现跨平台的最核心的部分,全部的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说CIaSS并不干脆与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序说明给本地系统执行。JVM是JaVa平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行时操作不同的内存区域。JVM通过抽象操作系统和CPU结构,供应了一种与平台无关的代码执行方法,即与特殊的实现方法、主机硬件、主机操作系统无关。JVM的主要工作是说明自己的指令集(即字节码)到CPU的指令集或对应的系统调用,爱护用户免被恶意程序骚扰。JVM对上层的JaVa源文件是不关切的,它关注的只是由源文件生成的类文件(.class文件)。2、JRE:JRE是javarunlimeenvironment(java运行环境)的缩写。光有JVM还不能让ClaSS文件执行,因为在说明ClaSS的时候JVM须要调用说明所须要的类库lib。在JDK的安装书目里你可以找到jre书目,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,Iib中则是jvm工作所须要的类库,而jvm和Iib和起来就称为jre。所以,在你写完java程序编译成.class之后,你可以把这个.class文件和jre一起打包发给挚友,这样你的挚友就可以运行你写程序了(jre里有运行.class的javaexe)。JRE是SUn公司发布的一个更大的系统,它里面就有一个JVM。JRE就与详细的CPU结构和操作系统有关,是运行JaVa程序必不行少的(除非用其他一些编译环境编译成.exe可执行文件),JRE的地位就象一台PC机一样,我们写好的的n32应用程序须要操作系统帮我们运行,同样的,我们编写的JaVa程序也必须要JRE才能运行。3、JDK:JDK是javadevelopmentkit(java开发工具包)的缩写。每个学java的人都会先在机器上装一个JDK,那让我们看一下JDK的安装书目。在书目下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的是以下四个文件夹:bin、include,lib、jre0现在我们可以看出这样一个关系,JDK包含JRE,而JRE包含JVM。bin:最主要的是编译器(javac.exe)include:java和JVM交互用的头文件lib:类库jre:java运行环境(留意:这里的bin、Iib文件夹和jre里的bin、Iib是不同的)总的来说JDK是用于java程序的开发,而jre则是只能运行CIaSS而没有编译的功能。eclipse,idea等其他IDE有自己的编译器而不是用JDKbin书目中自带的,所以在安装时你会发觉他们只要求你选jre路径就Ok了。4、JDK,JRE,JVM三者关系概括如下:Jdk是JAVA程序开发时用的开发工具包,其内部也有JRE运行环境JRE0JRE是JAVA程序运行时须要的运行环境,就是说假如你光是运行JAVA程序而不是去搞开发的话,只安装JRE就能运行己经存在的JAVA程序了。JDk、JRE内部都包含JAvA虚拟机JVM,JAVA虚拟机内部包含很多应用程序的类的说明器和类加载器等等。7 .Java三种注释类型共有单行注释、多行注释、文档注释3种注释类型。运用如下:1、单行注释,采纳“”方式.只能注释一行代码。如:类成员变量2、多行注释,采纳方式,可注释多行代码,其中不允许出现嵌套。如:/System.out.println("a");System.out.println("b");System.out.println("c");*/3、文档注释,采纳"/*.*/"方式。如:/* 子类Dog* ©authorAdministrator* /publicclassDogextendsAnimal(第二章数据类型和运算符1.8种基本数据类型及其字节数才攵据类型关键字字节数数值型整数型byte1short2int4long8浮点型float4double8布尔型bleanI(位)字符型char22.i+和+i的异同之处共同点:I、i+和Hi都是变量自增1,都等价于i=i+l2、假如i+,+i是一条单独的语句,两者没有任何区分3、i+和+i的运用仅仅针对变量。5+和+5会报错,因为5不是变量。不同点:假如i+,+i不是一条单独的语句,他们就有区分i+:先运算后增1。如:intx=5;inty=x+;System.out.println("x="+x+'y="+y);以上代码运行后输出结果为:x=6,y=5+i:先增1后运算。如:intx=5;inty=+x;System.out.println("x="+x+",y="+y);以上代码运行后输出结果为:x=6,y=63.&和&&的区分和联系,I和11的区分和联系&和&&的联系(共同点):&和&&都可以用作逻辑与运算符,但是要看运用时的详细条件来确定。操作数1&操作数2,操作数1&&操作数2,表达式1&表达式2,表达式1&&表达式2,状况1:当上述的操作数是boolean类型变量时,&和&&都可以用作逻辑与运算符。状况2:当上述的表达式结果是boolean类型变量时,&和&&都可以用作逻辑与运算符。表示逻辑与(and),当运算符两边的表达式的结果或操作数都为true时,整个运算结果才为true,否则,只要有一方为false,结果都为false。&和&&的区分(不同点):(1)、&逻辑运算符称为逻辑与运算符,&&逻辑运算符称为短路与运算符,也可叫逻辑与运算符。对于&:无论任何状况,&两边的操作数或表达式都会参与计算。对于&&:当&&左边的操作数为false或左边表达式结果为false时,&&右边的操作数或表达式将不参与计算,此时最终结果都为false。综上所述,假如逻辑与运算的第一个操作数是false或第一个表达式的结果为false时,对于其次个操作数或表达式是否进行运算,对最终的结果没有影响,结果确定是false。推介平常多运用&&,因为它效率更高些。(2)、&还可以用作位运算符。当&两边操作数或两边表达式的结果不是boolean类型时,&用于按位与运算符的操作。和I的区分和联系与&和&&的区分和联系类似4 .用最有效率的方法算出2乘以8等于多少运用位运算来实现效率最高。位运算符是对操作数以二进制比特位为单位进行操作和运算,操作数和结果都是整型数。对于位运算符“<<",是将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,位运算CPU干脆支持的,效率最高。所以,2乘以8等于几的最效率的方法是2«3。5 .基本数据类型的类型转换规则基本类型转换分为自动转换和强制转换。自动转换规则容量小的数据类型可以自动转换成容量大的数据类型,也可以说低级自动向高级转换。这儿的容量指的不是字节数,而是指类型表述的范围。自动类彻转换byte红色代3百三TE模先IlWL1IOng强制转换规则:高级变为低级须要强制转换。如何转换:(1) S赋值运算符“=”右边的转换,先自动转换成表达式中级别最高的数据类型,再进行运算。(2)、赋值运算符“=”两侧的转换,若左边级别右边级别,会自动转换;若左边级别=右边级别,不用转换;若左边级别<右边级别,需强制转换。(3)、可以将整型常量干脆赋值给byte,short,char等类型变量,而不须要进行强制类型转换,前提是不超出其表述范围,否则必需进行强制转换。第三章流程限制1.三种流程限制结构其流程限制方式采纳结构化程序设计中规定的三种基本流程结构,即:依次结构、分支结构和循环结构耐用介支循环2. if多分支语句和switch多分支语句的异同之处相同之处:都是分支语句,多超过一种的状况进行推断处理。不同之处:1) SWITCH更适合用于多分支状况,就是有很多种状况须要推断处理,推断条件类型单一,只有一个入口,在分支执行完后(假如没有break跳出),不加推断地执行下去;而ifelseifelse多分枝主要适用于分支较少的分支结构,推断类型不是单一,只要一个分支被执行后,后边的分支不再执行。2) SWitCh为等值推断(不允许比如>=<=),而if为等值和区间都可以,if的运用范围大。3. while和do-while循环的区分WhiIe先推断后执行,第一次推断为false,循环体一次都不执行d。WhiIe先执行后推断,最少执行1次。假如while循环第一次推断为true,则两种循环没有区分。4. break和continue的作用break:结束当前循环并退出当前循环体。break还可以退出switch语句continue:循环体中后续的语句不执行,但是循环没有结束,接着进行循环条件的推断(for循环还会i+)。ConIinUe只是结束本次循环。5请运用递归算法计算n!publicclassTestpublicintfactorial(intn)if(n=1Hn=0)returnn;elsereturnn*factorial(n-1);)publicstaticvoidmain(Stringargs)Testtest=newTest();System.out.println(testfactorial(6);)6递归的定义和优缺点递归算法是一种干脆或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是特别有效的,它往往使算法的描述简洁而且易于理解。递归算法解决问题的特点:(1)递归就是在过程或函数里调用自身。(2)在运用递归策略时,必需有一个明确的递归结束条件,称为递归出口。(3)递归算法解题通常显得很简洁,但运行效率较低。所以一般不提倡用递归算法设计程序。(4)在递归调用的过程当中系统为每一层的返回点、局部量等开拓了栈来存储。递归次数过多简洁造成栈溢出等。所以一般不提倡用递归算法设计程序。第四章数组1.数组的特征D数组是(相同类型数据)的(有序)(集合)2) 数组会在内存中开拓一块连续的空间,每个空间相当于之前的一个变量,称为数组的元素element3) 元素的表示数组名卜.标或者索引scores7scores0scores94) 索引从0起先5) 每个数组元素有默认值double0.0booleanfalseint06) 数组元素有序的,不是大小依次,是索引的依次7) 数组中可以存储基本数据类型,可以存储引用数据类型;但是对于一个数组而言,数组的类型是固定的,只能是一个8) Iength:数组的长度9) 数组的长度是固定的,一经定义,不能再发生变更(数组的扩容)2,请写出冒泡排序代码10) 泡排序算法publicclassTestBubbleSortpublicstaticvoidsort(inta)inttemp=0;/外层循环,它确定一共走几趟for(inti=0;i<a.length-l;+i)内层循环,它确定每趟走一次for(intj=0;j<a.length-i-l;+j)假如后一个大于前一个lf(aO+l<aD)换位temp=aj;aj=aj+l;aj+1=temp;)publicstaticvoidsort2(inta)inttemp=0;for(inti=0;i<a.length-l;+i)通过符号位可以削减无谓的比较,假如已经有序了,就退出循环intflag=0;for(intj=0;j<a.length-l-i;+j)if(aD÷l<aO)temp=ajja11=aj+l;aj+1=temp;11ag=1;)Jif(flag=0break;)3 .请写出选择排序的代码publicclassTestSelectSortpublicstaticvoidsort(intarr)inttemp=O;for(inti=O;i<arr.Iength-1;i+)/认为目前的数就是最小的,记录最小数的下标intminindex=i;for(intj=i+1;j<arr.length;j+)if(arrminlndex>arrj)(/修改最小值的下标minlndex=j;)/当退出for就找到这次的最小值if(i!=minlndex)temp=arri;arri=arrminlndex;arrminlndex=temp;)4 .请写出插入排序的代码publicclassTestInsertSortpublicstaticvoidsort(intarr)i11ti,j;for(i=1;i<arr.length;i+)inttemp=arri;for(j=i;j>O&&temp<arrj-1;j-)arrj=arrj-1;arrj=temp;5,可变参数的作用和特点总结1:可变参数1 .可变参数的形式.2 .可变参数只能是方法的形参3 .可变参数对应的实参可以0,1,2.个,也可以是一个数组4 .在可变参数的方法中,将可变参数当做数组来处理5 .可变参数最多有一个,只能是最终一个6 .可变参数好处:便利简洁削减重载方法的数量7 .假如定义了可变参数的方法,不允许同时定义相同类型数组参数的方法总结2:数组做形参和可变参数做形参联系和区分联系:1 .实参都可以是数组:2.方法体中,可变参数当做数组来处理区分:1 .个数不同可变参数只能有一个数组参数可以多个2 .位置不同可变参数只能是最终一个数组参数位置随意3 .实参不同可变参数实参可以0,1,2.个,也可以是一个数组,数组的实参只能是数组第五章面对对象1.类和对象的关系类是对象的抽象,而对象是类的详细实例。类是抽象的,不占用内存,而对象是详细的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。类和对象好比图纸和实物的关系,模具和铸件的关系。比如人类就是一个概念,人类具有身高,体重等属性。人类可以做吃饭、说话等方法。小明就是一个详细的人,也就是实例,他的属性是详细的身高200cm,体重180kg,他做的方法是详细的吃了一碗白米饭,说了“12345”这样一句话。2,面对过程和面对对象的区分两者都是软件开发思想,先有面对过程,后有面对对象。在大型项目中,针对面对过程的不足推出了面对对象开发思想。比方蒋介石和毛泽东分别是面对过程和面对对象的杰出代表,这样充分说明,在解决复制问题时,面对对象有更大的优越性。面对过程是蛋炒饭,面对对象是盖浇饭。盖浇饭的好处就是“菜”“饭”分别,从而提高了制作盖浇饭的敏捷性。饭不满足就换饭,菜不满足换菜。用软件工程的专业术语就是“可维护性”比较好,“饭”和“菜”的耦合度比较低。区分1 .编程思路不同:面对过程以实现功能的函数开发为主,而面对对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完胜利能。2 .封装性:都具有封装性,但是面对过程是封装的是功能,而面对对象封装的是数据和功能。3 .面对对象具有继承性和多态性,而面对过程没有继承性和多态性,所以面对对象优势是明显。3,方法重载和方法重写(覆盖)的区分英文位置不同作用不同重载overload同一个类中在一个类里面为一种行为供应多种实现方式并提高可读性重写override子类和父类间父类方法无法满足子类的要求,子类通过方法重写满足要求修饰符返回值方法名参数抛出异样重载无关无关相同不同无关重写大于等于小于等于相同相同小于等于4 .this和super关键字的作用this是对象内部指代自身的引用1) this可以调用成员变量,通常用于解决成员变量和局部变量同名冲突2) this可以调用成员方法3) this可以在构造方法中调用重载的构造方法,且必需是构造方法的第条语句。SUPer代表对当前对象的干脆父类对象的引用1)SUPer可以调用干脆父类的成员变量(留意权限修饰符的影响,比如不能访问PriVate成员)2)SUPer可以调用干脆父类的成员方法(留意权限修饰符的影响,比如不能访问private成员)3)SUPer可以调用干脆父类的构造方法,只限构造方法中运用,且必需是第一条语句。5StatiC关键字的作用(修饰变量、方法、代码块)SIaliC可以修饰变量、方法、代码块和内部类1. static属性属于这个类全部,即由该类创建的全部对象共享同一个static属性。可以对象创建后通过对象名.属性名和类名.属性名两种方式来访问。也可以在没有创建任何对象之前通过类名.属性名的方式来访问。.static变量和非static变量的区分(都是成员变量,不是局部变量)1.在内存中份数不同不管有多少个对象,StatiC变量只有1份。对于每个对象,实例变量都会有单独的一份Static变量是属于整个类的,也称为类变量。而非静态变量是属于对象的,也称为实例变量2.在内存中存放的位置不同静态变量存在方法区中,实例变量存在堆内存中*3 .访问的方式不同实例变量:对象名.变量名StULname="小明明";静态变量:对象名.变量名StULSChooIName="西二旗小学“;不举荐如此运用类名.变量名StUdent.SchooIName="东三旗小学";举荐运用4 .在内存中安排空间的时间不同实例变量:创建对象的时候才安排了空间。静态变量:第一次运用类的时候StUdentSChOOIName="东三旗小学或者Studentstul=newStUdent("小明男",20,98);2. static方法也可以通过对象名.方法名和类名.方法名两种方式来访问3. static代码块。当类被第一次运用时(可能是调用static属性和方法,或者创建其对象)执行静态代码块,且只被执行一次,主要作用是实现StatiC属性的初始化。4. static内部类:属于整个外部类,而不是属于外部类的每个对象。不能访问外部类的非都态成员(变量或者方法),.可以访问外部类的静态成员6final和abstract关键字的作用final和abstract是功能相反的两个关犍字,可以对比记忆1) abstract可以用来修饰类和方法,不能用来修饰属性和构造方法;运用abstract修饰的类是抽象类,须要被继承,运用abstract修饰的方法是抽象方法,须要子类被重写。2) final可以用来修饰类、方法和属性,不能修饰构造方法。运用final修饰的类不能被继承,运用final修饰的方法不能被重写,运用final修饰的变量的值不能被修改,所以就成了常量。3) 特殊留意:final修饰基本类型变量,其值不能变更。但是final修饰引用类型变量,栈内存中的引用不能变更,但是所指向的堆内存中的对象的属性值照旧可以变更。例如classTest(publicstaticvoidmain(Stringargs)finalDogdog=newDogr欧欧”);dog.name="美美”;/正确dog=newDog(“亚亚");错误7 .final>finally>finalize的区分1) final修饰符(关键字)假如一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。将变量或方法声明为final,可以保证它们在运用中不被变更。被声明为final的变量必需在声明时给定初值,而在以后的引用中只能读取,不行修改。被声明为final的方法也同样只能运用,不能重载。2) finally在异样处理时供应finally块来执行任何清除操作。假如有finally的话,则不管是否发生异样,finally语句都会被执行。3) finalize方法名。Java技术允许运用finalize。方法在垃圾收集器将对象从内存中清除出去之前做必要清理工作。finalized方法是在垃圾收集器删除对象之前被调用的。它是在ObjeCt类中定义的,因此全部的类都继承了它。子类覆盖finalized方法以整理系统资源或者执行其他清理工作。8 .写出java.lang.Object类的六个常用方法1. publicbooleanequals(java.lang.Object)比较内容2. publicnativeinthashCode()哈希码3. publicjava.Iang-StringtoString()变成字符串4. publicfinalnativejava.Iang1CIassgetClass()获得类结构信息5. 垃圾回收前执行的方法6. 克隆7. 多线程中等待功能8. publicfinalnativevoidnotify()多线程中唤醒功能9. publicfinalnativevoidnotifyAII()多线程中唤醒全部等待线程的功能9 .PriVate/默认/protected/PUbIiC权限修饰符的区分访问限制publicprotected默认private同一类中成员是是是是同一包中其它类是是是不同包中的子类是是不同包中对非子类是类的访问权限只有两种public公共的可被同一项目中全部的类访问。(必需与文件名同名)default默认的可被同一个包中的类访问。成员(成员变量或成员方法)访问权限共有四种:public公共的可以被项目中全部的类访问。(项目可见性)protected受爱护的可以被这个类本身访问:同一个包中的全部其他的类访问;被它的子类(同一个包以及不同包中的子类)访问。(子类可见性)default默认的被这个类本身访问;被同一个包中的类访问。(包可见性)private私有的只能被这个类本身访问。(类可见性)10 .继承条件下构造方法的执行过程继承条件下构造方法的调用规则如下:> 假如子类的构造方法中没有通过SUPer显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种状况下,写不写“super();''语句,效果是一样的。> 假如子类的构造方法中通过SUPer显式调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法。> 假如子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。> 特殊留意的是,假如存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,始终到执行顶级父类ObjeCt类的无参构造方法为止。11 .=和equals的区分和联系a)基本类型,比较的是值b)引用类型,比较的是地址c)不能比较没有父子关系的两个对象equals()a)系统类一般已经覆盖了equals。,比较的是内容。b)用户自定义类假如没有覆盖equals。,将调用父类的equals(比如是ObjeCD,而ObjeCl的equals的比较是地址(relum(this=obj);)c)用户自定义类须要覆盖父类的equals。留意:ObjeCl的=和equals比较的都是地址,作用相同12 .多态的技能点(前提条件,向上转型、向下转型)实现多态的三个条件D继承的存在:(继承是多态的基础,没有继承就没有多态)2)子类重写父类的方法。(多态下会调用子类重写后的方法)3)父类引用变量