方法的重载
方法的重载 : 是方法的两大特性之一 方法的特性 : 重载 -> overload 重写 -> override -> 继承学完 重载 -> overload -> 现象级的方法特征 现象: 在一个类中,出现了多个方法同名且不报错的情况,称这个方法发生了重载现象 重载现象的前提条件: 1. 多个方法必须在同一个类中 2. 多个方法的方法名必须一样 3. 多个方法之间的形式参数列表不同 (个数不同,类型不同,类型顺序不同) 4. 重载与返回值类型无关 5. 重载与方法的形参变量名无关 重载知识点是一个理解知识点,重载我们自己写的少,但是用的多 (重载的特性是为了方便调用者的) 如何调用有重载特性的方法? -> 重要的 不用操心,JVM会根据你调用方法时传入的具体实参匹配最佳的方法执行!
方法的错误总结
1. 方法名是红的 a. 方法名写错了 b. 没这个方法 2. 实参列表有红色下划线 a. 形参实参不匹配 3. 整个方法调用都在报错 调用的方式错了! 学习是学会的不是教会的
面向对象的编程思想
面向对象编程思想: 思想: 一种想法,一种思考问题的方式 思想的作用 : 思想决定了行为 编程思想 : 编写代码时思考问题的方式 编程思想的作用 : 决定如何编写代码 -> 编写代码的方式 面向对象的编程思想 : 众多编程思想中的一种 -> 这一种编程思想非常的nice! Java语言的编程思想就是面向对象编程思想 //编程思想的种类 : 面向过程 -> 面向对象 -> 面向切面/面向函数式 .... 面向过程编程思想: 凡事必躬亲 -> 所有的事情自己亲自去完成 -> 目前咱们百分之90以上的代码都是面向过程的编程思想完成的; 面向对象编程思想: 自己的事情别人做 -> 懒人思维(行为上的懒,思想上是巨人) 面向对象的三大特性 : 封装,继承,多态 面向对象的三大特点 : 1. 更符合我们平时的思维习惯 2. 把复杂的问题简单化(把简单的问题自己不用做了) 3. 把我们从执行者变成指挥者 洗衣服 面向过程 : 泡一泡 -> 扭一扭 -> 揉一揉 -> 搓一搓 -> 甩一甩 -> 晾一晾 面向对象 : 准备一台洗衣机(对象) -> 衣服搞里头 -> 启动 买电脑 面向过程 : 打车去广埠屯 -> 选配置 -> 和老板讨价还价 -> 组装 -> 打包运回来 面向对象 : 打开JDAPP(对象) -> 选配置 -> 下单 服务员点单 : 对象-> 服务员 在服务员点单到上菜的整个过程中,涉及到非常多的面向对象思想的应用 -> 万物皆对象 (Thinking in Java -> Java编程思想) 简单的回答是什么 -> 在哪用 -> 怎么用 -> 用的时候可能会出什么问题 -> 如何解决 -> 此问题/此功能除了这种方式还有什么方式可以解决/这个功能除了面试官问的知识点还有什么其他的知识点可以解决 -> 循环.... 面试环节中面向对象编程思想的对答: 面向对象思想更符合我们平时的思维习惯,把复杂的问题简单化(把简单的问题自己不用做了),把我们从执行者变成指挥者. 在一Thinking in Java这边书中对面向对数思想有 万物皆对象的描述 ,世间万物全都可以使我们的对象.例如 面试官您面试的这个过程就涉及到非常多面向对象思想的应用, 面试官您面试肯定是因为公司的项目有了新的需求,以您的实力完全可以一个人胜任,但是您有更重要的工作需要去统筹,所以您使用了您面试的功能来面试一些 具备开发功能的人 例如我 来帮您完成项目功能的实现;
类和对象的关系
类 : 种类,类型 : 代表的是抽象的事物 -> 一个事物的总称 对象 : 此类事物的具体化 --> 真正用的是对象 -> 具体的事物 先有类 才能有对象!! 类是对象的母版 !
定义类的格式
为什么要定义类 : 为了模拟现实世界中的 各种事物! 如何定义类: 此类类的功能是 描述生活中的事物 -> 事物描述类 public class 事物的名称{ //描述信息 -> 属性 -> 成员变量 //能做的事情 -> 行为 -> 成员方法 } //例如: public class Student{ //属性 : 定义属性的时候不需要赋值 //1. 常识方面 : 类是描述一类事物的,这类事物中每一个具体的对象有自己的属性值 //2. 语法方面 : 成员变量有默认值, 此默认值请参照数组元素的默认值 String name;//null int age;//0 //行为 //学习 public void study(){ //在描述事物的时候,编写行为的方法时,不要再方法上加static sout("学生学习"); } } //如果在main方法所在的类中定义方法,请加static //如果在事物描述类中定义方法,不要加static
如何使用类: 创建此类的对象
如何使用类: 创建此类的对象的步骤: 1. 创建对象 类名 对象名 = new 类名(); new : 1. 创建对象 2. 在堆内存中开辟了内存空间 2. 对象名.属性 / 对象名.方法() 服务员点单 万物皆对象 对象调属性/对象调方法
private
public : 访问权限修饰符 -> 公共的,公开的 -> Java中最大的访问权限 private : 访问权限修饰符 -> 私有的 -> Java中最小的访问权限修饰符 作用的地方 : 作用在类的成员上(修饰成员变量和成员方法) 被private修饰后的成员具备的特点 : 只能在当前类中访问 好处: 提高代码的安全性!(需要getter and setter 方法配合) 死规则 : 以后在描述事物的时候,编写事物的属性,必须把所有的属性都用private修饰,并为每一个属性提供getter and setter方法; (2个方法)
变量访问的原则
变量访问的原则 : 就近原则 近 ---> 远 : 局部位置 > 本类的成员位置 > 父类的成员位置
this
//重点 : this : 就是用来打破变量访问的就近原则 -> 强制访问本类员位置上的变量 格式: this.变量名 -> 强制去访问本类成员位置上的变量 格式: this.方法名(实参) -> 强制去访问本类成员位置上的方法 //无意义 所有的方法都是成员方法 --------------------------------------------- //理解 this : 本类对象的引用 -> 哪个对象使用含有this关键字的方法,这个this就是那个对象 本类对象的引用: 本类 : 当前类 -> this 所在的那个类 对象 : new 出来的东西 -> 本类对象 : this 所在的那个类的对象 的 : 定冠词 引用 : 等号左边的那个变量叫引用 -> Student stu = new Student(); //stu : 引用 this :哪个对象使用含有this关键字的方法,这个this就是那个对象 对象调用含有 this 关键字的方法,那么就好比对象在照镜子,此时镜子里出现的那个对象就是此时this是代表的对象!
自动生成getter and setter方法
IDEA可以自动生成所有属性的getter and setter : alt + insert/ins 在空白位置右键 -> generic
成员变量和局部变量的区别
1. 定义的位置不同 局部变量 : 方法内和方法的形参上 成员变量 : 类中方法的外面 2. 作用域不同 //变量在其定义的大括号内有效 局部变量 : 方法内 成员变量 : 整个类中有效 3. 在内存中的位置不同 局部变量 : 栈内存中 成员变量 : 堆内存中 4. 初始化值不同 局部变量 : 没有初始化值,但是使用之前必须赋值才能使用 成员变量 : 根据成员变量的类型给与默认值 整数 0 浮点 0.0 字符: '\u0000' 布尔 false 所有的引用数据类型 null 5. 生命周期不同 局部变量 随着方法的弹栈死亡 -> 跟着方法走 -> 活的短一些 成员变量 : 随着对象的创建而产生,随着对象的死亡而死亡 -> 跟着对象走 -> 活的久一些 因为在类中的位置不同,导致了作用域不同和在内存中的位置不同; 因为在内存中的位置不同,导致了初始化值不同和生命周期不同; //成员变量/成员方法 属于 对象!! //局部变量 属于 方法!! --------------------------------------------------- 6. 颜色不同 (IDEA软件的默认主体) 灰色 : 没有使用的 使用了 -> 局部变量/方法 : 黑色,细的字体 成员变量 : 紫色,粗的字体
封装特性的好处
1. 循环 : 封装重复的代码逻辑 -> 提高代码的复用性 2. 方法 : 封装重复的功能 -> 提高代码的复用性 3. private : 此关键字的使用也是封装的特性 -> 提高代码的安全性 4. 定义事物描述类 : 事物描述类中封装 此类事物的属性和行为 -> 提高了代码的多样性
构造方法
构造方法 : 用来构建创造"对象"的方法 作用: 1. 用来创建对象的方法 -> 创建对象其实就是在调用相应的构造方法 new 到底干了什么? 1. 创建了对象 2. 开辟了堆内存空间 3. 调用了相应的构造方法 构造方法的格式: 无参构造方法的格式: public 类名(){ //方法体; } 带参构造方法的格式: public 类名(对象的属性){ //方法体; -> 给属性依次赋值! }
构造方法的注意事项
1. 如果一个类中没有编写任何构造方法,JVM会赠送一个没有任何形参的构造方法 -> 无参构造 2. 构造方法没有返回值类型的板块 -> 构造方法的作用固定 : 一定返回一个此类的对象!! 3. 构造方法也可以构成重载现象 4. 带参构造方法可以在创建对象的同时给属性赋值 5. 如果你在一个类中没有写构造,送你一个默认的无参构造方法,为了让你方便创建对象 当你自己编写了任何一种构造方法,默认赠送的无参构造就不送了! 6. 就算有全参构造也要自动生成getter and setter方法, 因为 setter方法可以对对象的属性进行修改! 7. 构造方法可以自动生成 无参构造 : alt + insert + constructor -> select none; 全参构造 : alt + insert + constructor -> 全选ctrl + a + ok;
定义事物描述类的标准
1, 必须私有所有的属性 (成员变量必须私有) -> 提高安全性 -----以下都是自动生成------- 2, 必须生成无参构造 -> 为了快速创建对象 3. 必须生成全参构造 -> 为了创对象的时候同时给属性赋值 4, 必须自动生成所有属性的getter and setter 方法 //必须自动生成!! -> 提供私有属性的公共访问方式 //行为 -> 表示功能的成员方法 根据题目的需求来 如何使用事物描述类 1. 创建对象 2. 对象调方法/对象调属性