Java提供了8种基本数据类型,这8种基本数据类型不支持面向对象的编程机制,基本数据类型的数据也不具有“对象”的特性:没有成员变量、方法可以被调用。
所有引用类型的变量都继承了Object类,都可以当成Object类型变量使用。
为了解决8种基本数据类型的变量不能当成Object类型变量使用的问题,Java提供了包装类的概念,为8种基本数据类型分别定义了相应的引用类型,称之为基本数据类型的包装类
JDK提供了自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)功能。
自动装箱,就是可以把一个基本类型变量直接赋给对应的包装类变量,或者赋给Object变量;
自动拆箱则允许直接把包装类对象直接赋给一个对应的基本类型变量。
包装类还可以实现基本类型变量和字符串之间的转换,把字符串类型的值转换为基本类型的值有两种方式:1、利用包装类提供的parseXxx(String s)静态方法(除了Character之外的所有包装类都提供了该方法);2、利用包装类提供的Xxx(String s)构造器。
类成员
static关键字修饰的成员就是类成员,类成员有类变量、类方法、静态初始化模块三个成分。
static关键字不能修饰构造器,static修饰的类成员属于整个类,不属于单个实例。
单例(Singleton)类:如果一个类始终只能创建一个实例,则这个类被称为单例类。
该类的构造器使用private修饰,从而把该类的所有构造器隐藏起来。一旦把该类的构造器隐藏起来,就需要提供一个public方法作为该类的访问点,用于创建该类的对象,且该方法必须使用static修饰。
final修饰符:
final关键字可用于修饰类、变量和方法,final修饰的类、方法和变量不可改变。final修饰的变量不可被改变,一旦获得了初始值,该final变量的值就不能被重新赋值。
final修饰的成员变量必须由程序员显示地指定初始值。
类变量:必须在静态初始化块中指定初始值或声明该类变量时指定初始值,而且只能在两个地方的其中之一指定。
实例变量:必须在静态初始化块、声明该实例变量、构造器中指定初始值,只能在三个地方选一个。
系统不会对局部变量进行初始化,局部变量必须由程序员显示初始化,因此使用final修饰局部变量时,即可以在定义时指定默认值,也可以不指定默认值。
final变量本质上是一个“宏变量”。
final修饰的方法不可被重写。final修饰的方法仅仅是不能被重写,并不是不能被覆盖。
final修饰的类不可以有子类。
abstract:
抽象方法和抽象类都必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法。
抽象方法不能有方法体。
抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。
抽象类可以包含成员变量、方法、构造器、初始化块、内部类,抽象类的构造器不能用于创建实例,主要用于被其子类调用。
抽象类不能用于创建实例,只能当做父类被其他子类继承。
当使用abstract修饰类时,表明这个类只能被继承;当使用abstract修饰方法时,表示这个方法必须由子类体用实现(即重写)。
而final修饰的类不能被继承,final修饰的方法不能被重写。因此final和abstract永远不能同时使用。
abstract不能用于修饰成员变量,不能用于修饰局部变量,不能用于修饰构造器。
static和abstract不能同时修饰某个方法。
private和abstract不能同时修饰方法。
抽象类作为其子类的模板,从而避免了子类设计的随意性。
抽象类体现的就是一种模板模式的设计。
抽象父类可以只定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给其子类去实现。
父类中可能包含需要调用其他系列方法的方法。
特殊的抽象类——接口(interface),接口里不能包含普通方法,接口里的所有方法都是抽象方法。
定义接口使用interface关键字。
一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。
接口里不能包含构造器和初始化块定义。接口里的成员变量只能是静态变量,接口里的方法只能是抽象方法、类方法或默认方法。
在接口中定义成员变量时,不管是否使用public static final修饰符,接口里的成员变量总是使用这三个修饰符来修饰。
接口里的普通方法不管是否使用public abstract修饰符,接口里的普通方法总是使用public abstract来修饰。
接口的主要用途:1、定义变量,也可用于进行强制类型转换;2、调用接口中定义的常量;3、被其他类实现。
一个类可以实现一个或多个接口,继承使用extends关键字,实现使用implements关键字。
接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。
接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
实例有限而且固定的类,在Java里被称为枚举类。
Java的垃圾回收是Java语言的重要功能之一。
当程序创建对象、数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存区中,当这块内存不在被任何引用变量引用时,这块内存就变成垃圾,等待垃圾回收机制进行回收。
1、垃圾回收机制值负责回收堆内存中的对象,不会回收任何物理资源;
2、程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候进行。当对象永久性地失去引用后,系统就会在合适的时候回收它所占的内存;
3、在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,该方法可能使该对象重新复活。
对象在内存中的状态:
JAR文件
JAR文件的全称是Java Archive File,意思是Java档案文件。通常JAR文件是一种压缩文件,通常也被称为JAR包。JAR文件与ZIP 文件的区别就是在JAR文件中默认包含了一个名为META-INF/MANIFEST.MF的清单文件,这个清单文件是在生成JAR文件是由系统自动创建的。
在系统的CLASSPATH环境变量中添加这个JAR文件,则Java虚拟机就可以自动在内存中解压这个JAR包,把JAR文件当成一个路径。