第一章 Java基础-面向对象

一、面向对象五个基本特性

1、万物皆为对象。

2、程序是对象的集合,通过发送消息来告知彼此所要做的。

3、每个对象都有自己的由其他对象所构成的存储。

4、每个对象都有其类型

5、某一特定类型的所有对象都可以接收同样的消息

二、Java访问关键词

public、protected、private,访问范围由大到小public>protected>private。

public紧随其后的元素对任何人都是可用的。

protected除类型创建者、类型继承者子类和类型内部方法之外任何人都不能访问。

private除类型创建者和类型内部方法之外任何人都不能访问。

三、基本数据类型

基本类型大小最小值最大值包装器类型
boolean---Boolean
char16-bitUnicode 0Unicode 2^16-1Character
byte8 bits-128127Byte
short16 bits-2^152^15-1Short
int32 bits-2^312^31-1Intgeger
long64 bits-2^632^63-1Long
float32 bitsIEEE754IEEE754Float
double64 bitsIEEE754IEEE754Double
void---Void

四、java生命周期

一个java类的完整的生命周期会经历加载-连接-初始化-使用-卸载五个阶段

1、加载(loading)

类加载器分为:BootstrapClassLoader,ExtClassLoader,AppClassLoader。

主要做三件事:

  1. ·类加载器(ClassLoader)通过一个类的全称获取二进制Class文件,加载到JVM内存中。
  2. 将字节流所代表的静态存储结构转化为JVM方法区的运行时数据结构。
  3. 在内存中生产一个代表此类的java.lang.Class的对象,作为访问这个类的入口。

2、连接(Linking)

  1. 验证:确保java类型的数据格式正确;验证作为连接阶段的第一个阶段,这个阶段确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。验证内容:文件格式验证、元数据验证(父类、父类的继承链、抽象方法实现、字段和方法是否与父类矛盾)、字节码验证、符号引用验证。
  2. 准备:为该类分配内存;就是为类的静态变量分配内存并设为jvm默认的初值,对于非静态的变量,则不会为它们分配内存。静态变量的初值是由JVM自动分配初始值。
  3. 解析:解析阶段就是虚拟机将常量池中的符号引用转化为直接引用的过程。

3、初始化(Initialization)

执行静态变量的初始化和静态Java代码块,并初始化已设置好的变量值。需要注意的是加载、验证和装备阶段只会进行一次,而初始化是可以重复进行的。在准备阶段,类变量已经被初始化过一次系统提供的默认值,而在初始化阶段,则是根据java代码中实际指定的值去初始化类变量和其它内容。

触发对象初始化的场景:

通过new关键字实例化对象、读取或设置类的静态变量、调用类的静态方法。
通过反射方式实例化对象,如Class.forName()方法。
初始化子类的时候,会触发父类的初始化。
虚拟机启动时,初始化一个执行主类(也就是直接调用main方法)。
使用(反)序列化机制创建对象。
使用JDK7的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getStatic、REF_putStatic、RE_invokeStatic的方法句柄,并且这个方法句柄对应的类没有进行初始化,则需要先触发其初始化。

初始化顺序:

父类静态变量父类静态代码块子类静态变量子类静态代码块
父类非静态变量父类非静态代码块父类构造器
子类非静态变量子类非静态代码块子类构造器

4、使用(Using)

实例化一个类大概有四种途径:

New操作符;
调用Class或者Java.lang.reflect.Constructor对象的newInstance()方法;
调用任何现有对象的Clone()方法;
通过java.io.ObjectInputStream类的getObject()方法反序列化;

实例化步骤:

在堆中为保存对象的实例变量分配内存;
为实例变量初始化为默认的初始值;
为实例变量赋正确的初始值,有三种技术完成赋值:
如果对象是clone() 创建的,jvm把原实例变量中的值拷贝到新对象中;
如果是通过ObjectInputStream类的readObject()调用反序列化的,jvm从输入流中读取的值来初始化实例变量;
jvm调用对象的实例化方法把对象的实例变量初始化为正确的初始值;

5、卸载(Unloading)

jvm实现必须具有某种自动堆存储管理策略,大部分是使用垃圾收集器。

如果类声明了 void finalize()方法,垃圾收集器在释放实例内存前会执行这个方法。垃圾收集器自动调用的finalize()方法抛出的任何异常都将被忽略。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值