目录
1、介绍
2、创建包
3、导入包
3.1 使用import关键字导入包
3.2 使用import导入静态成员
4、内部类
4.1 成员内部类
4.2 局部内部类
4.3 匿名内部类
4.4 静态内部类
4.5 内部类的继承
在java程序中每定义好一个类,通过Java编译进行编译之后,都会生成一个扩展名为.class的文件,当这个程序规模逐渐扩大时候,就很容易发生类名冲突现象,所以在java中提供了一种管理文件的机制,就是类包。
例如:java.lang.Math;
java.lang为包的名称。
Math为类的名称。
一个完整的类名需要包名和类名的组合,每个类都隶属于一个类包,只要保证同一类包中的类不同名,就可以有效的避免同名类冲突的情况,用类包的时候需要指定完整的类路径。
例:在程序中使用两个不同Data类完整路径。
java.util.Date date=new java.util.Date(); java.sql.Date date2=new java.sql.Date();在java中使用类包十分重要,类包可以解决类名冲突问题。
在类包定义语法为:
package 包名在类中指定包名时需要将package表达式放置在程序的第一行,它必须使文件中第一行非注释代码,当使用package关键字为类指定包名之后,包名将会成为类名中的一部分。
Java包的命名规则是全部必须全部为小写字母。
在Java中定义包名时通常使用创建者的Internet域名的反序,由于域名是独一无二的,所以包自然也不会发生冲突。
用法:
import com.lzw.Math//指定com.lzw包中的Math类在程序中可以使用在使用关键字import时,可以指定类完整描述,如果为了使用包中更多的类,可以使用import关键字指定时候在包指定后加上*,这表示可以在程序中使用包中所有的类。
import com.lzw.*;语法格式:
import static 静态成员例:比较5和6的大小。
package com.fan; import static java.lang.Math.max; import static java.lang.System.out; public class Test { public static void main(String[] args){ out.println("5和6最大值为:"+max(5,6)); } }在文件中定义两个类,但其中任何一个类都不在另一个类的内部,而如果在定义一个类,则将在类中在定义的那个类称为内部类。
语法格式为:
public class OuterClass{ //外部类 private class InnerClass{//内部类 //... } }在内部类中可以任意使用外部类的成员变量以及成员方法。
例:
public class OutClass { InClass in=new InClass(); public void out(){ in.inf(); } class InClass{ InClass(){ } public void inf(){ } int y=0; } public InClass doit(){ in.y=4; return new InClass(); } public static void main(String[] args){ OutClass out=new OutClass(); } }内部类向上转型为接口:
可以在外部提供一个借口,在接口中声明一个方法。
非内部类不可以被声明为private或protected访问类型。
使用this关键字获取内部类与外部类的引用:
如果内部类与外部类中定义的成员变量与内部类的成员变量名称相同,可以使用this关键字;
public class Test { private int x; private class In{ private int x=2; public void doit(int x){ x++; //调用的是形参x; this.x++; //调用内部类成员变量; Test.this.x++; //调用外部类成员变量; } } }内部类不仅可以在类中定义,也可以在类的局部位置定义,如在类的方法任意的作用域中均可以定义。
在方法中定义的内部类只能访问方法中final类型的局部变量。
例:在return语句中编写返回值为一个匿名内部类。
public class Test { public Test2 doit(){ return new Test2(){ private int i=0; public int getValue(){ return i; } }; } }匿名类的所有实现代码都要需要在大括号之间进行编写。
return new A(){ ...//内部类体 };其中A为类名;
在内部类前添加修饰符static,这个内部类就变成了静态内部类了。
一个静态内部类中可以声明static成员,而在非静态内部类中不可以声明静态成员。
静态内部类具有以下两个特点:
如果创建静态内部类的对象,不需要其外部类的对象。不能从静态内部类的对象中访问非静态外部类的对象。 static class Inner{ }内部类和其它普通类一样可以被继承,需要特定的语句来实现。
例:
public class Outclass extends ClassA.ClassB { public Outclass (ClassA a){ a.super(); } } class ClassA{ class ClassB{ } }