Java基础学习笔记-第3章-面向对象 (上)

一、Java面向对象学习的3条主线 (第3-5章 面向对象 (上 中 下))

1. Java类及类的成员

  • 属性
  • 方法
  • 构造器
  • 代码块
  • 内部类

2. 面向对象的3大特征

  • 封装性
  • 继承性
  • 多态性
  • (抽象性)

3. 其他关键字

  • this
  • super
  • static
  • final
  • abstract
  • interface
  • package
  • import
  • ……

二、面向过程与面向对象

  • 二者都是一种思想,面向对象是相对于面向过程而言的
  • 面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做
  • 面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做

举例说明:“人把大象装进冰箱”

1. 面向过程

        ① 把冰箱门打开

        ② 抬起大象,塞进冰箱

        ③ 把冰箱门关闭

2. 面向对象

        人 {

                打开(冰箱) {

                        冰箱.开开();

                }

                抬起(大象) {

                        大象.进入(冰箱);

                }

                关闭(冰箱) {

                        冰箱.关上();

                }

        }

        冰箱 {

                开开() { }

                关上() { }

        }

        大象 {

                进入(冰箱) { }

        }

三、Java的基本元素:类和对象

  • 类:对一类事物的描述,是抽象的、概念上的定义
  • 对象:是实际存在的该类事物的每个个体,因而也称为实例 (instance)
  • 面向对象程序设计的重点是类的设计
  • 设计类,就是设计类的成员
  • 理解“万事万物皆对象”:
    • 在Java语言范畴中,我们都将功能、结构等封装到类中,通过类的实例化,来调用具体的功能结构
      • Scanner、String等
      • 文件:File
      • 网络资源:URL
    • 涉及到Java语言与前端Html、后端数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象

四、对象的创建和使用

1. 对象的创建和使用

  • 步骤
    • 创建类,设计类的成员
    • 创建类的对象
    • 通过“对象.属性”“对象.方法”调用对象的结构
  • 如果创建了一个类的多个对象,则每个对象都独立地拥有一套类的属性 (非static的),这意味着,如果我们修改了一个对象的属性a的值,则不影响另外一个对象的属性a的值
  • 对象的内存解析,详解见视频课P183 181.
    • 堆 (Heap):此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存
    • 栈 (Stack):通常指虚拟机栈,用于存储局部变量等,方法执行完,自动释放,先进后出
    • 方法区 (Method Area):用于存储已经被虚拟机加载的类信息常量静态变量即时编译器编译后的代码等数据
  • public class PersonTest {
        public static void main(String[] args) {
            //创建Person类的对象
            Person person = new Person();
    
            //调用对象的属性:“对象.属性”
            person.name = "张三";
            person.isMale = false;
            String gender = (person.isMale)?"女":"男";
            //输出姓名:张三  性别:男  年龄:25
            System.out.println("姓名:" + person.name + "  " + "性别:" + gender + "  " + "年龄:" + person.age);
    
            //调用对象的方法:“对象.方法”
            person.eat(); //输出人需要吃饭!
            person.sleep(); //输出人需要睡觉!
            person.talk("中文"); //输出人需要谈话,使用的语言是:中文!
    
            //体会类与多个对象的关系
            Person person1 = new Person();
            System.out.println(person1.name); //输出nul
            //将person变量保存的对象地址赋值给person2导致person和person2指向了堆空间的同一个实体对象
            Person person2 = person;
            System.out.println(person2.name); //输出张三
            person2.age = 52;
            System.out.println(person.age); //输出52
        }
    }
    
    class Person {
        //属性
        String name;
        int age = 25;
        boolean isMale;
    
        //方法
        public void eat() {
            System.out.println("人需要吃饭!");
        }
        public void sleep() {
            System.out.println("人需要睡觉!");
        }
        public void talk(String language) {
            System.out.println("人需要谈话,使用的语言是:" + language + "!");
        }
    }

2. 对象数组

  • 详解见Java基础学习笔记-第2章

3. 匿名对象的使用

  • 创建的对象没有显式地赋给一个变量名,即为匿名对象
  • 匿名对象只能调用一次
  • public class PersonTest {
        public static void main(String[] args) {
            //创建Person类的对象
            Person person = new Person();
            
            person.eat(); //输出人需要吃饭
            person.sleep(); //输出人需要睡觉
            
            //匿名对象
            new Person().eat(); //输出人需要吃饭
            new Person().sleep(); //输出人需要睡觉,但与上一行的对象是两个对象
    
            new Person().age = 52;
            new Person().showAge(); //输出该人的年龄是:25
    }
    
    class Person {
        //属性
        String name;
        int age = 25;
    
        //方法
        public void eat() {
            System.out.println("人需要吃饭!");
        }
        public void sleep() {
            System.out.println("人需要睡觉!");
        }
        public void showAge() {
           System.out.println("该人的年龄是:" + age);
        }
    }

五、类的成员一:属性

  • 属性 = 成员变量 = field = 域、字段
  • 属性 (成员变量) VS 局部变量
    • 相同点
      • 定义变量的格式:数据类型 变量名 = 变量值;
      • 先声明,后使用
      • 变量都有其对应的作用域
    • 不同点
      • 在类中声明的位置不同
        • 属性:直接定义在类的一对{ }内
        • 局部变量:声明在方法内

你可能感兴趣的:(Java,java,java-ee,intellij-idea)