BCSP-玄子JAVA开发之面向对象编程CH01_对象和封装笔记

BCSP-玄子JAVA开发之面向对象编程CH01_对象和封装笔记

6.1 JAVA 的核心思想就是OOP

6.1.1 面向过程与面向对象

面向过程(Procedure Oriented)

  • 按自顶向下的步骤依次执行的过程式解决方法,每个步骤可定义为一个模块

  • 优点:性能高,流程和步骤清晰,容易理解

  • 不足:复用率低,扩展性差,维护难度高

面向对象(Object Oriented)

  • 将构成问题的事物拆解成各个对象,建立对象的目的是为了描述每个事物在整个解决问题步骤中的行为

  • 优点:易扩展、代码复用率高、利于后期扩展和维护,提升开发效率

  • 不足:一定程度上增加系统开销

6.1.2 面向对象的定义

面向对象编程:(Object-Oriented Programming);简称OOP

面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装) 数据

6.1.3 面向对象三大特征

  • 封装
  • 继承
  • 多态

6.2 类和对象

6.2.1 类与对象的定义

  • 类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起

  • 对象是具有类,类型的变量。类和对象是面向对象编程技术中的最基本的概念

6.2.2 类与对象的关系

  • 类是对象的类型,对象是类的实例
  • 类是抽象的,不占用内存,而对象是具体的,占用存储空间
  • 类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板
Student
int age
String name
+study()
package CH05_JAVAObjectOriented;

//类与对象的创建
public class XZ01_Student {
    // 学生类
    String name;
    // 默认值 null
    int age;
    // 默认值 0

    public void study() {
        System.out.println(this.name + "在学习");
        // this 代表当前类的属性

    }
}
package CH05_JAVAObjectOriented;

//一个项目应该只存在一个 Main 方法
public class XZ01_Main {
    public static void main(String[] args) {
        //类:抽象的,实例化
        //类实例化后会返回一个自己的对象!
        XZ01_Student xiaoMing = new XZ01_Student();
        //				使用new关键字创建对象
        System.out.println(xiaoMing.name);
        System.out.println(xiaoMing.age);
        xiaoMing.study();
        XZ01_Student xiaoHong = new XZ01_Student();
        System.out.println("------------------------");
        xiaoHong.name = "小红";
       	// 对属性进行赋值
        xiaoHong.age = 16;
        System.out.println(xiaoHong.name);
        System.out.println(xiaoHong.age);
        xiaoHong.study();
        //xiaoHong,xiaoHong就是一个Student类的具体实例!

    }
}

6.3 构造器

类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下特点:

  • 方法名和类名相同

  • 没有返回值类型

  • 一旦自定义构造方法,系统将不再提供默认无参构造方法

package CH05_JAVAObjectOriented;

public class XZ02_Constructors {
    //一个类即使什么都不写,它也会存在一个方法
    //显示的定义构造器

    String name;

    public XZ02_Constructors(String name) {
        //有参构造:一旦定义了有参构造,无参就必须显示定义
        //只要定义了有参构造就也定义个无参构造
        this.name = name;
    }

    public XZ02_Constructors() {
        this.name = "玄子";
    }
}
package CH05_JAVAObjectOriented;

public class XZ02_Main {
    public static void main(String[] args) {
        XZ02_Constructors constructors = new XZ02_Constructors("玉玉诏");
        System.out.println(constructors.name);
        // 这里看不懂可尝试 Debug 一下
    }
}

6.3.1 快捷生成

快捷键: Alt + Instant

笔记本用户根据自己机型考虑加上 Shift

即同时按下 Alt + Shift + Instant


6.4 This 关键字

this关键字是对一个对象的默认引用

  • 调用成员变量

  • 调用成员方法

  • 调用已定义的构造方法

this 关键字是在对象内部指代自身的引用,所以它只能调用实例变量、实例方法和构造方法,不能调用类变量和类方法,也不能调用局部变量

private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

6.5 方法的重载

package CH03_JAVAMethod;

//方法的重载
public class XZ02_OverloadingOfMethod {
    public static void main(String[] args) {
        //      声明变量x和y接收用户输入变量
        int result = add(10, 20, 30);
        int result2 = add(10, 20);
        double result3 = add(10, 20, 30.6, 40);
        //      方法名相同,根据传递参数数量,类型不同自动判断
        System.out.println("和为:" + result);
        System.out.println("和为:" + result2);
        System.out.println("和为:" + result3);
        //        输出返回值
    }

    public static int add(int x, int y) {
        //      修饰符     返回值类型 方法名(参数类型 参数名){
        int result = 0;
        //        声明变量返回结果
        result = x + y;
        //        方法体
        return result;
        //      return 返回值;
    }

    public static int add(int x, int y, int z) {
        //      修饰符     返回值类型 方法名(参数类型 参数名){
        int result = 0;
        //        声明变量返回结果
        result = x + y + z;
        //        方法体
        return result;
        //      return 返回值;
    }

    public static double add(double x, double y, double z, double n) {
        //      修饰符     返回值类型 方法名(参数类型 参数名){
        double result = 0;
        //        声明变量返回结果
        result = x + y + z + n;
        //        方法体
        return result;
        //      return 返回值;
    }

}

方法重载是指同一个类中包含了两个或两个以上的方法,它们的方法名相同,方法参数的个数或参数类型不同

类的成员方法和构造方法都可以进行重载

6.5.1 方法的重载规则

  • 必须在同一类中
  • 方法名相同
  • 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)
  • 返回值类型随意

6.6 封装

package CH05_JAVAObjectOriented;
//封装
public class XZ03_Encapsulation {

    private String name;
    private int age;
    private char sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
//       为了避免赋值错误,需对属性设置限制,在set()方法中进行验证
        if (age >= 100) {
            System.out.println(age + ":为非法数据");
            this.age = 18;
        } else {
//            this代表当前对象
            this.age = age;
        }
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }
}
package CH05_JAVAObjectOriented;

public class XZ03_Main {
    public static void main(String[] args) {
        XZ03_Encapsulation encapsulation = new XZ03_Encapsulation();
        encapsulation.setName("玄子");
        encapsulation.setAge(12);
        encapsulation.setSex('男');
        System.out.println(encapsulation.getName());
        System.out.println(encapsulation.getAge());
        System.out.println(encapsulation.getSex());
        System.out.println("------------------");
        XZ03_Encapsulation encapsulation2 = new XZ03_Encapsulation();
        encapsulation2.setAge(112);
        System.out.println(encapsulation2.getAge());
    }
}

6.6.1 面向对象三大特征之一 :封装

  • 将类的某些信息隐藏在类内部,不允许外部程序直接访问

  • 而是通过该类提供的方法来实现对隐藏信息的操作和访问

将属性私有通过get/set方法操作属性

6.6.2 封装的好处

  • 隐藏类的实现细节
  • 方便加入控制语句
  • 方便修改实现
  • 只能通过规定方法访问数据

6.6.3 快捷生成

快捷键: Alt + Instant

笔记本用户根据自己机型考虑加上 Shift

即同时按下 Alt + Shift + Instant

选择Getter 或 Setter


6.7 访问修饰符

类的访问修饰符

修饰符 \ 作用域 同一包中 非同一包中
public 可以使用 可以使用
默认修饰符 可以使用 不可以使用

类成员的访问修饰符(属性、方法)

修饰符 \ 作用域 同一类中 同一包中 子类中 外部包
private 可以使用 不可以使用 不可以使用 不可以使用
默认修饰符 可以使用 可以使用 不可以使用 不可以使用
protected 可以使用 可以使用 可以使用 不可以使用
public 可以使用 可以使用 可以使用 可以使用

6.8 Static 关键字

public class Student {
   public static String name;
}
public class Main {
    public static void main(String[] args) {
        Student.name ="玄子";
        //通过类名直接调用,不需再消耗资源反复创建对象
    }
}
  • 使用static修饰的属性称为静态变量或类变量

  • 没有使用static修饰的属性称为实例变量

  • 程序中的类信息只会加载一次

  • 每次用new 来创建对象的时候都会分配一个新的空间来保存相关的非静态字段信息

  • 静态成员属于类级别的,为所有的对象所共享,不单独属于某一个对象, 所以调用静态成员要用类名来调

  • 在静态方法的定义中只能调用静态的方法和静态的字段或属性

static代码块在JVM初始化阶段执行,只会执行一次一般情况下, 使用static代码块对static变量进行初始化

方法里,不可以定义static变量,即:类变量不能是局部变量


6.9 Final常量

public class Student {
   public static String name;
   public final int Age = 18;
}
public class Main {
    public static void main(String[] args) {
        Student student = New Student();
        //student.age=20;
    }
}
  • 常量名一般由大写字母组成
  • 声明常量时一定要赋初值
  • 见名知意,便于阅读,易于代码修改和维护

6.10 使用static修饰与非static修饰的类成员的不同

static
非private修饰
非static
private修饰
属性 类属性
类变量
实例属性
实例变量
方法 类方法 实例方法
调用方式 类名.属性
类名.方法()
对象.属性
对象.方法()
对象.属性
对象.方法()
归属 单个对象

在静态方法中,不能直接访问实例变量和实例方法

在实例方法中,可以直接调用类中定义的静态变量和静态方法

BCSP-玄子JAVA开发之面向对象编程CH01_对象和封装笔记

你可能感兴趣的:(JAVA,java,开发语言)