Java学习笔记之面向对象思想

该笔记源自学习《2020-最新全套黑马57期》时所创作

面向对象基础

对象的创建和使用

  • 导包

    import 包名称.类名称
    
    • 指出所需要的使用的类在什么位置
    • 若和当前类属于同一个包,则省略导包语句不写
  • 创建

    • 格式:类名称 对象名 = new 类名称();
    //根据student类,创建一个名为stu的对象
    Student stu = new Student();
    
  • 使用

    • 用成员变量:对象名.成员变量名; 若没赋值,则会有一个默认初始值

    • 用成员方法:对象名.成员方法名(参数);

对象调用方法的内存图

一个对象调用一个方法内存图

一个对象的内存图示意

栈:先进先出

  • 当成员方法被调用时,会入栈,压在main方法上面;
  • 当成员方法运行结束,会弹栈,此时继续执行main方法;
  • main方法运行结束,会弹栈,所有内存会消失,程序结束。

堆:

  • new创建的对象都储存在堆里面,并也会有个地址,使得在调用对象时栈的寻址(如红色线所示)
  • 成员方法在堆中存储的是地址,从而寻址在方法区中找到对应方法调用运行入栈(如绿色线所示)

方法区:

  • 存储成员变量
  • 存储成员方法

两个对象调用一个方法内存图

两个对象的内存图示意

  • 原理和一个对象调用一个方法内存图一样,只是当第二个对象调用时与第一个对象调用井水不犯河水,根据对象中方法标记(即地址值),去类中寻找方法信息,赋值堆中对象地址。
  • 当引用类型作为参数,传递到方法中或者作为方法返回值的时候,则传递的值或返回的值是地址值。

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

局部变量成员变量
定义在类的位置方法内部类中,方法外
作用范围方法中,出了方法就不能用整个类可以通用
默认值没有,需先定义,手动赋值,再使用有,规则同数组
在内存中的位置栈内存堆内存
生命周期随着方法调用而诞生,随着方法调用完毕而消失随着对象创建而诞生,随着对象被垃圾回收而消失

前三点区别用代码解释说明如下:

public class VariableDifference {

    String name; //成员变量

    public void methodA() {
        int num = 20; //局部变量

        System.out.println( num );
        System.out.println( name );
    }

    public void methodB( int param ) {
        //方法的参数是局部变量
        System.out.println(param);//这里局部变量未赋值但不出错,是因为参数在方法调用时,一定会被赋值。
      	//因为方法需要被调用才能执行,调用方法一定会传参数,即被赋值。

        int age; //局部变量
//      System.out.println( age ); // 没赋值不能用
//      System.out.println( num ); // 错误写法,num是方法A中的局部变量,不能用
        System.out.println( name );// 输出的会是一个默认值
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值