JAVA补课-DAY2:面向对象思想

IDEA自动生成一个标准的类

  • 生成Getter\Setter:Code -->Generate选择Getter and Setter,按Ctrl选中Getter、SetterOK就好啦

  • 生成无参数的构造方法:选择Constructor中的Select None就可以创建无参数的构造方法啦

  • 生成全参数的构造方法:按Ctrl选中局部变量OK就好啦

今日重点

  • 实现功能时,只关心已具有该功能的对象,而不是关心步骤处理过程
  • 三大基本特征:封装、继承、多态

类型和对象

  • 类:一组相关##属性##和##行为##的集合,抽象的
    • 属性:该事务状态信息,是什么
    • 行为:事务能够做什么
  • 对象,一类事物的实例,具体的
  • 类是对象的模板,对象是类的实例

类的定义和使用

  • 使用一个类:
    • 1.导包 import.包名.类名,相同包内省略
    • 2.创建,格式:类名称 对象名 =new 类名称();
    • 3.使用:①使用成员变量:对象名.成员变量②使用成员方法:对象名.成员方法
  • 注意事项:成员变量没有赋值,会有默认值
public class UseStudent {
    public static void main(String[] args) {
        Student stu=new Student();
        //成员变量
        System.out.println(stu.age);
        System.out.println("============");
        //成员方法
        stu.eat();
        System.out.println("============");
        //成员变量赋值
        stu.name="猪八戒";
        stu.age=18;
        System.out.println(stu.age);
        System.out.println(stu.name);
    }
}

一个对象的内存图

理解压栈、弹栈

  • 程序执行,先进栈
  • 创建对象,new出来的都保存在堆当中
  • 堆当中的成员从方法区来,成员方法保存的是方法区的成员方法地址
  • 成员自己的地址赋值给栈中存储
  • 根据地址可以找到对象
  • 调用方法(方法区地址),方法执行先进栈,执行完出栈
  • main方法执行完出栈

两个对象使用同一方法内存图

  • 第二个对象的方法仍然指向方法区同一块空间

两个引用指向同一对象的内存图

  • 类名称 类名 = 旧的类
  • 不new就会指向堆中同一区域,不补图了,脑补吧

使用对象类型作为方法的参数

  • 当一个对象作为参数,传递到方法中,实际传递的是对象的地址值
  • 对象的地址存储在堆当中,在new时创建的

使用对象类型作为返回值

  • 当一个对象作为方法的返回值时,返回的是对象的地址
  • 对象的地址存储在堆当中,在new时创建的

成员变量和局部变量的区别

  • 定义的位置不一样:成员变量:方法外部,直接写在类当中;局部变量:方法内部
  • 作用域不一样:局部变量作用域方法;成员变量作用域整个类
  • 默认值不一样:局部变量没有默认值,使用必须赋值方法的参数就是局部变量
  • 内存位置不一样:局部变量:位于栈;成员变量:位于堆区
  • 生命周期不一样:局部变量:随方法进栈而生,方法出栈而终;成员变量:随对象创建而生,对象被回收而终(Java程序员无法控制的)

面向对象三大特征——封装

  • 体现:①方法就是一种封装;②关键字private也是一种封装
  • 封装就是将细节信息隐藏起来,对外界不可见
  • private关键字作用和使用
    • 一旦使用private进行修饰,那么本类中仍然可以随意访问,但是超出本类范围就会报错!!!
    • 解决:使用专门成员方法,使用间接方法,用于获取、设置,即定义一对Getter/Setter方法。
    • 优点:专用Getter/Setter方法,,可以阻止不合理赋值,提高代码安全性
    • 注意事项:①getXxx或者setXxx命名②Getter方法不能有参数,返回值类型与成员变量对应③Setter方法不能有返回值,参数值类型与成员变量对应④bollean值Getter是isXxx,setter不变
  • this关键字的作用“重名区分”
    • 当方法的成员变量和局部变量重名的时候,会根据“就近原则”适应局部变量
    • 如需访问成员变量,就加关键字this
    • 通过谁调用的方法,谁就是this

构造方法

  • 专门用来创建对象的方法,当我们使用关键字new时,就是在调用构造方法
  • 格式:public 类名称(参数类型 参数名称){方法体}
  • 注意事项:①构造方法名称和类名必须完全一样,注意大小写②构造方法不写返回值类型,连void都不写③构造方法不能产生返回值④如果没有写构造方法,编译器会默认赠送一个构造方法,没有参数、方法体什么都不做。⑤一旦写了至少一个构造方法,编译器则不再赠送构造方法(涉及重载)

构造方法:

ublic class Dog {
    private int age;
    private String color;

    public Dog(){
        System.out.println("构造方法已经执行!!!");
    }
    //重载有参数的构造方法
    public Dog(int age,String color){
        System.out.println("第二个构造方法已经执行!!!");
        this.age=age;
        this.color=color;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
    public void setColor(String color){
        this.color=color;
    }
    public String getColor(){
        return color;
    }
}

使用构造方法

package Day2;

/**
 * @author 15205
 * @date 2020/5/3   0:24
 */
public class TestDog {
    public static void main(String[] args) {
        Dog dog=new Dog();//new以后的就是构造方法
        Dog dog1=new Dog(12,"black");
        dog1.setAge(13);
        System.out.println("小狗"+dog1.getAge()+"岁了,颜色是"+dog1.getColor());
    }
}

定义一个标准的类

  • 标准的类组成成分
    • 1.所有成员都用private关键字修饰
    • 2.为每一个成员变量编写一对Setter/Getter
    • 3.编写一个无参数的构造方法
    • 4.编写一个全参数的构造方法
  • 生成一个标准的类
    • 动手写一下成员变量
    • IDEA快捷键生成就好啦

END

猜你喜欢

转载自www.cnblogs.com/ysz-123/p/12819904.html