![java面向对象基础_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-11/12/dbf1d872-95a0-4bc3-aa62-16db37842efc/dbf1d872-95a0-4bc3-aa62-16db37842efc1.gif)
![java面向对象基础_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-11/12/dbf1d872-95a0-4bc3-aa62-16db37842efc/dbf1d872-95a0-4bc3-aa62-16db37842efc2.gif)
![java面向对象基础_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-11/12/dbf1d872-95a0-4bc3-aa62-16db37842efc/dbf1d872-95a0-4bc3-aa62-16db37842efc3.gif)
![java面向对象基础_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-11/12/dbf1d872-95a0-4bc3-aa62-16db37842efc/dbf1d872-95a0-4bc3-aa62-16db37842efc4.gif)
![java面向对象基础_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-11/12/dbf1d872-95a0-4bc3-aa62-16db37842efc/dbf1d872-95a0-4bc3-aa62-16db37842efc5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象dayol1面向对象(00)1)什么是object(対象),object本意:东西,是指一个具体事物实例2)面向对象,面向客观事物之间的关系.4)ooa面向对象分析/ood面向对象设计客人来了 (来了一个客人类型的某人)5)面向对象概念a类型:名词概念,如:客人,菜品,厨师b引用(变量):引用具体概念实例的代词,如:某人,特价菜c对象(东西):具体概念的个体实例,如:张三丰这个人,一盘大盘鸡d行为(方法)e多态:行为/引用,在具体情形下发生了变化的现象一盏灯:多态的打:根据宾语发生变化f封装:任何对彖实例都是尽可能封装,减少暴露e继承:概念的继承关系2 java类型,引用变量与堆对象d
2、java类,是用来描述事物类型的.如:书v图书馆管理系统中的概念:书book书的特征:书号,书名,编号,作者,价格2)类的声明:public class booklong id;string name;string isbn; 书号string authors; 作者double price;3)引用变量与对象的创建过程:a java的内存管理与分配:栈是一块java使用内存区域,使用的方式:l1fo(后來者居上)堆也是一块java使用内存区域,使用方式:无需随机分配b局部变量 与 堆对象空间分配java局部变量在栈中分趾,是按照变量的类型分配对象在堆中分配,按照类的属性(实例变量)分配空i&
3、#39;可c变量类型与分配变量分为:基本类型和引用类型基木类型变量的空间大小:就是基本类型的空间大小,值是基木类型 的值引用变量的值是一个对象的地址值,引用变量通过地址引用了一个堆 対象引用类型变量的占用空间大小和值管理是”透明的(不可看见)”,rfl java系统管理:变暈占用空间以及值的管理,都是透明的.4)对象的属性默认自动初始化的.自动初始化为”零“值,引用为null5)在null引用上调用属性或方法,会发生运行时异常案例:平面绘图坐标系屮的一个点(point),定义合理的属性坐标是int类型.0+> x p(x,y)y3构造器(构造方法)的作用:用来描述对象的初始化过程的.1)
4、如:月饼实例的创建,使用面和馅创建.制作(构造器)月饼模子(类)亠月饼(对象)原料(构建参数)点类型> 原点坐标(1,2)2)java小的构造器:声明在类内部,方法名与类名一致 的方法叫构造方法,构造方法不能声明返回值类型. 构造方法可以包含参数,参数一般是创建対象实例 必须依赖的条件(前提条件).public class point int x;inty;/*构造器*/public point(int x, int y)this.x = x;this.y = y;3) 对象实例化过程:new运算:创建对象实例1根据类的属性在堆中分配対象空间.并且自动初始化实例变量2根据参数类型调用构造
5、器.3 new运算返回对象的引用地址.4) this关键字this是对当前对象的引用,是运行期间当前对象本身. 可以使用this明确的访问当前对象的屈性或者方法 类似于”我”.this()是调用本类的其他构造器,可以使用构造器的重用, 简化代码的实现.* this()必须写在构造器的第一行!5) 构造方法重载:参数不一样的构造器案例:point.java方法签名=方法名+参数类型列表方法重载:a方法名一样b方法参数不一样也可以说:方法名一样,方法签名不同的方法6) 默认构造器1 java类一定有构造器案例:constructordemo.java2如果类没有声明任何构造器javac自动提供一个
6、默认构造器,无参数默认构造器3如果提供构造器声明,javac将不再提供默认构 造器.4对象的方法1) 表示对象的功能,依赖于对象存在.案例:point.java女u: pl.distance()和 p2.distance()方法是动作,是功能,一般用动词声明.2) 方法也经常重载,重载:方法名一样,参数不一样重载体现了, 功能的多态.重载的方法经常互相重用.core java day021方法签名(方法的识别关键字) 方法签名二方法名+参数类型列表java类中不能存在相同方法签名的方法方法重载:方法名一样,方法签名不同的方法charlj chs 二a,'b',c;intlj a
7、ry=*a7b7c;system.out.println(chs);/abc/ println(charn)system.out.println(ary);/34adcd/println(object)system.out.prmtln(ary.tostringo);/ 34adcd system.out.println('a,);/a / println(char)打印字符 system.out.println(65);/65/ println(int)打印整数打人打牌方法重载就是:动词的多意现象,打人,打牌,打酱油,打车洗衣服,洗手,洗照片保存联系人,保存通话记录,保存访问过的地址
8、save(contact) save(log) save(url)2 java方法参数的传递规则:基于值的传递,是变量值的 复制,1) 基本类型就是其屮值的复制,2) 引用类型是引用值(地址)的复制.案例:paramaterdemo.java*变量的值:a基本类型的值是其本身,b引用变量的值是一个地址值,是被引用对象的首地址.为了避免引用参数传递的副作用,建议一切结果使用 返回值带回.3继承用來表达概念上具体化延续的具体概念.1 *子类继承父类的属性和方法2*构造器不能继承!3实例化子类,会递归分配所有父类的空间4子类构造器一定调用父类构造器*类一定有构造器4关于继承中的构造器:1 *子类构造
9、器屮,一定调用父类构造器。2子类构造器默认调用父类无参数构造器!3如果父类没有无参数构造器,就必须在子类屮明确指定调用 父类的有参数构造器!4使用super()调用父类构造器,必须写在子类构造器第一行 this()必须写在子类构造器第一行5编程建议:所有的类都提供无参数构造器!减少继承时候的 麻烦。5关于对象的实例化过程:1检查类是否加载,如果没有加载就加载这个类,要加载所有父类。(读取.class文件到内存)*懒惰式加载(按需加载):如果第一次用到就加载, 只加载一次。通过classpath指定的路径寻找类文件(.class), 加载以后是一个对象,类型是classo获得这个类对象:stud
10、ent.class-> class实例2在内存堆屮分配对象空间。递归分配所有父类和子类属性空间。 属性默认自动初始化。自动初始化为“0”值。3进行属性的赋值。4递归调用父类构造器。(默认调用父类无参数构造器!)5调用本类构造器。6访问控制修饰符1 public2 protected3 default很少使用,很少使用package作为访问控制的边界4 private* -般自然现象:都是尽可能的封装典型.声明属性和方法尽可能私有。这样才能做到尽可能的封装。 提供适当的属性访问方法,适当的开放属性的访问。一个源文件可以有多个类,但是只能有一个public类,文件名要与public类一致如果
11、有其他类,就只能是默认修饰不建议使用非公有类。就是说所有类都应该是公有的,并且 一个源文件一个类。7继承中的语法现象1父类型变量对以引用子类型的实例,父类型的实现是多态的!2子类可以覆盖父类的方法,修改父类的行为。*方法覆盖:子类覆盖了父类“相同方法签名”的方法。方法的覆盖是由方法动态绑定实现的,就是java虚拟机运行 时候确定执行那个那个对象那个方法,java最终执行子类的方法。8引用类型转换(是引用变量的类型的转换!)1向下转型(隐式/自动类型转换),是小类型到大类型的转换 如:circle c = new circle( 1,2,3);shape s = (shape) c;表示圆一定是
12、图形2向上造型(强制类型转换),是大类型到小类型。 如:shape s = (shape) new circle(l,2,3);cirlcle c = (circle)s; /当s实际引用圆时候,能够转换成功 s = new rectangle( 1,1,2,2);circle c2 = (circle) s;出现类型转换界常,因为s引用的是rectangle不是圆实例。3 instanceof运算符,用來检查引用对象的类型。经常与“引用类型强制转换”配合,实现安全的类型转换, 避免类型转换异常day031 java bean关于javabean规范djavabean不是语法规范,是习惯性编程
13、规范,用这个规范 写的类使用方便。有时候javabean的类也称为:pojoplan old java object2) 简化规范:a必须有包.bjava类,具有无参数构造器。c有用getxxx()和setxxx()声明的bean属性。 如:getname()和 setname(string n)声明的bean属性为:name,与是否有实例变量name无关. boolean类型的get方法可以有两种形式: getmarried()或者 ismarried()d必须实现序列化接口(在学习10的时候具体学习。)e jdk提供的类几乎都符合javabean规范。 如:string3) javabea
14、n最大的好处:“使用方便”2 static静态关键字,修饰:属性,方法,内部类,代码块 static修饰的资源属于类级別,是全体对象实例共享的资源 (属性,方法,内部类)1) 静态属性,使用sic修饰的属性,是在类的加载期间初始化 是属于类的,全体类的实例共享的变量,使用类名访问属性.实例变量:属于对象的属性.2) static方法,使用static声明的方法,属于类的方法,一般 用来表示工具方法.在类加载以后就可以自己调用,不需要创建任何 类的实例.3)静态代码块,是在类加载期间运行的代码块,由于类只加载 一次,所以静态代码块只执行一次!用途不是很常见,一般用來在类加载以后初始化一些静态资源
15、 时候使用,如:加载配置文件。4)静态内部类(在内部类专题讲解)3 final最终的1)final修饰的类,不能再被继承。java的string就是final类,不能被继承!math 也是 finalinteger (包装类)在实际项fi开发中,原则上不允许使用final类!spring, hibernate,struts 2,这个框架经常动态继承代理我们的类。使用final的类可能造成这些框架的工作问题2)final修饰的方法,不能再被覆盖。在实际项目开发中,原则上不允许使用final方法!3)final修饰的变量,初始化以后不允许再修改了。a final局部变量b final方法参数c f
16、inal的成员变量4)final static java使用final static修饰的变量作为常量。一般要求常量名都有大写字母。常量不是:const4 abstract class抽象类不具体的类1)抽象方法,只有行为的概念,没有具体的行为实现。 使用:abstract关键字修饰,并且没有方法体。2)包含抽象方法的类,就一定是抽象类。使用:abstract关键字修饰,包含抽象方法。女山 平而图形一定可以计算面积。3)抽象类不能直接创建实例。可以定义引用变量。4)抽象类只能被继承,一个具体类继承一个抽象类,必须实 现所有抽象方法。5)抽象方法和抽象类非常适合作为系统的分析和设计的工具。 pu
17、blic class abstract crmsystempublic abstract client add(client newguy);public abstract event add(event e, client guy);public abstract eventf todayevents();5接口,相当于纯抽象类(cpp纯虚类)1接口:全部的方法都是抽象方法,全部的属性都是常量。 接口用来表示纯抽象概念,没有任何具体的方法和属性。public interface crmsystemclient add(client newguy);event add(event e, cli
18、ent guy);event todayevents();2不能实例化,可以定义变量。3接口变量可以引用具体实现类的实例。4接口只能被实现(继承),一个具体类实现接口,必须使用全部的 抽象方法。5接口z间可以继承。6 一个具体类可以实现多个接口,实现多继承现彖,表示: 一个概念即是xxx也是xxx.7接口中的属性,默认是常量public static final8接中的方法一定是:public abstract9实现一个接口,使用关键字implements,实现实际上是 一种继承关系。接口和实现类是父子类型的关系5 object1) java类默认继承于object!继承了 object的属性
19、和方法女口: tostringo, hashcode(), equals()2) tostring()方法,经常有系统默认调用,活动当前对彖的文本描述object默认返回:全限定名hashcode建议覆盖为:当前对象的文本描述oop day04 1 object1) java类默认继承于0bject!-啥都是东西继承了 object的属性和方法如:tostringo, hashcode(), equals()2) tostring()方法,经常有系统默认调用,活动当前对彖的 文木描述,object默认返回:全限定名hashcode建议覆盖为:当前对彖的文本描述3) equals是用来比较两个对
20、象是否相等的方法。区别:引用相等与对象相等引用值相等:使用“二才对象的内容相等:.equals()方法equals在object类中声明,默认的比较规则是:比较引用 建议覆盖,实现对象的比较(比较对象的状态,就是比较对象 的数据)。*覆盖规则:a自反性:对于任何非空引用值x, x.equals(x) 都应返回true。b对称性:对于任何非空引用值x和y,当且仅当 y.equals(x)返回 true 时,x.equals(y)才应返回trueoc传递性:对于任何非空引用值x、y和z,如果 x.equals(y)返回 true,并且 y.equals(z)返回 true,那么 x.equals(
21、z)应返回 true。d 一致性:对于任何非空引用值x和y,多次调用x.equals(y)始终返回true或始终返回false,前提是对彖上equals比较屮所用的信息没有被修改。e对于任何非空引用值x, x.equals(null)都应返回false o4) hashcode()a hashcode()方法要与equals方法一同覆盖a当两个对象equals比较为true时候,这两个对象应该 具有相同的hashcode()值b当两个对象equals比较为false时候,这两个对象应该 具有不相同的hashcode()值c hashcode()值要稳定(一致性),一个对象创建以 后就不应该再变
22、化b默认的hashcode()值是当前堆对象地址转换的一个整数 这个整数不是内存地址。c 一般使用对象的oid值作为hashcode的值。oid对象的唯一编号,在工程项目屮一般采用数据库来 生成oid,也就是数据库中的“主键”2 string字符串string 字符串=charf + 操作(touppercase(), concat() 类:数据+相关的操作char数组只是数据,没有操作一串字符就是字符串:char, string, stringbuilder1字符串”字面量(直接量)”都是string类型实例”字符串常量”public static final string type = &
23、quot;car"/常量字面量/直接量stirng内部就是一个chart.2 string api有一个实现原则:对象内容永远不变 也就是说:string对彖永远不变.3 string字血量(直接量),如果相同,会替换为同 一个string对象的引用,常量连接的结果也被优化 为一个字符串.string s = new string(habc");4 string 的比较,equals, hashcode()5 string api (字符串的常用方法)这些方法如果返回string 一般是一个新string对象 tostringo 除外.字符串中的字符有序号,从()开始.ap
24、i方法:charat()length()trim()indexof()lastindexof()endswith()startswith()substring(int start, int end)substring(int start)string str = new string(new cha叩t,'2',3);chart chs = str.tochararrayo;3正则表达式:负责的字符串匹配处理规则,应用广泛.学习建议:1要能够读懂“正则表达式”2能够写出简单的”正则表达式“3不要过多的分配学习时间!可以应用于:java grep vi1 字符集:1234表示 1
25、,2,3,4人12表示除了 1,21-5表示 1,2,3,4,5la-f表示a-f之间的0-9a-fa-f表示:一个16进制字符0xx0-9a-fa-fl,8)w&预定义字符集:d : 0-9.:任意字符w:单词字符0-9a-za-z_s:匹配空q:tnrb pds w2 m,n数词nm,n)?: 0,1 + :1,*: 0,3人开头$结尾邮政编码:a0-9 0-90-90-9ro-90-9$a0-96$ad6$用户名规则:aw8,10$电话号:+86(+86|0086)?s?d 11)$身份证号码:ad15)(d2)0-9xx)?$ 一个点的坐标:ad+(,
26、s*|s+)d+$ad+,ss*d+$答案规则:as*a?(s+|,s*)b?(s+|,s*)c?(s+|,s*)d?s*$0:2011-01-30ad4-d2-d2$ id4(d2)2$ip 地址:192.168.0.2ad 1,3 d 1,3 .d 1,3 d 1,3$idl,3(.dl,3)3$wdl,3)3dl,3$string对正则表达式的支持.matches()匹配正则表达式.split(”,s|”)切分字符串为字符串数组 replaceall()integer.parselnto转换到字符串到整数:女0: n23n-> 23oop day051 string对正则表达式的支
27、持.matches()匹配正则表达式.split(”,s|”)切分字符串为字符串数组.replaceall()integer.parselnt()转换到字符串到整数:如:”23”> 232 stringbuilder 和 stringbufferstring = char +操作(复制创建新对象)stringbuilder=charn +对char操作(处理当前数组内容)stringbuilder内部的chai*数组内容可变,如杲长度不够,利用变长算法维护,自动扩容长度.1) stringbuilder是变长字符序列2) stringbuilder 方法:append, insert.都
28、返冋当前stringbuilder对彖本身的引用。3) 如果软件需要大量字符串处理时候建议使用stringbuilder” a” + "b“4) string s = sl+s2; java实际上才是如下代码运行:string s=new stringbuilder(s 1 ).append(s2).tostring();string s = sl+s2+s3+s4;被优化为string s = new stringbuilder(sl).append(s2).append(s3).append(s4).tostring();s+=”a”;会产生两个新对象(stringbuilder, string)stringbuilder buf=new stri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现代办公家具的环保理念与可持续发展
- 现代生活节奏下的胃肠疾病预防教育
- 生产制造中的绿色技术升级路径与策略
- 基坑施工安全专项方案
- 现代服务业的发展趋势及投资策略研究
- 生产安全监督与危机管理一体化建设
- 生态农业发展对商业模式的创新影响
- 现代农业机械设备智能化国际对比研究
- 2024-2025学年高中生物 专题5 课题1 DNA的粗提取与鉴定说课稿 新人教版选修1
- 9 生活离不开他们 第一课时 说课稿-2023-2024学年道德与法治四年级下册统编版001
- 2025年湖南高速铁路职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 2024年亳州市蒙城县县级公立医院招聘笔试真题
- 医保政策与健康管理培训计划
- 策略与博弈杜塔中文版
- 无人化农场项目可行性研究报告
- 2024届上海市金山区高三下学期二模英语试题(原卷版)
- 学生春节安全教育
- GA/T 1280-2024银行自助设备安全性规范
- 2024-2025年校长在教研组长和备课组长会议上讲话
- 2024预防流感课件完整版
- 2023年国家护理质量数据平台
评论
0/150
提交评论