面向对象进阶

03.06
在这里插入图片描述在这里插入图片描述

面向对象进阶

jvm内存的分配

  1. xxx.java-----xxx.class (编译器)
  2. xxx.class ---- 类加载器(常见的有三种)----在内存分配空间
  3. jvm会将内存分为5块:

栈 :java栈区域比较小,空间1M,特点:(存取数据)速度非常快,在栈里面执行的基本上都是快速的任务,基本数据类型和对象的引用

堆:new出来对象都存放在堆里面,堆里面的每一个对象都会产生一个唯一的地址,内存地址赋值给栈里面的引用。堆里面的对象需要垃圾回收机制才能销毁。要销毁一个对象 对象=null
程序员无法控制 ,java堆比较占内存的地方

方法区:又称为静态区,
(1)、类class
(2)、常量
(3)、成员方法
(4)、静态方法
(5)、静态变量 public static int i;
被所有线程共享的区域
常量池:开发过程中涉及到的自变量

pc寄存器:主要用来保存jvm的指令和地址

本地方法栈:
主要用来保存native方法进入区域的地址

栈和堆的内容:
栈:
栈是一端受限,一端运行操作的线性表。
理解:
先放的数据后取,后放先取,对于栈来说,先进后出LIFO(last in first out)
存储数据有两种结构:
顺序存储:首先要分配一个足够大的数组。控制这个结构,一端进行增删操作,一端不允许操作。在这个结构中,让操作的称为栈顶,不让操作的叫栈底。

链式存储:采用链表结构,控制了入栈和出栈的一个端口。控制一端不能操作
有点 :要多少申请多少,但是用完了一定要释放空间
堆:其实就是经过排序的一种树形的数据结构,堆的数据结构指的就是二叉树,堆可以看成是一棵树的数组结构
需要从书架上取出一本书,不需要将其他书都拿下来,直接取你想要的书

内存操作

string s1=“abc”;
string s2=“abc”;
abc存放在常量池中
在这里插入图片描述

方法的重载和继承

方法:
1、定义方法的语法 public static void add(){}
2、方法的参数,形参和实参
3、方法的返回值,可以是基本类型,可以是对象
4、方法的内存分区

可能遇到的问题
成员变量和局部变量
在这里插入图片描述

方法的重载:

println scanner 是一种重载
一个行为可能因为条件不同而执行的结果不同
在一个类中,方法的名字相同,但是方法的参数或者方法参数的个数、 方法参数的类型、 方法参数的位置不同,把相同方法名字的方法称为重载方法
好处:减少了方法的冗余,更利于用户来访问
返回值不影响方法的重载

继承

面向对象特征:继承、封装、(抽象)、多态

对象与对象(类)之间存在哪些关系

1、关联关系:最弱的一种关系(学生类中包含了老师)has-a 什么有什么
2、继承关系:(比较强的一种关系)is -a 比如兔子是食草动物 你能够用什么是什么说通
3、聚合关系:(比较强的关系)聚集、组合
如何判断:什么是什么的一部分就属于聚合关系
4、实现关系:子类要去实现父接口

语法
class Animal {

}
class rabbit extends Animal{
rabbit称为子类,Animal称为父类
}
子类中的this.类不会报错

java中继承的特性

1、子类继承父类,子类可以拥有父类的所有属性(非私有的属性)和(非私有的)方法
访问修饰符范围,privte只能本类用,public所有类都可以用
2、子类可以拥有自己的属性和方法,对父类进行了扩展
3、子类也可以实现父类的方法
4、java的继承是单继承,一个类只能有一个父类(exends),c++多继承,一个类可以多重继承(鳄鱼继承陆地类,陆地类继承水下类)

缺点:
提高了类与类之间的耦合,代码之间联系非常紧密,代码独立性比较差,以后修改或者替换不容易

构造器(构造方法)

在这里插入图片描述
特点:没有返回值,方法名和类名一样

作用:1、只要创建对象采用的是new关键字,首先要执行的就是构造器,
2、初始化属性,使用对象的时候直接能获取到初始化的值
构造器创建的对象。
在这里插入图片描述
创建对象还是jvm来创建,但是构造器将创建好的对象返回出去,调用者才能访问这个对象
在这里插入图片描述
如果说没写构造器,编译器自动给每个类加上无参构造器
但是如果你写了有参构造,就必须写上无参构造

构造器也可以重载
在这里插入图片描述
创建对象的时候使用有参构造函数 堆里面的对象自动初始化属性
写有参构造之前,先写一个无参构造

面试问题:

子类构造器与父类构造器谁先产生?
父类构造器先产生

object对象

所有类都会继承object
object是所有java类的根基类,如果在类中没有extends显示的去继承类,默认就继承object类

创建的任何一个对象都可以使用object提供的方法
怎么用?

方法的重写

概念:
当一个子类继承父类的时候,子类与父类方法名称一样、参数类型一样、参数个数一样、类型也一样,就称子类重写了父类的方法。
子类也叫派生类
父类也叫基类
作用:
父类提供的方法有可能无法满足子类的业务,所以子类可以重写父类的方法来扩展自己的内容
子类重写父类的方法,调用方法的时候优先调用子类的方法
规范:
1、子类的方法名字、返回值、参数个数、类型、位置都必须与父类保持一致
2、子类的方法访问修饰符可以跟父类一样,也可以比父类的访问修饰符要小(范围小)
3、子类重写的方法抛出的异常不能比父类抛出的异常更多
@Override
1、可以当成注释来用,看到这个标记就知道当前方法是重写方法
2、增加代码的可读性,可以根据标签判断哪些方法是重写,哪些方法是子类本身的
3、编译器会根据这个标签来检测我们写的代码,子类在重写的时候不满足重写的规范,编译器给你提示
重写和重载的区别:
1、重写发生在子类和父类之间,重载发生在一个类里面
2、重写扩展(增强)了父类的行为,重载表现了相同行为不同的表现方式(多态)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值