本章主要内容:
包
类的说明符
方法的说明符
对象的销毁
接口
内部类和匿名内部类
异常处理
1、包(package)
为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,java引入了包。
package必须是文件中的第一条语句,也就是说,在package语句之前,除了空白和注释之外不能有其他语句。
如果不加package语句,则指定为缺省包或无名包。
包对应着文件系统的目录层次结构。
在package语句中,用“.”来指明包(目录)的层次。
2、编译并生成包
在当前目录下生成包
javac -d . Test.java
在指定目录下生成包
javac -d E:JavaLesson Test.java
编译某一目录下所有java文件,此时不用当心编译次序
javac *.java
设置了环境变量之后,会默认在环境变量指定的目录下搜索类。
set classpath=%classpath%;d:java\;
3、import语句
引入包中的类
import java.io.File;
引入整个包
import java.io.*;
在同一包中的类可以相互引用,无需import语句。
java.lang包是默认导入的,编写程序时,无需显示导入。
没有导入相应包时,必须在调用类时写上类的全名。
4、类的说明符
1>类的访问说明符
public
default(不加访问说明符时)
2>类的其他修饰符
final
abstract
5、方法的说明符
1>方法的访问说明符
public
protected
default(不加访问说明符时)
private
2>方法的其他修饰符
static
final
abstract
native
synchronized
6、方法的访问控制
public protected default private
同类 yes yes yes yes
同包 yes yes yes
子类 yes yes
通用 yes
7、final方法
为了确保某个函数的行为在继承过程中保持不变,并且不能呗覆盖,可以使用final方法。
为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优化。要注意的是:编译器会自动对final方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确实不希望它被覆盖时,才将它声明为final。
class中所有的private和static方法自然就是final。
8、抽象方法和抽象类
在类中没有方法体的方法,就是抽象方法。
含有抽象方法的类,即位抽象类。
如果一个子类没有实现抽象基类中所有的抽象方法,则子类也成为一个抽象类。
抽象类不能实例化。
我们可以将一个没有任何抽象方法的类声明为abstract,避免有这个类产生任何的对象。
构造方法,静态方法,私有方法,final方法不能被声明为抽象的方法。
9、native方法
native方法是用户在java中可以使用,但不能编写的方法。
JNI(Java Native Interface),它允许java虚拟机(JVM)内部运行的java代码能够与其他编程语言(如C,C++,汇编语言)编写的应用程序和库进行互操作。
JNI最大的好处是它没有对底层java虚拟机的实现施加任何限制,因此,java虚拟机厂商可以在不影响虚拟机其他部分的情况下添加对JNI的支持。程序员只需编写一种版本的本地应用程序和库,就能够与所有支持JNI的java虚拟机协同工作。
JNI可以理解为java和本地应用程序之间的中介。
书写步骤:
·编写带有native声明的方法的java类
·使用javac命令编译所编写的java类 JNI
·使用javah -jni java类名生成扩展名为h的头文件
·使用C/C++实现本地方法
·将C/C++编写的文件生成动态连接库
·使用java命令运行java类
10、垃圾回收机制
垃圾回收是一个低优先级的线程在后台自动运行。
System.gc()用来显示调用垃圾回收方法finalize()。
11、接口
实现接口采用关键字implements。
接口中所有方法默认都是public abstract。
接口中数据成员默认都是public static final。
在接口中声明方法时,不能使用native、static、final、synchronized、private、protected等修饰符。
和public类一样,public接口也必须定义在与接口同名的文件中。
实现一个接口时,如果不能实现其中所有方法,必须将类定义为抽象类。
一个接口可以继承自另一个或多个接口。
java中不允许类的多继承,但允许接口的多继承。
interface Sittable
{
void sit();
}
interface Lie
{
void sleep();
}
interface Chair extends Sittable
{
}
interface Sofa extends Sittable, Lie //一个接口继承多个接口
{
}
class Sofa1 implements Sittable, Lie //一个类实现多个接口
{
public void sit()
{
}
public void sleep()
{
}
}
interface HealthCare
{
void massage();
}
class Chair implements Sittable
{
public void sit(){};
}
class Sofa extends Chair implements Lie, HealthCare //在继承类的同时,实现多个接口
{
public void sleep(){};
public void massage(){};
}