学习笔记

Java基础

## Jvm的内存结构
Jvm内存结构主要分为5部分:方法区;栈;堆;本地方法栈;寄存器

方法区:存储可运行的class文件,包含方法,静态成员,常量等;
栈:方法运行时使用的内存,特点是“先进后出”;
堆:存储new出来的数组或对象;
本地方法栈:Jvm在调用操作系统功能时使用;(与开发无关)
寄存器:CPU调用;(与开发无关)

## 对象的生命周期
对象的生命周期分为:创建阶段;应用阶段;不可视阶段;不可到达阶段;可收集阶段;
终结阶段;释放阶段;

创建阶段:创建一个对象

应用阶段:对象至少被一个强引用持有称为处于应用阶段,一个对象可以有多个强引用,GC不会回收处于应用状态的对象

不可视阶段:强引用对象超出其作用域之后就变为不可视,当一个对象处于不可视阶段是,说明程序本身不再持有该对象的不论说明强引用,尽管这些引用仍然是存在的。

不可到达阶段:在虚拟机所管理的对象引用根集合再也找不到直接或间接的强引用,这些对象通常是指所有线程栈中的临时变量,所有已装载的类的静态变量或者本地代码接口的引用。这些对象都是要被垃圾回收回收的预备对象,但此时该对象并不能被垃圾回收器直接回收。

可收集阶段:当垃圾回收器发现该对象已经处于“不可达阶段”而且垃圾回收器已经对该对象内存空间的又一次分配做好了准备时,则对象进入了“收集阶段”。

终结阶段:当对象运行完finalize()方法后仍然处于不可达状态时,则该对象进入终结阶段。在该阶段是等待垃圾回收器对该对象空间进行回收。

释放阶段:垃圾回收器对该对象的所占内存空间进行回收或者再分配了,则该对象彻底消失了,称之为“对象空间的又一次分配阶段”。

## 的生命周期
类的生命周期是:加载;验证;准备;解析;初始化;使用;卸载;

加载:加载过程就是把class字节码文件载入到虚拟机中

验证:验证的目的是确保class文件的字节流中信息符合虚拟机的要求,不会危害虚拟机安全,使得虚拟机免受恶意代码的攻击

准备:准备阶段的工作就是为类的静态变量分配内存并设为jvm默认的初值,对于非静态的变量,则不会为它们分配内存。静态变量的初值为jvm默认的初值,而不是我们在程序中设定的初值。(仅包含类变量,不包含实例变量).

解析:虚拟机将常量池中的符号引用替换为直接引用,解析动作主要针对类或接口,字段,类方法,方法类型等等。

初始化:在该阶段,才真正意义上的开始执行类中定义的java程序代码,该阶段会执行类构造器

使用:使用该类所提供的功能,其中包括主动引用和被动引用。

卸载:从内存中释放

## 基本数据类型引用数据类型的区别
基本数据类型有:byte(Java中最小的数据类型);short(短整型);int(整型);long(长整型);float(浮点型);double(双精度浮点型);char(字符型);boolean(布尔型);

引用类型有:类;接口类型;数组类型;枚举类型;注解类型;

一、作用不同:
引用类型一般都是通过new关键字创建对象,然后把这个对象赋予给相应的变量;
基本类型是直接赋值就可以了;
二、参数传递不同:
引用类型是传递地址值(引用传递);
基本类型是传递值(值传递);
三、比较不同:
引用类型比较的是地址值;
基本类型比较的是值;
四、类型不同:
引用类型分为:强引用(StrongReference);软引用(SoftRefernce);
弱引用(WeakReference);虚引用(PhantomReference);
基本类型主要分为:整型浮点型字符型布尔型

## superthis的区别
一、指代不同
super是当前对象里对父类对象的引用
this是指对当前类中对象的引用
二、调用函数的不同
super()是调用父类中的某一个构造函数
this()是调用本类中另一种形式的构造函数
(二者都默认是构造函数中的第一条语句,所以不能同时使用)
三、引用对象不同
super:引用当前对象的直接父类中的成员
this:代表当前对象名

## 接口
接口是极端的抽象类,结构设计工具,用来解耦合,隔离现实。
接口的定义:
公开的抽象方法,公开的常量,公开的内部类,内部接口
1>接口只能定义常量
2>接口只能定义抽象方法(jdk8版本以后可以定义静态方法)
3>接口只能继承接口,不能继承普通的类和抽象类
4>接口没有构造方法

## Java中继承的特点
1>Java只支持类的单继承,支持接口的多继承
2>私有成员不能继承
3>构造方法不能继承
4>类与类之间的“ is a”关系

## 抽象类
抽象类是指包含抽象方法的类,用abstract修饰;不能被实例化,只能创建子类对象(不能被new)
抽象方法是指只有方法声明,没有方法体的方法,用abstract修饰(要求子类必须重写,抽象子类除外)
(抽象类不一定有抽象方法,有抽象方法的类一定是抽象类)

## 多态
多态是指同一操作作用于不同的对象,可以产生不同的效果(父类型的引用指向子类型的对象)
多态的好处:
1>应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可,大大提搞程序的复用性。//继承
2>派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。//多态的真正作用

MySQL的默认编码是Latin1,不支持中文
需要设置为 CHARSET=utf-8

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值