《JAVA面向对象的感悟.pdf》由会员分享,可在线阅读,更多相关《JAVA面向对象的感悟.pdf(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面 向 对 象(java中的设计模式)知识点1面向对象初步java是完全面向对象的编程语言1)什么是Object(对象Object:本意:东西,是指具体事务的实例(东西)面向对象:就是面向客观事物之间的联系 想着对象写代码2)面向对象的几个关键概念:类:指一类事物,e g车,人,花对象:指的事物的一个具体实例,一个对象,e g刘老师的那辆结婚的大28自行车,门口的那颗向日葵多态:事物在不同的情况下有不同的变化e g美 女 一 刘 诗 诗/高 圆 圆/杨 玉 环/苍 井 空花 钱,花心,花费,花朵打人,打卡,打酱油,打车,打假封装:任何对象实例都尽量封装继承:概念的继承关系抽象:2类与对象关系1
2、)类:用来描述事物类型,指的一类事物,eg人类,车类,植物类2)对象:就用来描述事物的一个实例,一个对象eg刘苍松/刘英谦/杨幕,刘老师的那辆结婚的大28自行车3)类与对象的联系和区别:类代表是一类事物,是对象的模板对象代表是一个事物的实例,是类的一个实现3类的组成1)类现实中:类特征;行为;)2)java中的类:特征:属性:变量行为:方法class类 名 属性方法)案 例:objectl.Demol/Personclass Person属 性(变 量):姓名,年 龄,性别 数 据 类 型 属 性 名S tring name;int age;S tring sex;返 回 值 类 型(void
3、)方 法 名(形 参 列 表)方 法 体HI4创 建 对 象1)创 建 对 象 的 格 式:a)对象的声明:变 量 的 定 义:数 据 类 型 变 量 名b)对象的创建:对象名=new构造方法2)访问对象中的属性/方法a)访问属性:对象名.属性名b)访问方法:对象名.方法名3)对象属性的默认值:对象当new以后,在堆当中创建存储空间里,jdk会自动初始匕一般基本类型数据是0”,引用类型默认就是null5引用类型变量以及对象在内存中创建的过程l)java中的内存管理与分配栈:就是java中一块使用的内存区域,使用的方式:先进后出/后进先出栈:存储局部变量堆:也是Java中一块使用的内存区域,使用
4、的方法:随机的分配堆:一般new的对象2)变量的类型变量分为:基本类型和引用类型基本类型:在内存中占用空间,就是基本数据类型的大小,值就是基本数据类型的值引用类型:引用类型的值,就是在堆当中new生成对象的地址 值,可以通过引用类型中的地址值找到在堆当中的对象6 案例:objectl.Demo2Box/Box长方体类:Box,属性:长(length),宽(width),高(height)方法:求体积(volume)(长*宽*高)根 据Box来创建一个Box对象,并求其体积7构造方法(构造器)1)作用:用来描述对象的创建过程(就是用来创建对象,给属性赋初始值,或者做其他的初始化操作)eg:月饼制
5、作(构造方法)月饼的模板-月饼(对象)馅(参数)2)jave中的构造方法:在类当中声明,方法名跟类名一致,而且构造方法没有返回值,没有返回值类型当创建对象的时候,就立刻调用构造方法,来给对象初始化egclass S tudentint age;S tring name;public S tudent(int age,S tring name)this.age=age;this.name=name;)3)对象的实例化过程new:在堆当中创建对象的过程a)根据类的属性在堆当中分配存储对象的空间,并且先自动给这些属性赋默认值b)根据参数来调用构造方法(把默认值变成对象要赋的值)c)new返回的是对象
6、的堆当中引用地址4)this关键字:this:当前,指代当前对象(对当前对象的引用)a)企业开发当中,构造方法的参数的名字跟属性名最好一致,需要是用this来区分b)this.属性名当前这个对象的属性this.方法名当前这个对象的方法c)this(参数):跟构造方法重载结合使用,可以调用本类中其他的构造方法,必须要写到当前构造方法中的第1行参数:要跟调用的构造方法的参数相匹配5)构造方法重载(参数不同的构造方法)一个类当中很多个构造方法,根据参数的不同,来选择调用不同的构造方法案例:objectl.C ar/Demo3C ar设计 C ar 类,属性:name,color,money,spee
7、d方法:行驶写两个构造方法,第1个构造方法,要把所有的属性都初始化,第2个构造构造方法,只把name/color初始化6)默认的构造方法:a)java类当中必须要有构造方法b)当new的是必然会调用构造方法c)如果类当中没有写任何构造方法的话,则系统会默认的给我们创建一个空参的构造方法如果我们写了构造方法,则会覆盖系统默认提供的构造方法案例:objectl.Demo4class类名属性构造方法方法)案例:objectl.Demo5Point/Point在平面绘图坐标系中的一个点PointPoint:属性:x,y构造方法:1)一般的点(x,y)2)对角线的点(x)-this(x,y)方法:1)当
8、前点到原点的距离2)当前点到另外一个点的距离8)方法重载:1)方法重载a)方法名字必须一样b)方法的参数不同(参数的类型或个数)2)方法签名的概念:方法签名=方法名+参数类型列表java中不能存在相同的方法签名的方法方法重载:方法名一样,方法签名不同的方法(面试的时候,少用)方法重载:方法名一样,方法参数不一样(面试经常问)方法类型和个数一样不是重载方法,变量名字跟方法重载没有任何关系3)方法重载中通过参数的不同,来调用/区分不同的方法4)方法重载是多态一种的表现形式:e g打人,打水,打酱油,打麻将S ystem.out.println(l);/intS ystem.out.println(
9、1.6);/doubleS ystem.out.println(卢 象升);S tringS ystem.out.println(true);/boolean方法重载在我们程序随处可见要求:方法的功能必须要相似1 java中参数的传递(有点儿难)java中的参数传递的一般规则:基于值的传递,基本数据类型的变量,把 到 形参当中;引用类型的变量,把堆当中传递到形参当中(堆当中对象的首地址),这样的话形参跟实参都指向堆当中的同一个对象案例:object2.Demol(引用类型)案例:object2.Demo2(基本类型)2 案例:object2.Demo3Point/Pointpoint(x,y)
10、圆属性:圆心(point(x,y)半 径 r构造方法:1)参数:point(x,y)r2)参数:x,y,r方法:1)求圆的面积:Math,PI*r*r2)判断一个点是否在圆上(这个点到圆心的距离大于r就不在这个圆上,小于等于r 在这个圆上)分析:判断点的问题转化为判断点到圆心(点)的距离问题distance()3 继承案例:extendsl.Person/Student人类:Person 父类属性:姓名,性别,年龄方法:说话学生:S tudent子类属性:姓名,性别,年龄,学号,分数方法:说话学习1)子类继承了父类的属性和方法格式:class子 类 extends父类父类的属性/方法子类独有的
11、方法/属性)2)乐类不能继7 长父类的构造方法3)java中继承是单继承Java中永远都是单继承,但是可以多层次的单继承(一个类只能有一个父类)案例:extendsl.Demo54 继承中构造方法的使用/1)子类的构造方法,一定要调用父类的构造方法2)子类不能继承构造方法3加果父类中没有无参的构造方法,则必须在子类的构造充法中明确的调用父类中的有参数的构造方法4)super:曾经的,过去的,可以在子类的构造方法中使用super来调用父类中的带参数的构造方法案例:extendsl.Demo6空参的构造方法,避免子类继承父类的出现问题5方法重写(覆盖)/变量隐藏都出现继承当中1)变量隐藏:子类定义
12、的变量和父类中变量的名字一样,则父类中变量会被子类中的变量给覆盖案例:extends2.Demo72)super.属性名:可以调用被覆盖的父类中的属性3)方法的重写(覆盖):子类定义的方法:方法名,参数和返回值类型跟父类中的方法一致了,则父类的方法被子类的该方法给重写(覆盖)案例:extends2.Demo86 this和super(this的老婆super的女友)1)this:当前的,现在的super:曾经的,过去的2)this.属性:当前对象的属性this.方法:当前对象的方法super.属性:父类中的属性super.方法:父类中的方法3)this(参数):调用本类中的其他的构造德supe
13、r(参数):调用父类中的构造方法7重载和重写重载:一个类当中,方法的名字相同,方法的参数不同功能:是根据参数的不同来调用不同的方法重写:父类和子类当中,而且方法的名字相同,方法的参数相同功能:子类的方法覆盖父类中继承过来的同名同参方法1父类声明指向子类对象(上转型对象)案例:extends3.Demol1)父类声明指向子类对象,该对象可以访问子类重写父类的方1_2)父类声明指向子类对象,不可以访问子类独有的方法3)父类声明指向子类对象,可以强制转化为子类对象2 question 案例案例:questionl.*class S ingleQuestion extends Question)cla
14、ss MultiQuestion extends Question)SingleQuestion的对象和MultiQuestion的对象放到同一个数组里面?(数组大小的要固定,保存同一个类型的数据)解决方法:1)创建一个数组:Question口 question=new Question;(用这个父类来创建数组)2)给数组添加元素:question0=new S ingleQuestion(.);questionl=new MultiQuestion(.);(父类声明指向子类对象)案例:questionl.QuestionDemo33 static:静态l)static修饰(关键字),可以用来
15、修饰:变量,方法,语句块,类2)static修饰变量:属于类级别的变量,是在类加载的时候直接加载到内存当中,所有的类的对象可以共享同一个静态变量特点:用static修饰变量,我们叫做静态变量,该变量跟类有关,跟对象无关访问静态变量:类名.静态变量名案例:staticl.Demo4/Student3)static修饰方法:属于类的方法,所有该类的对象都可以访问该方法在静态方法里不可以调用实例变量。但是可以调用静态变量特点:用static修饰方法,我们叫做静态方法,该方法跟类有关,跟对象无关方法静态方法:类名.静态方法名案例:staticl.Demo54)代码块:用 语句 的java的语句块,每次
16、在创建对象的时候,自动调用5)静态代码块:使用static修饰的代码块,不管该类创建多少个对象,静态代码块只调用1次,在jdbc,Hibernate,Spring中使用及其频繁案例:staticl.Demo64访问权限控制(一)类内部 包内部public 可以 可以用public修饰的变量,方法,类不同包可以private 可以 不可以 不可以用private修饰的变量,方法,类重点:private修饰的任何方法/属性,只能在本类的内部访问,外界无法访问案例:demol.Demo7企业开发中,一般能使用private修饰都尽可能的使用private修饰健 议)属 性 般 使 用private方
17、法一般使用public访问权限控制:体现java中的封装特性2月17日面向对象周日知识点:1 访问权限控制(访问权限控制修饰符乂二)类内包内子类任意public可以可以可以可以protected可以可以可以不默认可以可以不不private可以不不不案例:demo3.Koo/Demoldemo4.Kool/Demo22 javaBean(POJO)不是语法,是企业开发为了开发方便,习惯性的编码规范特点:1)类必须要放到一个包下面2)属性最好定义为私有的,必须要有能够访问该属性的方法3)给访问属性的方法,命名的规范,属性名:xxx,访问的方法的名字必须:一般属性:getXxx()setXxx(参数
18、)boolean 属性:isXxx()setXxx(参数)4)该类必须要实现可序列化接口(i。再说)5)javaBean必须要有空参的构造方法案例:java Beanl.Demo3/Person好处:调用的时候方便3fina上最终的,最后的修饰类,方法,属性1)用final修饰的类,表示这个类不可以再被继承,叫最终类案例:finall.Demo4一般jdk的工具类,大部分都是用final修饰的,我们写的类,一定不要使用 final 修饰,strutsLx/2.x,hibernate3.2/3.5/4Ospring2.5/3.0底层实现全部是基于动态代理实现,如果用final修饰我们写的类,使用
19、不了动态代理技术(以后再说)2)用final修饰方法,这个方法不可以被重写案例:finall.Demo53)用final修饰变量,该变量初始化以后,不可以再被修改a:用final修饰的局部变量b:用final修饰的方法参数c:用final修饰的引用类型的变量(这个对象不可以修改,但是对象的属性可以修改)案例:finall.Demo64)常量:值永远都不在发生变化固定的写法 public)static final数据类型 常量名=值;一般在属性中定义常量名:最好字母全部大写案例:finall.Demo74抽象类一不是具体的类(有的方法没有的实现)1)抽象的方法一只有行为的概念,没有具体的实现格式
20、:public abstract返回值类型方法名字(参数列表);格式:abstrct class 类名3)抽象类的子类必须要实现所有的抽象方法4)抽象类只能被继承,一个具体的类来继承一个抽象类,并且实现其方法5)抽象类不能直接实例化,但可以使用父类小,:J类对象案例:图形类(S hape):抽象类属性:point(x,y)方法 求该图形的面积2)a)判断一 个 点Point是否在图形的上面b)判断一个点(x,y)是否在图形的上面圆(C ircle):具体类,继承图形类,并且要实现其方法长方形企业开发当中,程序员分为两类:设计人员:项目经理/架构师编码人员:高级程序员,组长,中级程序员,初级程序
21、员案例:设计一个类:C ar基本属性:name,color,speed抽象方法:启动,行驶,刹车(只有方法的声明,没有方法的实现)C ar的子类:来实现这些抽象的方法Bmw/QQ案例:absl.C ar/Bmw/QQ5接口1)一般认为是一个特殊的抽象类2)特点:接口中的方法全部都是抽象方法,接口中的属性全是常量3)对比接口格式和抽象类格式抽象类的格式abstract class 类名属性构造方法一般方法抽象方法)接口的格式interface 接口名常量抽象方法)发现一个问题:接口的格式更适合于设计,现在的企业开发当中,大部分都使用接口来做设计,抽象类使用较少,而且接口及其灵活案例:interf
22、acel.DemolO4)接口中的常量和抽象方法的简写常量:数据类型 常 量 名=值;抽象方法:返回值类型 方 法 名 字(参数);5)接口不能够直接的实例化,可以让实现类来实例化,接口跟实现类直接关系就是一种特殊的继承关系6)接口可以使用父类声明指向子类对象(web开发中经常使用)7)Java中类的继承是比较单一的,尤其功能方法:因为是类是单继承接口可以实现多继承,一个类可以实现多个接口,近似的实现了多继承案例:interfacel.Demoll2 月 18日 周 一面向对象J2SE:String集合类异常处理时间类io 流多线程网络编程反射知识点:1 接口接口之间可以多继承案例:inter
23、face2.Demol2 card案例:C ard属性:花色:C LUB(梅花),DIAMOND(方块),HEART(红桃),S PADE(黑桃),JOKER点数:THREE=0;FOUR =1;FIVE =2;S IX=3;S EVEN=4;EIGHT=5;NINE=6;TE N=7;JAC K=8;/JQUEEN=9;/QKING=10;/K AC E=11;/A DE UC E =12;/2BLAC K=13;小王 C OLOR=14;大王案例:cardl.C ard/C ardDemo23 Object:java体系中最底层的一个类,Object是所有类的父类,所有的类都间接或直接的继
24、承于Object案例:objectl.Demo3l)Object:toString(),hashC ode(),equals。必须掌握2)toS tring():用来描述当前对象的文本(S tring)信息,一般是默认调用,返回的结果包名.类名hashcode,结果没用,必须重写(要把该类的对象显示出来)重写toS tring。:把属性信息描述出来案例:objectl.Demo43)equals():判断两个对象是否相等案例:objectl.Demo5/Point比较两个对象是否相等力比较的是引用值是否相等(堆当,的对象的地址是否相同)equals():Object根上的类,equals比 较
25、 就 是 但 是我们认为的相等,一般指的属性,所以equals跟比较有关的时候,必须重写(2)重写equals。方法,原则equals在 Object类中声明,默认的比较规则是:比较引用值建议覆盖,实现对象的比较(比较对象的状态:属性,就是比较对象的数据)。覆盖规则:a 自反性,对于任何非空引用值x,x.equals(x)都应返回true。b 对称性:对于任何非空引用值x 和 y,当且仅当y.equals(x)返回 true 时,x.equals(y)才应返回true。c 传递性:对于任何非空引用值x、y 和 z,如果x.equals(y)返回 true,并且 y.equals(z)返回tru
26、e,那么 x.equals(z)应返回 true。d 一致性:对于任何非空引用值x 和 y,多次调用x.equals(y)始终返回true或始终返回false,前提是对象上equals比较中所用的信息没有被修改。e 对于任何非空引用值x,x.equals(null)都应返回fa Ise o4)hashC ode()hashC ode。:返回就是当前对象在堆当中的地址值经过一系列转化得到的值,没有实际用处重写equals,必须同时重写hashC ode()a如果两个对象相等,equals返回true,而且必须要有相等hashC ode(sun公司建议的)b 如果两个对象不相等,equals返回f
27、alse,而 且hashC ode不public boolean equals(Object obj)if(obj=null)return false;”/跟自己比较,返回值true/this:指代当前对象,必要是比较的对象的引用(this和obj都是)/俩个引用值相等(地址值一样)则表示都指向堆中的用一个对象if(this-obj)return true;)/对象之间要比较,首先必须是同一个类型的对象/对象instanceof类:判断对象是不是类的一个对象/是,返回值是true,反之,falseif(obj instanceof Point)/是,要把也强制类型转化为Point对象Point point=(Point)obj;/根据之间的需求来写比较的内容return this.x=point.x&this.y=this.y;return false;public int hashCode()/只要equals返回值为true,hashCode返回值一样return 10*this.x+this.y;案例:C ard添 加 Player玩家Player:属性:id,name,C ard口 cards方法:Player接 收C ard的功能(数组的扩展)
限制150内