Java小记2(第二周) 基础之面向对象

面向过程和面向对象
1.并不对立,相辅相成
2.面向过程 专注于实现过程适用于简单的事物
3.面向对象 协作复杂
4.宏观上使用面向对象把握,微观处理依旧是面向过程
对象和类
对象(object):是一种数据管理,是类的实例

类(class):可以看做是对象的模板,是对象的抽象(抽出共同点进行归类)。
类的定义方式
类包含:
1.属性(用于定义该类或该类的对象所包含的数据或静态特征,作用范围:整个类)
2.方法(用于定义该类或该类实例的行为特征和功能实现)
类的构造
类型 变量名=new 类的构造函数();
面向对象的内存分析
Java虚拟机内存分为:栈stack、堆heap、方法区method area
栈:
1.方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)
2.JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)
3.栈属于线程私有,不能实现线程间的共享!
4.栈的存储特性“先进后出,后进先出”
5.栈是由系统自动分配,速度快!栈是一个连续的内存空间!

1.堆用来存储创建好的对象和数组(数组也是对象)(new)
2.JMV只是一个堆,被所有线程共享
3.堆是一个不连续的内存空间,分配灵活,速度慢!
方法区(静态区)
1.JVM只有一个方法区,被所有线程共享!
2.方法区实际也是堆,只是用于存储类、常量相关的信息!
3.用来存放程序中永远是不变或唯一的内容。(类信息【class对象】、静态变量、字符串常量等)
构造方法
用于对象的初始化
构造方法的第一句总是super();
1.通过new关键字调用。
2.构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能再构造器使用return返回某个值。
3.如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果自定义后系统将不会在有默认的
4构造器的方法名必须和类名一致
构造方法的重载
同名不同参
垃圾回收机制(Garbage Collection)
1.发现无用对象
2.回收无用对象占用的空间
发现无用对象的相关算法:
1.引用计数法:
堆里的每一个对象都有一个引用计数,被引用一次,计数加一。被引用变量变为null,则计数减一,直到计数为0,则表示变为无用对象,有点算法简单,缺点“循环引用(变量间相互引用)的无用对象”无法识别。
2.引用可达法(根搜索算法)
程序把所有的引用关系看做一张图,从一个节点GC ROOT开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余节点则被认为是没有引用到的节点,即无用节点。

通用的分代垃圾回收机制
分代:基于不同对象的生命周期不一样,不用生命周期的对象采用不同的回收机制来提高回收效率。对象分为三种状态:年轻态、老年态、持久态。Java将堆内存划分为Eden(年轻态)、Survivor(年轻态)、Tenured/old(年老态)空间。持久态在方法区中
垃圾回收过程
1.新创建的对象,绝大多数都存储在Eden中。
2.当Eden满了(到达一定比例)不能创建新对象,则会触发垃圾回收,将无用对象清掉,然后将Eden区中不能清空的对象存到另一个Survivor中
3.在创建新对象,当Eden再次满了再次调用Minor GC清理
4.从重复多次(默认15次)Survivor区中没有被清理的对象,全部复制到老年区中
5.当old区满了,则会触发一个一次完整的垃圾回收(FullGC)
this指针
创建一个对象的步骤:
1.分配对象空间,并将对象成员变量初始化为0或空
2.执行属性值的显式初始化
3.执行构造方法
4.返回对象的地址给相关的变量
this本质:
就是创建好的对象的地址,由于在构造方法调用前,对象已经创建。因此在构造方法中也可以使用this代表当前对象。
在构造器中调用另一个同名构造器形式:
this(参数);
并且要放在构造语句中的第一句
在static方法中不能用this,和访问类方法
this的最常用法
1.在程序中产生二义性之处,应使用this来指明当前对象;普通方法中,this总是指向调用该方法的对象。在构造函数中,this总是指向正要初始化的对象。
2.使用this关键字调用重载的构造函数,避免相同的初始化代码。但只能在构造方法中使用,并且必须位于构造方法的第一句。
3.this不能用于static方法中
static关键字
在类中,用static声明的成员变量为静态成员变量,也称类变量。类变量的生命周期和类相同不在是对象,在整应用程序执行期间都有效。
static修饰的成员变量和方法,从属于类,普通变量和方法从属于对象。
静态初始化块
构造方法用于对象的初始化!静态初始化块,用于类的初始化操作!在静态初始化块中不能直接访问非static成员。
静态块
语法形式:
static{
语句块
}
静态初始化执行顺序:
1.上溯到Object类,先执行Object的静态初始化块,在执行子类的静态初始化块,直到我们的类的静态初始化块结束为止。
2.构造方法执行顺序与上面顺序一样


main方法是程序执行的路口,必须要有,可以放在类中
一个Java文件可以写多个类但是只能有一个public修饰的类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ninkey_19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值