黑马程序员java培训就业班笔记前十一天总结.doc_第1页
黑马程序员java培训就业班笔记前十一天总结.doc_第2页
黑马程序员java培训就业班笔记前十一天总结.doc_第3页
黑马程序员java培训就业班笔记前十一天总结.doc_第4页
黑马程序员java培训就业班笔记前十一天总结.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

-Java基础 第一阶段学习总结一、Java语言特点。1、 Java是一种面向对象编程的语言,也是一种面向Internrt编程的语言,基于C+,安全可靠。2、 它具有跨平台性,所谓的平台是指操作系统(并不是指所有的平台的就是操作系统),为什么它能具有跨平台型,因为JVM出现,只要在计算机上安装JVM就可以运行不同的java程序,JVM:能解释java语言的程序。也正因JVMjava才具备了良好的移植性。3、 Java的三种技术架构:1、 javaSE 标准型,是为开发桌面和商务应用程序提供解决方案的。2、 javaEE 企业版,是为了开发企业环境下的应用程序提供的解决方案3、 javaME 小型版,是为了开发电子消费品和嵌入式设备提供的解决方案。Java语言环境搭建。JRE java runntime enviroment 运行环境,包括jVM 和java程序所需的核心类库JDk java development kit java 开发工具包,是专门提供java开发人员使用的编译工具,javac.exe javadoc.exe打包工具总的说来,就是将有JDk开发的程序交给JRE去运行。环境变量的等搭建三个步骤:下载并安装JDK 配置环境变量、用javac在dos控制台验证Path:作用:记录要执行程序的所在路径。目的:为了方便在任何情况下都能执行应用程序。区别:不用找路径了,windows找路径。有三种方式:1、在我的电脑环境变量里面配置2、 set path临时配置,set path=删除3、 自定义比如JAVA_HOME注意:定义环境变量的时候尽量定义在前面,这样可以系统从开始向后面执行的。不要定义用户级环境变量,因为只有当前用户可以使用,定义系统级环境变量,所有的用户都可以使用。在原有基础上加新值:set path=E:javaJDKjdk1.7.0_03bin%path%在原有jdk基础上添加新的JDK;直接后面用%即可。Class path:作用:告诉jVM要执行的java类文件所在路径。Set classpath:临时配置Set classpath=删除注意:classpath配置环境变量时,后面可以加分号,和不加分号,区别在于前者当JVM到指定目录查找java类文件找不到时,它会自动到当前目录下查找,一般情况下建议不用。Java语法基础。|-常量&变量,进制、表示符、关键字常量:不能改变的数值,后期学到一般都用final关键字修饰。给它起名字时所有的字母全部大写。多个单词组成时用_连接。变量:不确定的数值,将它进行存储,也就是在内存中开辟存储空间。在开辟空间时要明确数据类型、变量名称、数据来完成。常见疑问:1、 为什么要定义变量?用来不断的存放同一类型的数据,并且可以重复使用。2、 什么时候定义变量?当数据不确定的时候,3、 怎么使用变量?数据类型 变量名=初始化值。4、 八种常见的数据类型,以及默认值,所占空间大小。5、 自动类型转换、强制类型转换、自动类型提升进制:是一种计数的方式,Byte 字节=8个二进制,最小的单元就bit为;常用的进制有二进制、八进制、十进制、十六进制注意:要熟练掌握各个进制之间的转换关系以及表现形式,比如说八进制的数据当中是没有7以上的数据出现的,十六进制当中的大于9的用字母表示,熟练掌握后面学到的结合进制的查表法的思想。标示符:程序当中定义的一些名称,比如类名规则:0-9数字、a-z26个大小写字母、_ $1、 数字不能开头、2、 不能使用关键字3、 严格区分大小写Java当中的一些常用规范:1、 包:多单词组成时,全部小写2、 类名接口名:多单词组成时,所有的单词首字母大写3、 变量名:多单词组成时,第二个单词首字母大写4、 常量名:所有的字母大写,用下划线连接注意:对于表示符在笔试题中经常出现。牢记关键字:后面单个学到不做过多总结注意:main不是关键字,以及和c+关键字的区别|-注释Java中三种注释方式:1、 /单行注释:单行注释里面可以嵌套单行注释,也可以嵌套多行注释2、 /*/多行注释:多行注释里面可以嵌套单行注释,不可以欠他多行注释3、 /*/段落注释,这是java特有的,通过javadoc工具用来对文档进行提取,生成说明文档。注意:在平时的书写代码过程中一定要写注释,养成良好的习惯,面试如果有上机题一定要写上注释。|-运算符算术运算符:+ - * / % + - 算术运算符的注意问题如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论。对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 例如:int x=3510;x=x/1000*1000; x的结果是?“+”除字符串相加功能外,还能把非字符串转换成字符串 ,例如:System.out.println(5+5=+5+5);/打印结果是?赋值运算符:= += -= *= /=示例:int a,b,c; a=b=c =3;int a = 3; a+=5;等同运算a=a+5;思考:short s = 3; /首先short对3进行自身的判断,看是否在short的取值范围之内,在的话先转换,再去掉高位,直接赋值,s=s+2;不做转换,是两次运算,编译失败s+=2; 同s=3;有什么区别? 比较运算符: = = !=注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。注2:比较运算符“=”不能误写成“=” 。逻辑运算符:& | ! & | 熟悉各个运算符的特点,重点&于&的区别。|和|的区别逻辑运算符用于连接布尔型表达式,在Java中不可以写成3x3 & x6 。“&”和“&”的区别:单&时,左边无论真假,右边都进行运算;双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。“|”和“|”的区别同理,双或时,左边为真,右边不参与运算。异或( )与或( | )的不同之处是:当左右都为true时,结果为false。位运算符:熟悉各个位运算的特点以及作用。 & | 三元运算符:可以if判断语句进行互换,但是一定要有运算结果的时候才可以(条件表达式)?表达式1:表达式2;如果条件为true,运算后的结果是表达式1;如果条件为false,运算后的结果是表达式2;|-语句流程控制语句:1、if的三种格式:If(条件表达式)执行语句If(条件表达式)执行语句else执行语句If(s)else if()else if()注意:if else和三元运算符是可以互相转换的,以及大括号的取舍。2、switch语句:格式:switch(表达式)Case 取值1:执行语句;Break;Case取值2:执行语句:Break;.Default:缺省或者默认Break;特点:1、选择的数据类型有限:byte、short、int、char2、里面是无序的,case和default都可以,但是执行顺序是读取第一个case;3、结束switch语句的两种情况,遇到break和执行到switch语句结束。4、如果匹配case或者default没有对应的break;那么程序会继续向下执行,运行可以执行的语句,知道遇到break或者switch结束语句为止。If和switch语句的应用:If:1、对具体值进行判断2、对区间进行判断。3、对运算结果是boolean类型的表达式进行判断。Switch:1、对具体的值进行判断2、值的个数通常都是固定的。对于几个固定的值进行判断,建议使用switch语句,因为swtich语句将具体的答案加载进内存中,效率会高些。3、循环语句:While(条件表达式)执行语句控制循环次数特点:先判断条件,只有条件满足才执行循环体与if的语句的区别:int x=1; if(x3) System.out.println(x=+x); int x=1; while(x3) System.out.println(x=+x); If控制的语句,首先在内存中开辟空间,变量为x对它进行初始化为1,if控制语句判断,x3,条件满足,打印x。只判断一次,当条件满足的时候执行执行语句,while控制语句,会无限循环下去。与do while()语句的区别:Do while:先执行循环体,再判断条件,条件满足再仅需执行循环体。不管条件是否满足它都要执行一次。与for的区别:其实就是变量的作用域的问题,for循环当中编译变量的作用只能在相应的区域中起作用,超出了代码块就不行,while循环中变量是定义在while循环体外面的,当while循环结束变量还存在在内存中。如果变量仅仅作为控制循环增量就用for循环,因为循环结束后变量在内存中释放,相对优化内存。特点:1、for和while是可以互换的。2、格式上不同,在使用上也有不同,如果需要通过变量来对循环进行控制,该变量只作为循环增量的存在的时候用for循环。3、for语句执行完毕后,该变量在内存中就被释放。什么时候用:当对某些语句执行很多次时,就用循环结构:当对一个条件进行一次判断时,可以使用if语句当对一个条件进行多次判断时,可以使用while语句。重点掌握:1、for嵌套循环:流程步骤,以及应用。大圈套小圈的思想。2、break和continue的区别:Break:应用范围:选择结构和循环结构作用:用于跳出循环,用到此关键字,跳出对应的循环,eg:带标记的while循环注意:break单独存在的时,下面不要定义其他语句,执行不到。Eg:for()Break;Sop();编译错误,因为输出语句执行不到,如果出现在嵌套循环中,break想要跳出制定的循环,可以通过定义标号来完成。Eg:W:for()M:for()Break w:Continue:只用在循环结构中,其他地方用不了作用:结束本次循环,继续下次循环。注意:continue单独存在时下面不可以有任何语句因为执行不到。Eg:For()Continue;编译失败。Sop();Continue;Eg:For(.)If(x%2=0)Continue;Sop(x=+x);1、首先初始化x=0;判断条件X11;满足条件2、执行判断语句if(x%2=0) ,0%2=0?不满足,继续循环,执行x+3、x+后x=1;执行判断语句x11;满足条件,执行判断语句if()4、1%2=0满足条件,执行输出语句打印x=1;执行x+5、执行判断语句x=211;满足条件,执行if()6、2%2=0?不满足,执行continue语句,继续循环,执行X+.结果:13579|-函数1、函数的定义:函数一个定义在函数中的具有独立功能的程序,函数中只能调用函数,不能再定义函数,是为了提高了代码的复用性,对代码进行的抽取,将这部分代码定义成一个独立的功能,方便日后使用。2、有什么特点:1、将功能代码进行封装2、便于对该功能的复用3、只有被调用的时候才被执行4、提高了代码的复用性。3、什么时候用:4、应该怎么用:1、既然是函数一个独立的功能,那么该功能多的运算结果是什么首先要明确即明确函数的返回值的类型。2、再明确在定义好功能的过程中是否需要未知的内容参与运算,这是在明确函数的参数列表。5、注意:1、当函数运算后,如果没有具体的返回值时,这时返回值类型需要用一个关键字来标注,该关键字是void,代表函数没有具体的返回值情况,此时函数中的return语句可以省略不写,如果 函数有具体的返回值了性,函数中的return语句必须写、2、把函数写在主函数里面,函数只能调用函数,不能再函数中定义函数。、6、重载:同一个函数的重复载入,overload好处:提高了代码的复用性,方便用户使用。什么时候用?当定义的功能想用,但参与运算的未知内容不同,那么这时就定义一个函数名称,以表示功能方便阅读。怎么判断函数是否重载?1、查看参数列表中元素的个数是否相同?2、个数相同的情况下查看形式参数是否想用?要注意顺序。|-数组|-常见操作:最值,排序,折半。¥最大值:定义一个功能完成获取数组中最大值的动作。定义一个函数来体现。1,确定结果:整数数组中的最大值,int。2,确定未知:数组是未知的,参数列表中有一个参数,数组类型 int具体怎么功能细节如何实现呢?思路:1,对数组中的元素进行比较,将比较后比较大的值进行记录,并参与下一次比较。当数组中的元素都比较完成后,最大值就已经被记录下来了。2,每次比较的较大的值不确定,定义一个变量进行记录,该变量如何初始化呢?只要初始化为数组中的任意一个元素即可。3,应该让数组中的元素自动和该变量记录的元素进行比较。所以可以使用遍历,获取出数组中的每一个元素。4,当遍历到的元素比较变量中的记录的元素大,用该变量记录住更大的元素。5,遍历结束后,变量中存储的就是数组中的最大值。实现代码:Public static int getMax(int arr)Int max=0;For(int x=0;xarrmax)Max=x;Return arrmax;选择排序:实现代码:Public static void selectSort(int arr)For(int x=0;xarr.length-1;x+)For(int y=x+1;xarry)Int temp=arrx;Arrx=arryy;Arry=temp;优化后的选择排序实现代码:Public static void selectSort_2(int arr)Int num=arrx;Int index=x;For(int x=0;xarr.length-1;x+)For(int y=x+1;yarry)Num=arry;Index=y;If(index!=x)/位置置换。冒泡排序:Public static void bubbleSort(int arr)For(int x=0;xarr.length-1;x+)For(int y=0;yarry+1)位置置换。折半查找:Public static int binarySearch(int arr,int key)Int min,max,mid;Min=0;Max=arr.length-1;Mid=(min+mid)1;While(arrmid!=key)If(keyarrmid)Min=mid+1;If(keymax)Return -1;Mid=(min+mid)1;Return mid;二、面向对象|-面向对象特点。1,继承 由来:当多个类中含有相同的属性和行为时,这时就把这些相同的属性和行为向上抽取,单独的封装这一个类,这样这些类就不用去创建者这些属性或行为了,只要继承这个类即可,父类称为超类或者基类,里面封装的是最基本属性和方法。好处:提高了代码的复用性是类与类之间产生了关系,这是多态的前提。使用一个继承体系的技巧:1、查看顶层内容了解共性内容。2、创建该体系的最子类对象。什么时候使用继承?当时事物之间存在所属关系时,也就是is a的关系时就使用继承。继承时成员的变化:1、 成员变量:当中子父类中出现同名的变量时,可以使用super()关键字区分,父类的成员变量。Super代表父类的空间引用。2、 成员函数:当中子父类中出现一模一样的函数时,就会出现调用时运行子类的方法。2,多态由来:由于继承的出现为多态的产生提供了条件定义:事物的多种表现形态。也就说父类的引用指向了子类对象。向上转型:当要想使用父类中的基本属性和行为的时候要向上转型。向下转型:当要使用子类特有对象的时候要使用向下转型。好处:提高了代码的扩展性,有了多态,前期设计好的内容可以使用后期设计的子内容,对于指挥对象做事情,如果对象多,比较麻烦,抽取事物的共性之后对该类事物的指挥就比较容易了。前提:必须是继承或者实现接口必须有覆盖操作。弊端:前期设计的内容虽然可以使用后期出现的内容,但是只能用子类去覆盖父类,不能使用子类中特有的方法。3,封装就是将不需要暴露出来的属性和行为隐藏起来。用关键字private来实现,private可以修饰成员变量、成员函数。可以修饰类吗?|-类与对象的关系类:是对现实生活中事物的描述,描述中包含了事物的共性内容。对象:是现实生活中某一类事物的实体,也可以理解为一个容器,用来存储很多数据的容器,成员变量和局部变量的区别:1、定义的位置不同:成员变量:定义在类中,整个类中有效。局部变量:定义在函数中,局部范围有效。2、 声明周期不同:成员变量:随着对象的创建而出现在堆内存中,随着对象的消失而被垃圾回收器回收。局部变量:随着局部变量的所属的区域出现在占内存中,随着所属区域运行结束而释放。3、 初始化不同:成员变量:有默认初始化值、对于引用型变量默认null;局部变量:因为栈内存中都没有默认初始化值,必须手动去对其进行初始化,只有被初始化之后才能被使用。匿名内部类:即没有名字的对象,简化书写用的。基本使用:1、 当对对象的方法只调用一次时,可以用匿名对象来完成这样写比较简化,如果对一个对象进行这个成员的调用,必须给这个对象起个名字2、 可以将匿名对象作为实际参数进行传递。一旦对对对进行多个成员操作时。必须要对对象起个名字。|-封装特性.private setXxx,getXxx封装:隐藏对象的实现细节和属性,仅对外提供访问方式,凡是面向对象必须有封装性。特点:将变化隔离提高了复用性提高了安全性便于使用原则:1、将不需要对外提供的内容都隐藏起来。 2、把属性都隐藏,提供公共方法对其访问。在代码中的体现:1、 将成员变量都私有化,并通过共有的方法对其进行访问,这两个方法是:setXxxgetXxx2、 只要不准备对外提供的全部都封装起来,3、 私有仅仅是封装的一种表现形式,函数是最小的封装体。方法需要私有吗?Public static void selectSort()Swap();Private void swap()/此处私有是因为位置置换不用提供给用户。代码实现:Class PersonPrivate int age;/为了不让其他程序直接访问age属性,避免错误的数据,可以使用一个关键字来完成private私有,它是一个权限修饰符。Public void setAge()/对外提供函数是可以控制你输入的参数。/一个成员变量通常对应的两个方法、If(a130|a0)Age=a;Speak();ElseSystem.out.println();Public void getAge()Return age;Void speak()Sop();Class PersonDemoPublic static void main(String args)Person p=new Person();P.age=-20;/错误数据是因为对象直接访问age属性造成的。P.speak();总结:之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句对访问的数据进行操作,提高代码的健壮性。凡是set开头的返回值类型是void,get开头的跟它的返回值类型一致。|-构造函数|-特点:1、 函数名和类名相同2、 不用定义返回值类型3、 不用些return语句|-作用:对对象进行初始化。在类中如果没有定义任何的构造函数时,此时类中有个默认的构造函数,便于对对象进行初始化。如果在该类中定义了构造函数,默认的的构造函数就没有了。|-构造函数和一般函数的区别:1、 格式不一样:构造函数:修饰符 类名(参数列表)一般函数:修饰符 返回值 类名(参数列表)2、 运行不一样:构造函数:在对象已建立时就执行对应的构造函数对其进行初始化。一般函数:对象创建后调用它增加其功能。3、 作用不同:构造函数:对对象进行初始化一般函数:供对象调用,增加其功能。4、 调用次数不同:构造函数:对象创建时只调用一次,因为初始化是最先执行的,只被调用一次一般函数:对象创建后调用多次。|-什么时候使用构造函数?分析具体事物时,该事物已经存在,就应该具备一些属性和行为,那么将这些内容定义在构造函数中,一个类中构造函数可以有多个,并且是以重载的形式存在的。|-小细节:构造函数中是可以写return语句的,因为当构造函数中存在判断的时,可以写return,作用就是结束语句。同样构造函数是可以添加void的,这样的话就不是构造函数了,就成为了一般函数了。|-构造代码块:对所有的对象进行初始化,定义在类中,是一个独立的代码块,在构造函数之前执行。注意区分静态代码块:静态代码块是给类进行初始化,随着类的消失而消失。|-this当成员变量和局部变量同名的时,用来区分。代表的是一个当前对象的引用,构造函数之间的调用,this必须定义在构造函数的第一行,因为构造函数是来对对象进行初始化的,所以必须先执行。不能super关键同时出现,因为super关键字也必须定义在函数中的第一行。|-static ¥Static关键字:1、 首先它是一个修饰符,只能修饰成员(成员变量和成员函数)2、 被static修饰的成员数据,可以被所有的对象进行共享。3、 被static修饰的成员多了一种调用方式,不但可以使用对象进行调用,还可是直接使用类名进行调用。4、 静态之所以可以被类名调用,是因为静态是随着类的加载而加载的。非静态是随着对象的加载而加载的。5、 静态优先于对象加载进内存,所以不能访问对象的内容,对象可以访问静态的内容。静态使用注意事项:1、 静态成员函数只能访问类中的静态成员,不能访问非静态,非静态可以访问静态方法。2、 静态方法中不能定义this和super关键字,因为this代表对象,但是静态存在的时候,还没有对象。3、 主函数是静态的。成员变量和静态变量的区别:1、 成员变量只能被对象调用,静态变量除了能被对象调用外,还可以被类名调用。2、 成员变量称之为实例变量或者对象变量,因为成员变量是被对象使用的,静态变量也称之为类变量。3、 成员变量随着对象的出现而出现,随着对象的回收而消失,静态变量随着类的创建而创建。什么时候使用静态:成员变量:如果该变量的数据值每个对象都是一样的,就将其静态修饰,成员函数:如果该函数没有访问到对象中的特有数据,那么就将这个函数用静态修饰,因为它在内存中创建对象是没有任何意义的。静态代码块:Static:随着类的加载而加载,而且只执行一次,类一加载代码块就执行。作用:给类进行初始化,注意区分构造代码块。|-单例设计模式 ¥什么是设计模式:能解决某一类问题行之有效的解决方法。单列设计模式:解决一个类在内存只有一个对象的问题思路:1、 为了避免其他程序过多的创建该类对象,先控制禁止其他程序建立该类对象。2、 还为了让其他程序能访问到该类对象只能在本类中自定义一个本类对象。3、 为了方便其他程序对自定义对象进行访问,可以对外提供一些访问方法。代码体现:1、 构造函数私有化2、 创建本来对象3、 提供一个方法可以访问该对象。两种方式:恶汉式:代码体现Class SinglePrivate int num;Private static Single s=new Single();Public static getInstance()Return sPublic void setNum()Public int getNum()懒汉式:代码体现:Class SinglePrivate Single()Private static Single s=null;Public static getInstance()If(s=null)S=new Single();Return s;注意:此处要节后多线程技术来分析,怎么去解决存在的安全问题,以及为什么会出现这样的安全问题。|-继承 ¥继承:多个类中存在相同的属性和行为时,把这些内容抽取到单独的一个类中,那么那些类就可以不用单独定义这些属性和方法了,只要继承这个类即可。|-好处,弊端。好处:1、提高了代码的复用性, 2、继承让类与类之间产生了关系,这是多态出现的前提。 3、java支持单继承,但是保留有了多继承的机制,避免了多继承调用时的不确定性。|-成员函数:覆盖当子父类出现了一模一样的函数时(返回值类型、函数名、参数列表全部相同时)的函数时,就会出现调用时运行子类方法的情况。什么时候用覆盖: 当对一个类中的功能的内容进行重新定义时,可以定义该类的子类,并保留父类重的功能声明,重新定义功能内容,并建立子类对象调用该功能。覆盖的小细节:1、子类方法覆盖父类方法时,权限必须大于等于父类的权限。2、静态只能覆盖静态或者被静态覆盖。|-子类实例化过程子类所有的构造函数都有一句默认的super();会默认的调用父类的中的空参数的构造函数,因为子类初始化的过程,必须要到父类先去初始化,因为子类继承了父类,可以获取父类数据之前必须要明确父类是如何对其子类进行初始化的。|-final关键字1、 首先它是一个修饰符,能修饰类、方法、变量2、 修饰的类不能被继承3、 修饰的方法不能被覆盖4、 修饰的变量是一个常量。|-抽象类 ¥1、 没有方法体的方法,称为抽象方法,必须存放在抽象方法类中,抽象方法和抽象类必须用abstract关键字来修饰,2、 抽象类不可以被实例化,为什么?因为调用抽象方法没有意义?为什么?因为它连方法体都不存在?3、 抽象类必须由其子类将抽象类中的抽象方法都覆盖后,其子类才可以被实例化,否则该子类还是抽象类。注意事项:1、 抽象类是否可以定义非抽象的方法。可以 首先抽象类是一个类,类是用来描述事物,只不过描述事物过程中有些信息不具体,抽象类和一般类异同点:相同:抽象类和一般类都用于描述事物,都可以定义成员。不同:抽象类中可以定义抽象成员函数,(抽象要么修饰类要么修饰函数)而一般类不可以。 抽象类不可以实例化,一般类可以实例化。2、抽象类中是否有构造函数? 有,而且抽象类虽然自身不可以被实例化,但是其子类覆盖了所有的抽象方法后,是可以实例化的。所以抽象类的构造函数是用于给其子类对象进行实例化。3、抽象类通常都是一个父类?是、因为需要子类去覆盖父类中的抽象方法。4、抽象关键字 不可以和那些关键字共存?Final:修饰了类是一个最终类,不可以被继承,然后abstract修饰的类必须是父类,需要被继承、冲突、非法的修饰符组合,abstract 和finalStatic:抽象方法被static修饰,就具备了可以被类名直接调用的的特点,但是抽象方法被调用没有意思。Priavte:因为抽象方法被私有,无法被覆盖。|-接口 ¥1、 接口:1、 里面的方法都是抽象的。1、 接口中的成员都有固定的修饰符,最常见的成员:全局常量抽象方法。只是最常见,不代表只有它们没有其他的, 全局常量,共有的不需要对象,直接用接口调用的,不可变的。表现形式:Public static final 抽象方法:public abstract2、 接口的成员都是public的。3、 接口是不可以创建对象的。就相当于是抽象的特殊表达形式。(但是有区别和抽象类)4、 类与类之间是继承关系,类与接口之间是实现关系。5、 接口的出现可以多实现,避免了单继承的局限性。6、 一个类在继承一个类的同时,还可以实现多个接口、7、 接口与接口之间是继承关系,而且可以多继承,以为接口的方法都没有主体。思想特点:1、 对外暴露的规则。 外设要介入计算机中,因为计算机外面提供了接口,这就是规则。2、程序的功能扩展3、降低了耦合性4、用来多实现结合电脑主板的思想进行阐述,它是个规则,。对外提供的规则它提高了我们功能的扩展性,降低了耦合性。主板和声卡:主板使用规则,声卡实现规则。5、 抽象类和接口之间的区别: 共性:它们都是不断抽取出来的抽象非概念 区别:1、抽象类只能被单继承、接口可以被多实现,避免了单继承的局限性。2、抽象类中可以定义抽象方法,和非抽象方法,它可以用于定义体系的基本共性的内容。接口中只能定义抽象方法,它主要用于对象的功能的扩展。3、抽象类是继承关系,是is a关系,接口是实现关系是like a关系。4、抽象类中的成员修饰符都是自定义的,接口中的修饰符都是固定的。记住:不要把接口狭义的理解为interface,应该理解广义些,就是对外提供的规则,凡是对外暴露的都可以是接口。|-多态 ¥因为继承的为多态的出现提供了条件,也就说某一种事物多种存在形式,代码实现: class 动物 class 猫 extends 动物 猫 x=new 猫(); 动物 y=new 猫();/父类的引用变量指向了其子类的对象。Animal a=new Cat();此处猫对象的类型自动向上提升,也就是向上转型,这个在使用功能使用体系的基本功能时使用。怎么体现了多态性:首先猫是一个实体,是一个类型,因为继承了动物,所以是动物的一张,这时把猫这个实体称之为动物也可以,所以具备了两种形态,猫和动物。这便是多态的体现。这里有两个重要的知识点要掌握:1、 向上转型:当要使用体系的基本功能的时候用,。2、 向下转型:当要使用自身的特有功能时使用,表现形式:Cat c=(Cat)a;总结:不管是那种转型,自始至终都是子类的对象做着类型的变化。Instanceof:用来判定两个对象类型是否是指定的类型。当进行向下转型时,先判断该对象是否符合被转成的子类型。|-好处,前提,弊端,体现。好处:提高了代码的扩展性,前期设计好的内容可以使用后期出现的子类内容,对于指挥对象做这件事情,如果对象很多的时候,指挥起来非常麻烦,抽取对象的共性内容,就简单多了。前提:1、必须有继承或者实现。 2、必须有覆盖操作。弊端:前期的程序虽然可以使用 后期子类程序的内容,但是只能使用子类覆盖父类的内容,不能使用子类中的特有内容。|-转型。向上转型:向下转型:|-特点:成员变量:当在子父类中出现了相同的非私有成员变量时,在多态调用中的特点:在编译时:参考引用型变量所属类中是否有调用的成员变量,如果有编译通过,如果没有编译失败。在运行时:参考引用型变量所属的类中的成员。简单一句话:对于成员变量无论是编译还是运行都参考引用型变量所属类中的成员变量。也就是说:成员变量看等号左边。成员函数:当子父类中出现一模一样的函数时,在多态调用中的特点:在编译时:参考引用型变量的所属的类中是否有调用的成员函数。在运行时:参考的是对象所属的类中是否有调用的成员函数。原因是:编译时期应该参考父类,运行时期应该参考子类。因为成员函数上有一个特点覆盖。简单一句话:对于成员函数,编译看左边,运行看右边。静态成员函数:在编译时期:参考引用型变量所属的类中是否调用的静态函数,如果有编译通过,如果没有编译失败。在运行时期:参考的还是引用型变量所属的类中的静态函数。简单一句话:对于静态函数,无论是编译还是运行都看左边总结:对于多态成员而言,无论编译还是运行都看左边,只有成员非静态函数,编译看左边,运行看右边,因为覆盖的特性。|-Object所有类的父类,该类中的方法所有类都具备。|-equals toString getClass hashCodeClass Demo extends ObjectPrivate int num;Demo(int num)This.num=num;通常都会按照对象自身的特点对对象进行比较,比如:现在要比较两个Demo对象中null值是否相同。Public boolean compare(Demo b)Return this.num=d.num;发现Demo继承Oject已经具备了比较对象的方法,所以没有必要再定义新的方法compare了,直接使用equals就可以了,可是Object equals比较的是地址值,不是我们所需的,那就保留的父类的功能声明,建立自身的比较内容,这就是覆盖。Public boolean equals(Object obj)If(!(Object instanceof Deno)Return false;Demo d=(Demo)obj;向下转型。Return this.num=d.num;此处体现了多态的特性。|-内部类将一个类定义在另外一个类中里面的类称为内部类。内部类的访问规则:1、 内部类可以直接访问外部类的成员2、 外部类需要创建内部类对象才能访问内部类成员。3、 内部类处理外部类的成员上,所以可以被修饰符所修饰,比如private|-匿名内部类(会写就行)Abstract class AbdsDemoAbstract void show1();Abstract void show2();Class OuterInt num=4;New AbsDemo()Void show()/匿名内部类Sop(num=+num);.show();Public void method2()AbsDemo a=new AbsDemo();Public void show1();Public void show2();A. show1();A. show2();/要想调用两个方法,怎么做?起个名称即可当里面有多个方法的时候建议不要写匿名内部类。-interface Intervoid show();class Outer/补足代码。最好用匿名内部类static Inter method()/为什么是Inter类型return new Inter()public void show()System.out.println(show run);class InnerClassTest public static void main(String args) Outer.method().show();/*Outer.method():Outer类中有一个method方法,而且这个方法是静态的。Outer.method().show会返回一个对象,而且这个对象还可以调用show方法说明这个对象肯定是Inter类型。*

温馨提示

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

评论

0/150

提交评论