面向对象的基本概念

指以属性和行为的观点去分析现实生活中的事物
面向对象编程是先用面向对象的思想进行分析,再用编程语言进行表达(当然面向对象的语言表达面向对象这种范式更方便,但是面向过程的语言其实也能表达)

类和对象

类是模板,对象是一个客观存在的实体。如同人类和某个人的关系。

Java 面向对象相关语法

Person p = new Person();
// 其中,person对象在堆区,p在栈区,指向堆区中的person对象。

默认值

成员变量的默认值分基础类型和引用类型。基础类型默认值是0或false,引用类型默认值永远是null。

定义方法

public class Person {
    void show(int notUsedArg) {
        System.out.println("11");
    }
}

可变长参数

图片说明

//个人理解就是java语言层面做了个数组的语法糖,这样的语法传参的时候不用自己包一个数组
public class Person {
    void show(String... args) {
        for (int i=0;i<args.length;i++) {
            System.out.println(args[i]);
        }
    }
}

参数传递的注意事项。

引用类型的变量其实存储的都是堆区地址,形参实参结合的时候就是把地址复制一份给形参。
严格记住这个特点就不会出大问题。

构造方法与封装

构造方法语法

public class Person {
    //如果自己不写构造方法,编译器自动生成一个默认构造方法,无参。
    //如果自己定义了构造方法,编译器就什么也不做了。
    String name;
    public Person() {
    }
    public Person(String name) {
        this.name = name;
    }
    void show(int notUsedArg) {
        System.out.println("11");
    }
}

重载

重载发生要求参数的个数不同/类型不同/顺序不同
而判断方法能否构成重载的核心是调用方法时能否分清

this

通常是一个对象的引用。如果在构造函数里使用,就是正在构造的对象。如果在成员方法里使用,就是调用方法的对象。其他地方用一般都是变量指向的new出来的对象。
有了this可以做很多事,比如区分不同的对象(指jvm去区分)、区分变量是形参还是类的成员变量,返回this可以实现链式调用,调用其他构造函数等等。
我们不用每次都写this是因为编译器会自动帮我们加上。

封装

封装本身是个概念,没有具体的定义。
在这里提到封装主要是想说一说在java里如何写出好的代码,如何设计并实现好的类。
毕竟基于软件开发的经验,我们可以有一点小的“套路”,用这种套路来开发代码,这样比较符合规范,便于扩展。
大概的操作步骤如下:
1 私有化成员变量
2 提供公有的getter和setter
3 在公有的构造函数里调用setter进行赋值