Java类的高级特性:类包、final、内部类

一、Java类包

1、Java类包

       Java中每个接口或类都来自不同的类包,无论是JavaAPI中的类与接口还是自定义的类与接口都需要隶属于某-一个类包,这个类包包含了一些类和接口。如果没有包的存在,管理程序中的类名称将是一件非常麻烦的事情。在Java中采用类包机制非常重要,类包不仅可以解决类名冲突问题,还可以在开发庞大的应用程序时,帮助开发人员管理庞大的应用程序组件,方便软件复用。

       一个完整的类名需要包名与类名的组合,每个类都隶属于一个类包,只要保证同一类包中的类不同名,就可以有效地避免同名类冲突的情况。当然包名也可能产生冲突,为了避免这样的问题,在Java中定义包名时通常使用创建者的Internet域名的反序,由于Intermnet域名是独一-无二的,包名自然不会发生冲突。

例:

java.util.Date date = new java.util.Date();
java.sql.Date date2 = new java.sql.Date(2333);

       同一个包中的类不必存放在同一个位置,如com.lzw.class1和com.lzw.class2 可以一个放置在C盘,一个放置在D盘,只要将CLASSPATH分别指向这两个位置即可。

2、创建包

       在Java中包名设计应与文件系统结构相对应,如一个包名为com.lzw,那么该包中的类位于com文件夹下的lzw 子文件夹下。没有定义包的类会被归纳在预设包(默认包)中。在实际开发中,应该为所有类设置包名,这是良好的编程习惯。

在类中定义包名的语法如下:

package 包名

       在类中指定包名时需要将package表达式放置在程序的第一行,它必须是文件中的第一行非注释代码,当使用package关键字为类指定包名之后,包名将会成为类名中的一部分, 预示着这个类必须指定全名。

       注:Java包的命名规则是全部使用小写字母。

3、导入包

       使用import导入包。在使用import关键字时,可以指定类的完整描述,如果为了使用包中更多的类,可以在使用import关键字指定时在包指定后加上*,这表示可以在程序中使用包中的所有类。

       如果类定义中已经导入com.lzw.Math类,在类体中再使用其他包中的Math类时则必须指定完整的带有包格式的类名,如这种情况再使用java.lang 包的Math 类时就要使用全名格式java.lang.Math。在程序中添加import关键字时,就开始在CLASSPATH指定的目录中进行查找,查找子目录com.lzw,然后从这个目录下编译完成的文件中查找是否有名称符合者,最后寻找到Math.class文件。另外,当使用import指定了一个包中的所有类时,并不会指定这个包的子包中的类,如果用到这个包中的子类,需要再次对子包作单独引用。

       在Java中将Java源文件与类文件放在一起管理是极为不好的管理方式。可以在编译时使用-d参数设置编译后类文件产生的位置。使用DOS进入程序所在的根目录下,执行如下命令:

javac -d ./bin/ ./com/lzw/*.java

       这样编译成功后将在当前运行路径下的bin目录中产生com/lzw路径,并在该路径下出现相应源文件的类文件。如果使用Eeclipse编译器,并在创建项目时设置了源文件与输出文件的路径,编译后的类文件会自动保存在输出文件的路径中。

       如果不能在程序所在的根目录下使用javac.exe 命令,注意在path环境变量中设置Java编译器所在的位置,假如是C:Javaljdk1.6.0_03\bin, 可以使用set path=C:Java\jdk1 .6.0_ 03\bin;%path%命令在DOS中设置path环境变量。

4、使用import导入静态成员

       import关键字除了导入包之外,还可以导入静态成员,这是JDK 5.0以上版本提供的新功能。导入静态成员可以使程序员编程更为方便。语法如下:

import static 静态成员

例:

package com.lzw;

import static java.lang.Math.*;
import static java.lang.System.*;

public class ImportTest {
	public static void main(String[] args) {
		// 在主方法中可以直接使用这些静态成员
		out.println("1和4的较大值为:" + max(1, 4));
	}
}

输出:

       从本例可看出,分别使用import static导入了 java.lang.Math类中的静态成员方法max()和java.lang.System类中的out成员变量,这时就可在程序中直接引用这些静态成员,如在主方法中的out.println()表达式以及直接使用max()方法。

 

二、final

1、final变量

       final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常,由final 定义的变量为常量。

       final关键字定义的变量必须在声明时对其进行赋值操作。final除了可以修饰基本数据类型的常量,还可以修饰对象引用。由于数组也可以被看作一个对象来引用,所以final可以修饰数组。一旦一个对象引

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值