Java类和对象
■ 类的三要素:属性(field)、构造器(constructor)和方法(method)。
■ 内存分析:
栈:
①每个线程私有,不能实现线程间的共享!
②局部变量存放于栈中。
③栈是由系统自动分配,速度快!栈是一个连续的内存空间!
堆:
①放置new出来的对象!
②堆是一个不连续的内存空间,分配灵活,速度慢!
方法区:
①被所有线程共享!
②用来存放程序中永远是不变或唯一的内容。(类代码信息。静态变量、字符串常量)
■ 属性(field,或者叫成员变量)
属性用于定义该类对象包含的数据或者静态属性。
属性作用范围是整个类体。
在定义成员变量时可以对其初始化没如果不对其初始化,Java使用默认的值对其初始化。(数值:0,0.0,char:\u0000,boolean:false,所有引用类型:null)
属性定义格式:[修饰符] 属性类型 属性名 = [默认值]
■ 引用类型
Java语言中除基本类型之外的变量类型都称之为引用类型。
Java中的对象是通过引用对其操作的。
■ 类的方法
方法用于定义该类或该类的实例行为特征和功能实现。方法是类和对象行为特征的抽象。
方法类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成;面向对象中,整个程序的基本单位是类,方法是从属于类的。
方法定义格式:
[修饰符] 方法返回值类型 方法名(形参列表){
//n条语句
}
■ 对象的创建和使用
①必须使用new关键字创建对象
②使用对象(引用).成员变量来引用对象的成员变量。
③使用对象(引用).方法(参数列表)来调用对象的方法。
④同一类的每个对象有不同的成员变量存储空间。
⑤同一类的每个对象共享该类的方法。
■ 构造器(或者叫构造方法,constructor)
构造器用于构造该类的实例。
Java通过new关键字来调用构造器,从而返回该类的实例。
■ 垃圾回收(Garbage Collection)
Java的内存管理实际上指的是对对象的管理,其中包括对象空间的分配和释放。
对象空间的分配:
使用new关键字创建对象即可。
对象空间的释放:
将对象赋值null即可。垃圾回收器将负责回收所有“不可用”对象的内存空间。
要点:
①程序员无权调用垃圾回收器。
②程序员可以通过System.gc()方法通知GC运行,但Java规范并不保证立刻运行。
③finalize是Object类的一个方法,在垃圾收集器执行的时候会掉用被回收对象的finalize()方法,该方法可被覆盖用于回收其他资源(关闭文件等),但JVM不保证此方法总被调用。
■ 方法的重载(overload),构造方法的重载
①方法的重载是指一个类中可以定义具有相同名字,但参数列表不同的多个方法。调用时,会根据不同的参数列表选择对应的方法。
②方法调用时,匹配离得最近的类型。
③不同的含义:类型、个数、顺序不同
④只有返回值不同不构成方法的重载
⑤只有形参的名称不同不构成方法的重载
⑥与普通方法一样,构造方法也可以重载
■ this关键字
普通方法中,this总是指向调用该方法的对象。
构造方法中,this总是指向正要初始化的对象。
this最常用的用法:
①让类中的一个方法访问该类的另一个方法或属性。
②使用this关键字调用重载构造方法。避免相同的初始化代码,只能在构造方法中用,并且必须位于构造方法的第一句。
③this不能用于static方法。
■ static关键字
①在类中,用static声明的成员变量为静态成员变量。它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化。对于该类的所有对象来说,static成员变量只有一份,被该类的所有对象共享。可以使用“对象.属性”来调用。不过,一般都是用“类名.属性”。
②用static声明的方法为静态方法,不需要对象,就可以调用(类名.方法名),在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。
③可以通过对象引用或类名(不需要实例化)访问静态成员。
■ 静态初始化块(经常用来初始化类,加载类信息时执行!)
执行顺序:先执行Object类的静态初始化块,再向下执行子类的静态初始化块,直到我们的类的静态初始化块为止。