面向对象-1

1.编程思维发展史

基于过程:从计算机角度 解决问题 机械思维 c
面向过程:上帝视角 解决问题干预问题 c++ c#
面向对象 c++
面向接口
面向切面
面向微服务和分布式

2.语言发展史

机器语言(01) —> 汇编语言 —> 高级语言(c/c++/Java) —>
超高级语言(Python)

3.面向对象

面试必问(通常作为第一个问题)
—–谈谈你对面向对象的理解?
从程序员的角度把世界上所有的东西用代码进行合理的呈现,java引入了类的概念.类是对具有相同或者相似特征以及行为的一些对象的抽象,对象是类的具体化.
我们改变了传统一步一步按部就班编写代码的思维,把对象抽象成类表示属性和方法的集合体.属性描述的是类的名词特征,方法描述的是类的行为特征.
面向对象包含四大基本特征:抽象/封装/继承/多态

4.类

Java中万物皆类
类是对具有相同或者相似特征以及行为的一些个体的抽象化.
金毛 京巴 博美 柴犬 德牧
犬类
类是抽象的概念,我们把相同或者相似的特征称为属性,属性是名词,比如人类的年龄/性别/姓名/身高…都是属性.把行为称为动作,动作是动词,比如人类的工作/学习/吃饭/睡觉…都是动作.
属性用变量来表示,动作用方法来表示

5.对象

对象是类的具体化,代表的是个体.
比如 你就是人类的一个对象.你家的狗是犬类的一个对象.(:D)
类是对象的抽象,对象是类的具体化

6.类的构建

class 表示一个类
语法:
新建一个Java文件,new java Class

public class 类名{

}

类名必须和.java文件的名字完全一样

属性:
类中的属性允许是各种数据类型,一般不允许设置初始值,且位于方法外面类里面,和所有的方法平级.
方法:
和昨天一样,不要加static
如果方法和main方法平级,需要添加static,否则不需要

public class Book {
//图书的属性
    String author; // 作者
    String name; // 书名
    double price; // 价格
    int number; // 编号
    String address; // 出版社

    // 图书的方法
    void beRead() {
        System.out.println("书被读取了...");
    }

    void beBreak() {
        System.out.println("书被销毁了...");
    }

    void beBorrow() {
        System.out.println("书被借出了...");
    }
}

7.对象的构建

使用类构造对象 —>把抽象化的东西具体化
类构建对象<=>类的初始化<=>初始化一个对象<=>实例化一个对象
↑都差不多意思
语法:
1)需要重新构建一个类,设置main方法
2)使用如下方式构建一个对象:

类名 对象的名字 = new 类名();
Book book01 = new Book();

8.对象属性的访问

语法:
对象的名字.属性的名字
book.name/book.author
给属性设置值:
对象的名字.属性的名字 = 值;

//构建一个对象
Book book01 = new Book();
book01.name = "儒林外史";
book01.author = "吴敬梓";
book01.address = "清华大学出版社";
book01.price = 20.55;
book01.number = 9821;

获取属性的值:
注意:如果不设置值,获取值的时候采用默认值.
属性的类型 变量名 = 对象的名字.属性的名字;

String name = book01.name;
System.out,println(book01.name); 
匿名对象
  • A:什么是匿名对象
    • new Person(“张三”, 46).tell();//通过匿名对象调用方法
    • 没有名字的对象
  • B:匿名对象应用场景
    • a:调用方法,仅仅只调用一次的时候。
      • 那么,这种匿名调用有什么好处吗?
        • 节省代码
      • 注意:调用多次的时候,不适合。匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。
    • b:匿名对象可以作为实际参数传递

9.class和Java文件的关系

一个Java文件中允许包含多个class,但是开发规范不允许(内部类和lambda除外)
有且只有一个被public修饰的类,且该class的名字要和Java文件的名字完全一致(大小写也一样)

10.面向对象中类的设计

1)明确类的名字,必须是个名词,命名规范和标识符命名规范相同,特别注意首字母要求大写
2)明确属性的类型/个数和名字,根据需要确定
3)明确方法的返回值类型/参数列表和名字,根据需要确定

11.对象方法的调用

语法:
对象名.普通的方法调用的语法();

12.类中代码的复用

类里面的属性和方法,可以被当前类的所有对象共享.
但是A对象关于a属性的值专属于A对象的,B对象关于b属性的值专属于B对象.
代码的复用性和对象之间的隔离性共存.

13.类中方法对于属性的访问

类中的方法可以直接使用本类中的属性
方法调用的时候需要设置相关属性的值

14.构造方法

是方法,但是比较特殊
特点:
1)该方法的方法名必须和类名完全一致,首字母大写.
2)该方法没有返回值类型,连void都不能设置.
3)该方法内部一般不允许存在较为复杂的结构.
分支结构/循环结构
4)该方法无法被程序员调用,在构建对象的过程中该方法被系统自动调用.(new
类名();)
5)一个类至少包含一个构造方法
6)如果程序员不写构造方法,系统会自动生成一个默认的方法体为空的不可见的构造方法;如果写了构造方法,系统自动生成的构造方法会消失.
7)构造方法允许重载

语法:

类名(参数列表){
    方法体
}

可以在构造方法中的第一行使用this来调用本类其他重载的构造方法

Public Person(){
    System.out.println("1");
}

Person(String name,int age){
    this.();
    this.name = name;
    this.age = age;
    System.out.println("2");
}
Person(String name,int age,int num){
    this(name,age);
    this.num = num;
    System.out.println("3");
} 

15.eclipse断点调试

场景(允许调试的位置):
1)出现bug或者未知的错误的可能位置;
2)方法的调用位置;
3)System.out.println()输出位置
4)其他任何合理的位置

断点就是代码执行到该位置”之前”暂时停顿,之后我们可以根据实际情况手动放行该代码.

16.构造方法的重载

我们在某些情况下可以使用构造方法对类的属性进行初始化
在构建对象的时候需要在new
className();的小括号里面指定参数的值来决定调用哪个构造方法

public class Doctor {
    String name;
    String sex;
    String type;
    int age;

    Doctor() {
        System.out.println("无参构造");
    }

    Doctor(String n, String s, String t, int a) {
        name = n;
        sex = s;
        type = t;
        age = a;
        System.out.println("全参构造");
    }

    Doctor(String n, String s, String t) {
        name = n;
        sex = s;
        type = t;
        System.out.println("缺参构造");
    }

    @Override
    public String toString() {
        return "Doctor [name=" + name + ", sex=" + sex + ", type=" + type + ", age=" + age + "]";
    }
}
public class DoctorTest {
    public static void main(String[] args) {
        // 构建医生对象
        Doctor doctor = new Doctor();
        System.out.println(doctor);
        Doctor doctor2 = new Doctor("华佗", "男", "全科", 18);
        System.out.println(doctor2);
        Doctor doctor3 = new Doctor("张仲景", "男", "内科");
        System.out.println(doctor3);
    }
}