Java学习面向对象Day01

面向对象Day01

一、名词解释

  1. OO:面向对象(Oriented Object)

    定义:是一种以对象为导向,围绕对象来开发应用程序的软件开发方法。

  2. OOA: 面向对象分析

  3. OOD:面向对象设计

  4. OOAD: 面向对象的分析与设计

  5. OOP:面向对象编程 ----------你们所参与的

二、现实世界中的类和对象

  1. 先要明确一件事先有现实世界中的事和物,才有计算机中的类和对象
  2. 生活中的对象是实实在在存在的事物,是人们在思考或者行动时作为目标的实物 物质
  3. 我们认识世界会将相同的行为或者特征的事物进行分类,形成了类,类:是一种脑子中形成的概念 意识
  4. 抽象
    1. 定义:抽象是从具体的实物中抽出共同的特征(属性)和行为(方法)的过程
    2. 程序设计的核心机制
    3. 面向对象四大特征之一(面向对象三大特征:封装继承多态, 抽象)

问题:先有类还是先有对象

现实世界一定是先有了对象, 然后根据对象抽象出了类的概念

​ 三、计算机中的类和对象

  1. 定义

    1. 类:类是对具有相同属性和方法的实物的抽象。
    2. 类中包括
      1. 属性:事物拥有的静态特征
      2. 方法:事物拥有的行为
    3. 对象:对象是类的具体体现,是类的实体/实例;
  2. 类和对象的关系

    1. 类是对象的模板,对象是类的实例(抽象与具体的关系)
      1. 一个类为它的全部对象给出了一个统一的定义,而它的每个对象则是符合这个定义的实体,因此类的对象关系就是抽象与具体的关系
      2. 类是多个对象进行综合抽象的结果,是实体对象的概念模型,而一个对象是一个类的实例
  3. 如何定义一个类

    • 定义类名

    类名遵循帕斯卡命名规则(大驼峰命名规则),每一个单词的首字母都大写,如类名Student;

    public  class  类名{
    
    }
    
    • 定义类的属性

    通过留在类的主体中定义变量来描述类所具有的静态特征(属性),这些变量称为类的成员变量

    • 定义类的方法

    通过在类中定义方法描述类所具有的行为,这些方法称为类的成员方法

    • 创建对象

      类是一种数据类型,用这个类型创建的变量也叫对象。

      因为类是引用数据类型,所以创建对象需要使用new关键字

      类名 对象名 = new 类名();
      
      Student st = new Student();
      
    • 对象调用属性和方法

      对象名.属性;
      对象名.方法名();
      
      st.name = "张三";
      st.eat();
      
      

    封装

    一、成员变量和局部变量

    区别 成员变量 局部变量
    定义范围 定义在类中,成员变量也叫实例变量,全局变量。 也叫属性 定义在方法或者语句中
    作用范围 作用在整个类中 作用在对应的方法或者语句中
    内存位置 存储在堆内存,并且在堆内存中被赋予初始值 存储在栈内存中,而且没有默认值,需要手动赋值
    生命周期 在对象被创建的时候创建,在对象被销毁的时候销毁 在方法或者语句执行的时候被创建,方法或者语句执行完毕就被销毁

二、匿名对象

  1. 所谓的匿名对象就是指没有名字的对象

  2. 注意事项

    1. 因为匿名对象没有名字,所以只能在创建的时候使用一次
    2. 匿名对象可以作为参数进行传递
    3. 匿名对象如果没有作为参数传递,那么在占内存中是没有引用的
  3. 代码示例

package com.oracle.object2;

public class StudentDemo {
    public static void main(String[] args) {
        // 这个对象的名字是s1
        Student s1 = new Student();
        s1.name = "张三";
        s1.study("Java");
        s1.play();


        //创建了一个Student对象
        //注意:像这种没有名字的对象称之为匿名对象
        new Student().study("Phon");
        new Student().play();
        new Student();

        //new几次就会创建几个对象,每一个对象的地址都是不一样的
        //System.out.println(new Student());
        //System.out.println(new Student());
        //System.out.println(new Student());


        //匿名对象可以作为参数传递
        printName(new Student());
    }


    public static void printName(Student st){
        System.out.println(st.name);
    }
}

三、构造方法

  1. 构造方法:在类中 方法名与类名一致,没有返回值,连void也灭有的方法

  2. 构造方法也叫构造函数,也叫构造器

  3. 作用

    1. 创建对象, 创建对象就是调用该类的构造方法。
    2. 对属性进行初始化
  4. 如果在类中没有手动给定构造方法,那么在编译的时候会自动添加一个默认的无参构造函数

  5. 如果在类中手动添加了构造函数,那么在编译的时候就不会再默认提供无参构造

  6. 构造方法虽然没有返回值类型但是依然可以使用return,使用return的作用是为了避免一些不合理的数据被赋值给属性

  7. 构造方法可以被重载

    package com.oracle.object2;
    
    /**
     * 司机类
     */
    public class Driver {
        String name;
        int age;
        char gender;  //性别
        String no;    // 驾驶证号
    
        /**
         * 无参构造
         * 用于创建对象
         */
        public Driver() {
        }
    
        public Driver(String a, int b, char c, String d) {
            name = a;
            if (b < 18 || b >= 70) {
                System.out.println("年龄不合适,司机最小年龄18,最大年龄69");
                return;
            }
            age = b;
            gender = c;
            no = d;
        }
    
        public void driver(){
            System.out.println(name+"今年"+age+"岁了,正在开车");
        }
    }
    
    

四、this关键字

  1. 因为在Java中所有的非静态方法和属性只能通过对象来调用,而在本类中如果先要调用本类中的方法或者属性,并没有本类的对象,所以需要使用this关键字来表示当前对象,调用属性和方法。

  2. this代表笨重中对象的引用,可以认为是一个虚拟的对象,用于在类内调用本类中非静态的方法和非静态的属性

  3. this语句表示在本类的构造方法中调用其他形式的构造方法。this语句必须放在构造方法的第一行。

    package com.oracle.object4;
    
    /**
     * 司机类
     */
    public class Driver {
        String name;
        int age;
        char gender;  //性别
        String no;    // 驾驶证号
    
        /**
         * 无参构造
         * 用于创建对象
         */
        public Driver() {
    
        }
    
        public Driver(String name) {
            this.name = name;
        }
    
        public Driver(String name,int age){
            this.name = name;
            this.age = age;
        }
    
        public Driver(String name ,int age,char gender){
           this(name,age);
            this.gender = gender;
        }
    
        public Driver(String name ,int age,char gender,String no){
            //自动调用本类中符合形式的构造方法
            //this(String,int,char) --->  Strudent(String ,int ,char)
            //this语句必须放在构造方法的第一行
            this(name,age,gender);
            this.no = no;
        }
    
    }
    
    

五、代码块

  1. 构造代码块

    1. 所谓的构造代码块是指定义在类中的{} 包裹起来的代码,也称为初始化代码块

    2. 无论调用哪个构造方法,构造代码块都会执行

    3. 构造代码块是在创建对象的时候先于构造方法执行的

      package com.oracle.object4;
      
      /**
       * 婴儿类
       */
      public class Baby {
          String name;
      
          /**
           * 在类中用{}括起来的代码成这位构造代码块/初始化代码块
           * 无论调用哪个构造方法,这个代码块都会执行
           * 构造代码块是先于构造方法执行的
           */
          {
              this.cry();
              this.eat();
          }
      
          public Baby(){
              System.out.println("~~~~~~");
      //        this.eat();
      //        this.cry();
          }
      
          public Baby(String name){
              this.name = name;
      //        this.cry();
      //        this.eat();
          }
      
          public void cry(){
              System.out.println("这个婴儿在哭");
          }
      
          public void eat(){
              System.out.println("这个婴儿在吃奶");
          }
      }局部代码块
      

2.局部代码块

  1. 所谓局部代码块,是指定义在方法中的{} 抱起来的代码

  2. 作用是限制变量的生命周期从而提高栈内存的利用率

    package com.oracle.object4;
    
    /**
     * 局部代码块
     */
    public class LocalCodeDemo {
        public static void main(String[] args) {
            System.out.println("Hello");
            
            {
                //限制了变量的使用范围,缩短了生命周期
                int i = 5;
    
                int j = 7;
    
                System.out.println(i + j);
            }
    
            System.out.println("~~~~");
        }
    }
    

六、面向对象的三大特征

  1. 封装
  2. 继承
  3. 多态
  4. 抽象(部分承认)

七、封装

  1. private : 私有的, 被private修饰的属性和方法只能在本类中使用,在其他任意类中都不可以使用。

  2. 封装是面向对象方法的重要原则,就是把对象的属性和方法结合为一个整体,并尽可能隐藏对象内部的实现细节。封装是一种信息隐藏技术。

  3. 形式

    1. 方法:方法其实就是封装的一种行间形式,通过将某段常用的代码提出而形成的一种新的形式

    2. 属性私有化,方法公开化 创建一个类,将类中的属性由private修饰,并且提供可以对外访问的方法, setXXX, getXXX

      setXXX用于设置属性值, getXXX用于获取属性值

    3. 内部类,内部类作为一种封装的形式,是为了让我们的代码结构更加紧凑。

  4. 作用:

    1. 提高了代码的复用性(降低了代码的冗余),安全性,使代码更加紧凑
    2. 使属性私有化 ------- 信息隐藏,更加安全
    3. 良好的封装能降低耦合度。
  5. 练习:封装一个学生类, 成员变量: 学号,姓名,性别,家庭住址 并测试1

八、一个标准的JavaBean

一个标准的JavaBean包含

  1. 私有化的属性

  2. 无参构造

  3. 全参构造

  4. get方法

  5. set方法

    package com.oracle.object5;
    
    /**
     * 学生类, 一个标准的JavaBean
     */
    public class Student {
        private String no;
        private String name;
        private char gender;
        private String address;
    
        public Student() {
        }
    
        public Student(String no, String name, char gender, String address) {
            this.no = no;
            this.name = name;
            this.gender = gender;
            this.address = address;
        }
    
        public String getNo() {
            return no;
        }
    
        public void setNo(String no) {
            this.no = no;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public char getGender() {
            return gender;
        }
    
        public void setGender(char gender) {
            this.gender = gender;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    }
    
    
posted @ 2023-08-07 19:59  wi_z  阅读(29)  评论(0)    收藏  举报