01面向过程与面向对象思想对比

面线过程编程: 自己完成所有的步骤.
面向对象编程: 完成任何一项功能,首先要做的事,就是看看有没有已经写好的,然后,拿过来.
//自己不干活,找别人帮忙干活.

02类和对象的关系

类:是一组具有相同属性和行为的事物的统称.
//类就是类别,比如”人类”,”鱼类”,”哺乳类”,”汽车类”
//属性就是类拥有的”名词”,行为就是类拥有的”动词”
对象:实际存在的事物.万物皆对象.
//其实就是存在的个体. “这个人”,”这条鱼”,”那辆汽车”

03类的定义

  1. public class 类名{
  2. //成员变量(属性)
  3. //成员方法(行为)
  4. }

04对象的创建和使用

//注意: 类本身是无法使用的.所以,所谓的使用类,其实是使用类的对象.
创建对象: 类名 对象名 = new 类名();
使用对象:
对象名.成员变量;
对象名.成员方法(…);

05案例手机类的创建和使用

  1. package com.itheima.test1;
  2. public class TestPhone {
  3. public static void main(String[] args) {
  4. // 1. 创建对象
  5. Phone p = new Phone();
  6. // 2. 给成员变量进行赋值
  7. p.brand = "大米";
  8. p.price = 2999;
  9. // 3. 打印赋值后的成员变量
  10. System.out.println(p.brand + "..." + p.price);
  11. // 4. 调用成员方法
  12. p.call("阿强");
  13. p.sendMessage();
  14. }
  15. }
  1. package com.itheima.test1;
  2. public class Phone {
  3. // 品牌, 价格
  4. String brand;
  5. int price;
  6. // 打电话, 发短信
  7. public void call(String name){
  8. System.out.println("给"+name+"打电话");
  9. }
  10. public void sendMessage(){
  11. System.out.println("群发短信");
  12. }
  13. }
  1. package com.itheima.object1;
  2. public class Student {
  3. // 属性 : 姓名, 年龄
  4. // 成员变量: 跟之前定义变量的格式一样, 只不过位置发生了改变, 类中方法外
  5. String name;
  6. int age;
  7. // 行为 : 学习
  8. // 成员方法: 跟之前定义方法的格式一样, 只不过去掉了static关键字.
  9. public void study(){
  10. System.out.println("学习");
  11. }
  12. }
  1. package com.itheima.object1;
  2. public class TestStudent {
  3. /*
  4. 创建对象的格式:
  5. 类名 对象名 = new 类名();
  6. 调用成员变量的格式:
  7. 对象名.变量名
  8. 调用成员方法的格式:
  9. 对象名.方法名();
  10. */
  11. public static void main(String[] args) {
  12. // 类名 对象名 = new 类名();
  13. Student stu = new Student();
  14. // 对象名.变量名
  15. // 默认初始化值
  16. System.out.println(stu.name); // null
  17. System.out.println(stu.age); // 0
  18. stu.name = "张三";
  19. stu.age = 23;
  20. System.out.println(stu.name); // 张三
  21. System.out.println(stu.age); // 23
  22. // 对象名.方法名();
  23. stu.study();
  24. // com.itheima.object1.Student@b4c966a
  25. // 全类名(包名 + 类名)
  26. System.out.println(stu);
  27. }
  28. }

06单个对象内存图

07两个对象内存图

08两个引用指向同一个对象内存图

09成员变量和局部变量的区别

10 private关键字

  1. package com.itheima.object2;
  2. /*
  3. 学生类
  4. private : 私有的
  5. private是一个权限修饰符
  6. 可以用来修饰成员(变量,方法)
  7. 特点: 只能在本类当中进行访问
  8. */
  9. public class Student {
  10. String name;
  11. private int age;
  12. // 设置值
  13. public void setAge(int a){
  14. if(a >= 0 && a <= 120){
  15. age = a;
  16. }else{
  17. System.out.println("您的年龄不合理");
  18. }
  19. }
  20. // 获取值
  21. public int getAge(){
  22. return age;
  23. }
  24. public void show(){
  25. System.out.println(name + "..." + age);
  26. }
  27. }
  1. package com.itheima.object2;
  2. /*
  3. 学生测试类
  4. */
  5. public class TestStudent {
  6. public static void main(String[] args) {
  7. Student stu = new Student();
  8. stu.name = "张三";
  9. //stu.age = 23;
  10. stu.setAge(-23);
  11. stu.show();
  12. }
  13. }

11 private关键字的使用

12this关键字

  1. package com.itheima.mthis;
  2. public class Student {
  3. private String name;
  4. public void setName(String name){
  5. System.out.println("[方法中打印this]");
  6. System.out.println(this);
  7. this.name = name;
  8. }
  9. }

  1. package com.itheima.mthis;
  2. public class TestStudent {
  3. public static void main(String[] args) {
  4. Student s1 = new Student();
  5. System.out.println("[打印对象名]--> s1");
  6. System.out.println(s1);
  7. s1.setName("张三");
  8. System.out.println("----------------------");
  9. Student s2 = new Student();
  10. System.out.println("[打印对象名]--> s2");
  11. System.out.println(s2);
  12. s2.setName("李四");
  13. }
  14. }

13this内存原理

14封装

  1. package com.itheima.test2;
  2. public class Student {
  3. private String name;
  4. private int age;
  5. public void setName(String name){
  6. this.name = name;
  7. }
  8. public String getName(){
  9. return name;
  10. }
  11. public void setAge(int age){
  12. this.age = age;
  13. }
  14. public int getAge(){
  15. return age;
  16. }
  17. public void show(){
  18. System.out.println(name + "..." + age);
  19. }
  20. }
  1. package com.itheima.test2;
  2. public class TestStudent {
  3. public static void main(String[] args) {
  4. Student stu = new Student();
  5. stu.setName("张三");
  6. stu.setAge(23);
  7. System.out.println(stu.getName());
  8. System.out.println(stu.getAge());
  9. int age = stu.getAge();
  10. for(int i = 1; i <= age; i++){
  11. System.out.println("生日快乐");
  12. }
  13. stu.show(); // 仅仅是对数据做展示
  14. }
  15. }
  1. package com.itheima.test2;
  2. public class Test2Student {
  3. public static void main(String[] args) {
  4. Student s1 = new Student();
  5. s1.setName("张三");
  6. s1.setAge(23);
  7. s1.show();
  8. }
  9. }

15构造方法的格式和执行时机

创建对象时执行

  1. package com.itheima.constructor;
  2. public class Student {
  3. /*
  4. 格式:
  5. 1. 方法名需要跟类名相同, 大小写也要一致
  6. 2. 没有返回值类型, 连void都没有
  7. 3. 没有具体的返回值(不能由return带回具体的结果)
  8. */
  9. private String name;
  10. private int age;
  11. // 1. 如果一个类中没有编写任何构造方法, 系统将会提供一个默认的无参数构造方法
  12. public Student(){}
  13. // 2. 如果手动编写了构造方法, 系统就不会再提供默认的无参数构造方法了
  14. public Student(String name, int age){
  15. this.name = name;
  16. this.age = age;
  17. System.out.println("我是Student类的构造方法");
  18. }
  19. public void show(){
  20. System.out.println(name + "..." + age);
  21. }
  22. }

  1. package com.itheima.constructor;
  2. public class TestStudent {
  3. public static void main(String[] args) {
  4. Student stu1 = new Student("张三",23);
  5. stu1.show();
  6. Student stu2 = new Student();
  7. }
  8. }

16构造方法的作用

17构造方法的注意事项

18标准类的代码编写与使用

  1. package com.itheima.test3;
  2. /*
  3. JavaBean类: 封装数据
  4. */
  5. public class Student {
  6. private String name;
  7. private int age;
  8. public Student() {
  9. }
  10. public Student(String name, int age) {
  11. this.name = name;
  12. this.age = age;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. public int getAge() {
  21. return age;
  22. }
  23. public void setAge(int age) {
  24. this.age = age;
  25. }
  26. public void show(){
  27. System.out.println(name + "..." + age);
  28. }
  29. }
  1. package com.itheima.test3;
  2. public class TestStudent {
  3. public static void main(String[] args) {
  4. // 1. 无参数构造方法创建对象, 通过setXxx方法给成员变量进行赋值
  5. Student stu1 = new Student();
  6. stu1.setName("张三");
  7. stu1.setAge(23);
  8. stu1.show();
  9. // 2. 通过带参数构造方法, 直接给属性进行赋值
  10. Student stu2 = new Student("李四",24);
  11. stu2.show();
  12. }
  13. }