03- 面向对象和封装

一. 类

1.定义

  • 成员变量(属性):
    • String name;//姓名
    • int age;//年龄
  • 成员方法(行为)
    • public void eat ();//吃
    • public void sleep ();睡
  • 注意事项:
    • 成员变量是直接定义在类当中,在方法外边
    • 成员方法不要写static关键字
    • 成员变量如果没有赋值,会有一个默认值

2.使用

  • 导包:指出需要使用的类在什么位置

    • import 包名称.类名称
    • 对于和当前类属于同一个包的情况,可省略
  • 创建:

    • 类名称 对象名称 = new 类名称()
  • 使用:

    • 使用成员变量:对象名.成员变量名
    • 使用成员方法:对象名.成员方法()

3. 内存

  • 方法区:
    • 类信息:变量、方法等信息
    • 方法----地址值
  • 堆:
    • new出来的东西
    • 类的成员变量(带默认值)
    • 类的成员方法----地址值
  • 栈:
    • 对象名称、方法的成员变量、方法的执行
    • 根据地址映射到堆中----根据地址到方法区
    • 方法区中的信息进栈(压栈)--- main方法最先进栈
    • 语句执行完成后立刻马上出栈(先进后出)
  • 当一个对象作为方法参数传递时,实际上传递的是对象的地址值

引用类型作为参数,传递的是地址值

  • 当使用一个对象类型作为方法的返回值时,return返回的其实就是对象的地址值

4. 局部变量与成员变量

  • 定义的位置不一样:
  • 局部变量:在方法内部
  • 成员变量:在方法外部,直接写在类中
  • 作用域不同:
    • 局部变量:只有在方法当中才能使用,出了方法不能使用
    • 成员变量:在整个类中全都可以通用
  • 默认值不同:
    • 局部变量:没有默认值,手动赋值后才可以使用
    • 成员变量:有默认值,规则同数组
  • 内存的位置不一样:
    • 局部变量:位于栈内存
    • 成员变量:位于堆内存
  • 生命周期不一样:
    • 局部变量:随着方法进栈而诞生,随着方法出栈而消失
    • 成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失

二. 封装性

面向对象三大特征:封装、继承、多态

封装性在Java中的体现:

  • 方法
  • 关键字private
    • 间接访问private成员变量,就要在类中定义一对儿Setter/Getter方法
    • 方法名称必须要叫SetXxx、GetXxx
    • boolean类型的getter方法名称为isXxx
public class Person {
    String name;
    /*
    成员变量用Private修饰,则只能在本类中被使用,在其他地方不能直接访问
    间接访问则必须用Set/Get方法
    提高了代码安全性,有效防止不合理情况发生(年龄有限制,但int并不能有效限制住)
     */
    private int age;

    public void printPersion() {
        System.out.println("my name is:" + name + " i am:" + age);
    }
    //set方法没有返回值,必须带参数
    public void setAge(int num) {
        if (age < 100 && age >= 0) {
            age = num;
        } else {
            System.out.println("数据不合理");
        }
    }
    //get方法没有参数,必须有返回值
    public int getAge() {
        return age;
    }
}
public class Demo04Person {
    public static void main(String[] args) {
        Person person=new Person();
        person.name="arnold";
        //person.age=20;错误写法,不能直接访问
        person.setAge(20);
        person.printPersion();
    }
}

三. this关键字

封装的优化1----this关键字

  • 场景:当方法的局部变量和类的成员变量重名时,根据“就近原则”,优先使用局部变量
  • 解决重名分不开的情况:this.成员变量名
  • 通过谁(对象)调用的方法,谁就是this

四. 构造方法

封装的优化2----构造方法

  • 构造方法是专门用来创建对象的方法,当我们通过new关键字来创建对象时,其实就是在调用构造方法
  • 格式:
public 类名称(参数类型 参数名称){
    方法体
}
  • 注意事项:
    • 构造方法名称必须和类名称完全相同
    • 不要写返回类型,void都不要写
    • 没有返回值,不能return具体值
public class Student {
    //构造方法
    public Student() {
        System.out.println("无参构造方法执行啦");
    }
    public Student(){
        
    }
}
public class Demo05Student {
    public static void main(String[] args) {
        Student s = new Student();//调用构造方法
    }

}
  • 如果没有编写任何构造方法,编译器会“免费赠送”一个构造方法
  • 一旦编写了至少一个构造方法,编译器的默认构造方法将不起作用
  • 构造方法也是可以重载的(Overload)

五. 标准类

一个标准类(也叫Java bean)由四个部分组成:

  • 所有成员变量都要使用private关键字修饰
  • 为每一个成员变量编写一对儿Getter/Setter方法
  • 编写一个无参的构造方法
  • 编写一个全参的构造方法

IDEA中自动生成:

  • 快捷键:Alt+Insert

你可能感兴趣的:(03- 面向对象和封装)