方法的重载_面向对象

  1. 课前回顾:
  2. 1.二维数组
  3. 动态初始化:
  4. 数据类型[][] 数组名 = new 数据类型[二维数组长度][每一个一维数组长度]
  5. 静态初始化:
  6. 数据类型[][] 数组名 = {{},{},{}}
  7. 存储元素:
  8. 数组名[i][j] = 元素值
  9. i:代表的是一维数组在二维数组中的索引位置
  10. j:代表的是元素在一维数组中的索引位置
  11. 获取元素:
  12. 数组名[i][j]
  13. 遍历:先遍历二维数组,再遍历一维数组
  14. 获取二维数组长度:数组名.length
  15. 2.方法
  16. a.概述:功能
  17. b.作用:好维护,提高了复用性
  18. c.
  19. 无参无返回值
  20. public static void 方法名(){
  21. 方法体
  22. }
  23. 方法名()
  24. 有参无返回值
  25. public static void 方法名(参数){
  26. 方法体
  27. }
  28. 方法名(具体的值)
  29. 无参有返回值
  30. public static 数据类型 方法名(){
  31. 方法体
  32. return 结果
  33. }
  34. 数据类型 变量名 = 方法名()
  35. 有参有返回值
  36. public static 数据类型 方法名(参数){
  37. 方法体
  38. return 结果
  39. }
  40. 数据类型 变量名 = 方法名(具体的值)
  41. 3.注意事项:
  42. a.方法不调用不执行 main方法是jvm调用的
  43. b.方法之间不能嵌套的
  44. c.方法的执行顺序只和调用顺序有关
  45. d.void return 结果 不能共存的
  46. void 能和return 共存
  47. e.一个方法中,不能连续return多个返回值(if else 除外)
  48. f.调用方法时,要和下面定义好的方法完全匹配
  49. 今日重点:
  50. 1.会使用debug调试代码
  51. 2.什么是面向对象思想
  52. 3.为什么要是会用面向对象思想
  53. 4.怎么使用面向对象
  54. 5.会用代码描述我们世间万物的类
  55. 6.会在一个类中使用别的类中的成员->面向对象
  56. 7.new对象,点别的类的成员
  57. 8.知道成员变量和局部变量的区别
  58. 9.会定义静态成员,以及会调用静态成员(类名直接点)

第一章.debug

  1. 1.概述:代码调试手段(工具)
  2. 2.作用:
  3. a.可以让代码一行一行的执行
  4. b.能够清楚的看到代码中每一个成员值的变化
  5. c.找bug
  6. 3.怎么使用:
  7. a.在想开始执行的那一行左边单击一下,点出一个红色大点点->断点(再单击一下,断点消失)
  8. b.右键运行->点击debug运行

day06[方法的重载_面向对象] - 图1

day06[方法的重载_面向对象] - 图2

第二章.类和对象

1.面向对象的介绍

  1. 1.面向对象思想介绍:Java
  2. 自己的事情自己不做,找别人(对象)帮我去做事儿
  3. 2.面向过程:C
  4. 自己每一步都亲力亲为
  5. 3.举例:
  6. 洗衣服:
  7. 面向过程:找盆->放水->洗衣粉->搓衣板->搓搓搓
  8. 面向对象:找洗衣机
  9. 带饭:面向对象
  10. 点外卖:面向对象
  11. 4.总结:
  12. a.什么是面向对象思想:自己的事情自己不做,找别人(对象)帮我去做事儿
  13. 我们在开发的过程中,我们使用已经被封装好的功能,直接帮我们完成需求
  14. b.为什么使用面向对象思想?
  15. 为了让实现需求的过程更加的简单
  16. c.怎么使用呢?
  17. new 对象 点方法
  18. d.使用面向对象的目的:
  19. 调用对象中的方法,去帮我们完成需求,怎么实现的,底层不用我们关注
  20. 5.特点:
  21. 由执行者变成了指挥者
  22. 将复杂的事情简单化
  23. 更符合人类思考逻辑->懒
  24. 6.补充:
  25. 如果想要在一个类中使用另外一个类中的成员,就需要使用面向对象思想
  26. new

2.类和对象

2.1类

  1. 1.概述:一类事物的抽象表示形式(先会使用代码去描述世间万物的类,具体在开发中怎么使用,封装部分再说)
  2. 2.定义:
  3. 属性(成员变量)
  4. 定义位置:类中方法外
  5. 作用范围:整个类
  6. 定义格式:数据类型 变量名
  7. 成员变量有默认值:
  8. 整数 0
  9. 小数 0.0
  10. 字符 '\u0000'
  11. 布尔 false
  12. 引用 null
  13. 行为(功能,成员方法):这一类事物都能干啥
  14. 定义时去掉static,其他的方面和之前学的一模一样
  1. public class Person {
  2. //属性
  3. String name;
  4. int age;
  5. //成员方法(行为)
  6. public void eat(){
  7. System.out.println("人要吃饭");
  8. }
  9. public void drink(){
  10. System.out.println("人要喝水");
  11. }
  12. public void la(){
  13. System.out.println("人要炸坑");
  14. }
  15. public void sa(){
  16. System.out.println("人要嘘嘘");
  17. }
  18. }
  1. public class Animal {
  2. //属性
  3. String name;
  4. String brand;
  5. String color;
  6. int age;
  7. //成员方法
  8. public void sleep(){
  9. System.out.println("睡觉");
  10. }
  11. public void jump(){
  12. System.out.println("跳起来");
  13. }
  14. }
  1. public class Phone {
  2. //属性(成员变量)
  3. String brand;
  4. String system;
  5. int price;
  6. String color;
  7. //成员方法
  8. public void call(){
  9. System.out.println("打电话");
  10. }
  11. public void message(){
  12. System.out.println("发短信");
  13. }
  14. }

2.2对象

  1. 1.概述:一类事物的具体体现
  2. 2.怎么使用:
  3. a.导包:import 包名.类名
  4. 如果两个类在同一个包下,使用时无需导包
  5. 如果两个类不在同一个包下,就需要导包了
  6. lang包下的类使用时无需导包
  7. b.创建对象:想使用哪个类中的成员,就new哪个类的对象
  8. 类名 对象名 = new 类名()
  9. c.调用成员:想调用哪个成员,就用哪个类的对象去点哪个成员
  10. 对象名.成员变量名 =
  11. 对象名.方法名(参数)
  1. public class Person {
  2. //属性
  3. String name;
  4. int age;
  5. //成员方法(行为)
  6. public void eat(){
  7. System.out.println("人要吃饭");
  8. }
  9. public void drink(){
  10. System.out.println("人要喝水");
  11. }
  12. public void la(){
  13. System.out.println("人要炸坑");
  14. }
  15. public void sa(){
  16. System.out.println("人要嘘嘘");
  17. }
  18. }
  1. public class Test {
  2. public static void main(String[] args) {
  3. Person person = new Person();
  4. System.out.println(person.name);
  5. System.out.println(person.age);
  6. //给属性赋值
  7. person.name = "柳岩";
  8. person.age = 36;
  9. System.out.println(person.name);
  10. System.out.println(person.age);
  11. System.out.println("===============");
  12. person.eat();
  13. person.drink();
  14. }
  15. }

3.练习

  1. 需求:用代码去描述一个动物类,在测试类中为动物类中的属性赋值,并且调用动物类中的功能
  1. public class Animal {
  2. //属性
  3. String name;
  4. String brand;
  5. String color;
  6. int age;
  7. //成员方法
  8. public void sleep(){
  9. System.out.println("睡觉");
  10. }
  11. public void jump(){
  12. System.out.println("跳起来");
  13. }
  14. }
  1. public class Test02 {
  2. public static void main(String[] args) {
  3. Animal animal = new Animal();
  4. animal.name = "球球";
  5. animal.brand = "二哈";
  6. animal.color = "黑白";
  7. animal.age = 4;
  8. System.out.println(animal.name+"..."+animal.brand+"..."+animal.color+"..."+animal.age);
  9. //调用方法
  10. animal.sleep();
  11. animal.jump();
  12. }
  13. }

总结:

什么时候使用面向对象:一个类想使用别的类的成员

怎么使用: new 呀 点呀

3.匿名对象的使用

  1. /*
  2. 等号左边Animal 代表的是 对象的类型
  3. animal 是 对象名
  4. 等号右边new Animal -> 真正将对象创建出来
  5. */
  6. Animal animal = new Animal();
  7. 1.概述:没有名字的对象-> new Animal()
  8. 2.使用的时候要注意:
  9. 如果涉及到赋值了,不要用
  10. 如果单纯的想调用一个方法,可以考虑用
  11. 3.总结:
  12. 匿名对象固然好使,但是不要贪杯(开发中尽量别使用)
  1. public class Test01 {
  2. public static void main(String[] args) {
  3. //原始方式
  4. Person person = new Person();
  5. person.name = "柳岩";
  6. System.out.println(person.name);
  7. System.out.println("=================");
  8. new Person().name = "涛哥";
  9. System.out.println(new Person().name);
  10. new Person().eat();
  11. }
  12. }

day06[方法的重载_面向对象] - 图3

4.一个对象的内存图

  1. public class Phone {
  2. String brand;
  3. int price;
  4. public void call(String name){
  5. System.out.println("给"+name+"打电话");
  6. }
  7. public void message(){
  8. System.out.println("发短信");
  9. }
  10. }
  1. public class Test01 {
  2. public static void main(String[] args) {
  3. Phone phone = new Phone();
  4. System.out.println(phone);//地址值
  5. System.out.println(phone.brand);//null
  6. System.out.println(phone.price);//0
  7. phone.brand = "苹果";
  8. phone.price = 9299;
  9. System.out.println(phone.brand);//苹果
  10. System.out.println(phone.price);//9299
  11. phone.call("柳岩");//给柳岩打电话
  12. phone.message();//发短信
  13. }
  14. }

day06[方法的重载_面向对象] - 图4

5.两个对象的内存图

day06[方法的重载_面向对象] - 图5

6.两个对象指向同一片空间内存图

day06[方法的重载_面向对象] - 图6

第三章.成员变量和局部变量的区别

  1. 1.定义位置:重点
  2. 成员变量:类中,方法外
  3. 局部变量:在方法中,或者参数位置
  4. 2.作用范围:重点
  5. 成员变量:整个类都能使用
  6. 局部变量:只能在自己的方法中使用,别的方法使用不了
  7. 3.默认值:重点
  8. 成员变量:有默认值,可以直接使用
  9. 局部变量:没有默认值,需要手动赋值之后才能使用
  10. 4.在内存位置:
  11. 成员变量:在堆中
  12. 局部变量:在栈中
  13. 5.生命周期:
  14. 成员变量:随着对象的创建而产生,随着对象的消失而消失
  15. 局部变量:随着方法的调用而产生,随着方法的执行完毕而消失

第四章.static关键字

1.static的介绍以及基本使用

  1. 1.概述:静态的,关键字
  2. 2.特点
  3. a.被static修饰的成员随着类的加载而加载
  4. b.被static修饰的成员由于跟着类到内存,所以优先于对象存在
  5. c.被static修饰的成员属于类成员,不属于对象成员(成员方法,成员变量)
  6. d.根据static所在的类创建出来的对象,都会共享这个静态成员
  7. 3.使用:
  8. 类名直接调用

day06[方法的重载_面向对象] - 图7

  1. public class Student {
  2. int id;
  3. String name;
  4. //static String classRoom = "521";
  5. static String classRoom;
  6. public static void eat(){
  7. System.out.println("吃饭");
  8. }
  9. }
  1. public class Test {
  2. public static void main(String[] args) {
  3. //调用静态成员->类名直接调用
  4. Student.classRoom = "520";
  5. Student student = new Student();
  6. student.id = 1;
  7. student.name = "郭靖";
  8. //student.classRoom = "520";
  9. System.out.println(student.id);
  10. System.out.println(student.name);
  11. //System.out.println(student.classRoom);
  12. System.out.println(Student.classRoom);
  13. System.out.println("=====================");
  14. Student student2 = new Student();
  15. student2.id = 2;
  16. student2.name = "黄蓉";
  17. //student2.classRoom = "520";
  18. System.out.println(student2.id);
  19. System.out.println(student2.name);
  20. System.out.println(student2.classRoom);
  21. System.out.println("=============");
  22. //类名直接调用
  23. Student.eat();
  24. }
  25. }

day06[方法的重载_面向对象] - 图8

2.static修饰成员的访问特点

  1. 1.静态的能直接访问非静态成员吗?(成员指的是成员变量,成员方法)
  2. 静态成员:属于类
  3. 非静态成员:属于对象
  4. 静态成员先存在在内存,优先于非静态成员存在
  5. [不能]
  6. 如果静态的想访问非静态的咋整?
  7. new对象,调用
  8. 2.非静态成员能直接访问静态成员吗?
  9. 可以
  10. 同类:
  11. 直接调用
  12. new对象调用
  13. 类名直接调用
  14. 不同类:
  15. new对象调用
  16. 类名直接调用
  17. 3.静态成员能直接访问静态成员吗?
  18. 可以
  19. 同类:
  20. 直接调用
  21. new对象调用
  22. 类名直接调用
  23. 不同类:
  24. new对象调用
  25. 类名直接调用
  26. 4.非静态成员能直接访问非静态成员吗?
  27. 可以
  28. 同类:
  29. 直接调用
  30. new 对象调用
  31. 不同类:
  32. new对象调用

总结:

只要是访问非静态成员,不管在不在同一个类中,都可以new对象调用

只要是访问静态成员,不管在不在同一个类中,都可以类名直接调用

第五章.方法参数

  1. 快速将一段代码抽到方法中:ctrl+alt+m

1.基本数据类型做方法参数传递

  1. 基本类型作为方法参数传递的时候
  2. 传递的是值,不是变量本身
  3. 一个方法内部的局部变量的变化,不会影响其他方法中的局部变量
  1. public class Test01 {
  2. public static void main(String[] args) {
  3. int a = 10;
  4. int b = 20;
  5. method(a,b);
  6. System.out.println(a);//10
  7. System.out.println(b);//20
  8. }
  9. public static void method(int a, int b) {
  10. a+=10;
  11. b+=10;
  12. System.out.println(a);//20
  13. System.out.println(b);//30
  14. }
  15. }

day06[方法的重载_面向对象] - 图9

2.引用数据类型做方法参数传递

  1. 1.参数为引用数据类型时,传递的是地址值
  2. 所以一个方法内部引用类型的值改变了,会影响到其他方法中的这个引用类型的值
  1. public class Test02 {
  2. public static void main(String[] args) {
  3. int[] arr = {10,20};
  4. method(arr);
  5. System.out.println(arr[0]);//20
  6. System.out.println(arr[1]);//30
  7. }
  8. public static void method(int[] arr) {
  9. arr[0]+=10;
  10. arr[1]+=10;
  11. System.out.println(arr[0]);//20
  12. System.out.println(arr[1]);//30
  13. }
  14. }

day06[方法的重载_面向对象] - 图10

String做方法参数传递比较特殊:单记(字符串在底层是一个被final修饰的数组,字符串定义之后,在内存中无法改变)