# java201904001 **Repository Path**: GUOSD/java201904001 ## Basic Information - **Project Name**: java201904001 - **Description**: 面向对象 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-04-14 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java201904001 #### 介绍 面向对象 #### 笔记 1. 构造方法 、、、、 1.1构造方法 构造方法是类(创建)实例化对象是所调用的有关类初始化的方法; 构造方法是通过new的方式进行调用;(和普通的行为方法不一样) jvm使用new分配完内存空间之后,就会调用构造方法执行与类的实例对象初始化相关的操作; 构造方法的语法: 访问控制修饰符 方法名(){ //构造方法体; } 解析: 构造方法使用访问控制修饰符进行修饰,如果使用private类型在再类的外部无法调用该构造方法; 构造方法没有返回值类型,这一点和普通行为方法不一样; 构造方法的方法名一定要和类名一样; 构造方法是通过new进行调用的,也只能通过new进行调用,不能单独调用构造方法; 构造方法不能够在外部直接调用,但是构造方法之间可以通过this和super相互调用;(涉及到方法重载) 构造方法在使用new调用时,只能执行一次,一次new操作只会调用一次构造方法; jvm会默认的为每一个类提供一个默认的构造方法; 如果用户,没有显示的定义构造方法,则使用jvm默认提供的不带参数的构造方法; 构造方法可以使用ide工具可以自动生成; 选定可以写构造方法的地方,右键---source---generate constructors 注意: 如果没有给定任何自定义的构造方法,则会使用jvm提供的默认的构造方法; 但是,如果给定了自定义的构造方法,则jvm提供的默认的构造方法失效; 此时,如果还想使用默认的构造方法,则需要将默认的构造方法显示写出; 构造方法可以构成重载; 构造方法在类的外部不能直接调用,但是构造方法之间可以通过this(参数列表)的形式调用本类中重载的其他的构造方法; 注意: 构造方法之间可以通过this调用,仅限于构造方法之间; this(实参列表)必须放在被调用的构造方法体的第一行; 这里使用this作为方法名,而不是类名进行调用; 补充: this关键字的用法: this代表当前的实例对象本身, this用于区分重名成员变量和局部变量; 在类内部,可以通过this.成员变量、或者this.成员方法的形式进行调用成员变量或者是成员方法; this(实参列表)可以在构造方法之间相互调用,但必须放在构造方法的首行; super关键字: super关键字表示当前类的父类,用户调用父类的成员变量、成员方法、构造方法; 、、、、、 2. getter/setter方法 、、、、 2.1getter/setter方法接口 是一类通用的,用于给私有的成员变量赋值和取值的方法; 因为成员变量一般会封装为private类型,private类型在类外部是不能直接访问的; 一般会为private类型的成员变量提供getter/setter方法接口,用于在类的外部访问private类型的成员变量; 这也是封装思想的体现; getter/setter方法接口:可以通过ide工具自动生成; eclipse:在需要生成的类中点击右键-----source----generate setter and setter 注意可以通过选择只生成getter或setter; 软件工程原则: 类的成员变量一般为private类型; 为private类型的成员变量建立getter/setter方法接口; 解析: 在类的外部,现在有两种途径可以初始化私有的private类型的成员变量; 一种是构造方法。只能通过new调用执行一次; 一种是getter/setter方法接口,可以多次进行调用使用; 、、、、 3. 方法的重载 、、、、、 3.1方法的重载: 是在一个类内部定义的方法名一样,但是方法的参数列表不一样;这样的一组同名的方法就构成了方法的重载; 方法重载的条件: 方法的重载是建立在方法的形参列表不同的基础之上; 参数个数不一样;(指的是形参的类型) 参数类型不一样;(指的是形参的类型) 参数顺序不一样(不能是全部都是同一类型)(指的是形参的类型) 上述要求条件指的是:形参的数据类型,而不是形参的变量名;重载和参数名没有关系; 返回值类型不同,不构成重载; 访问控制修饰符不同,不构成重载; 形参参数名不同,不构成重载 解析:重载构成的条件指的是参数类型,而不是参数名; 重载的方法在调用时,有调用方法时给定的实参列表来决定调用哪个重载的方法; 就是调用时通过实参和形参的匹配决定调用哪个重载方法; 重载的方法调用时,给定的实参列表需要和需要的某一个重载的方法的形参列表在类型、个数、顺序上需要一一对应; 方法的重载是在一个类的内容发生的,是一个类中定义多个参数列表不同的同名的行为方法; 优点: 使用同一个方法名可以使用一组类似的行为; 后期扩展作业: 方法的重载(overload)和重写(override)之间的异同点? 3.2变长参数(jdk5+) 变长参数就是在一个方法定义时所定义的参数的个数是不固定的; 变长参数的个数可以是任意多个(0个、1个、多个) 变长参数在一个方法的定义中至多只能有一个,且必须写在参数列表的最后; 语法: 访问控制修饰符 其他修饰符 返回值类型 方法名(参数类型 参数名,参数类型 参数名,参数类型...变长参数名){ //方法体 } 解析: 进行调用时,非变长参数必须要按照要求实参和形参一一对应方式给定,变长参数可以给定0个、1个、多个; 变长参数本质上是一个数据类型的数组,所以在子函数中,对于变长参数直接按照数组的形式进行使用; 变长参数可以给定0个,如果是数组类型,即便没有数值传递,也需要给定一个为null的参数对象; 变长参数的函数可以构成重载; 注意: 当变长参数和非变长参数构成了重载,在进行调用时,如果二者都满足匹配条件,优选调用非变长参数的方法; 当变长参数的实参个数为0 时,形参是一个数组,该数组不为null,但是数组长度size()为0; 变长参数是数组形式参数的另一种写法;但是比较数组类型的参数更加灵活; 变长参数和数组类型的参数,两者不构成重载【把变长参数类型改为数组类型,不构成重载】 、、、、、、 #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)