内部类
将一个类定义在另一个类中,对立面的类称为内部类(内置类、嵌套类)
内部类访问特点
内部类可以直接访问外部类的成员,包括私有成员
外部类要访问内部类的成员必须要建立内部类的对象
内部类的作用
为了访问外部类的成员方便
内部类的位置
内部类定义在成员位置上(和外部类的属性和方法并列存在,也相当于外部类的成员)
内部类定义在局部位置上(定义在外部类的方法中)
内部类定义在成员位置上
内部类定义在成员位置上相当于外部类的成员
室成员就可以被public private static 成员修饰符修饰
被static修饰的内部类只能访问外部类中的静态成员
class 类名 {
private int num=3;
class Inner{//内部类
void show(){
System.out.println(num);
}
}
}
带内部类的类,最后能生成2个class
其他类中如何访问一个类中的内部类成员
注意:要看内部类的修饰符是什么,根据不同的情况进行不同的访问
定义在成员位置时访问类中成员
当内部类定义在成员上时,如何访问内部类中的成员
当内部类为public、defalut时直接访问外部类中的内部类成员
package fuxi.com;
public class Outer {
int a = 10;
private void print() {
System.out.println(a);
}
public class Inner {
void P() {
System.out.println("44444");
}
}
public static void main(String[] args) {
Outer.Inner in=new Outer().new Inner();
//外部类名.内部类名 外部对象.内部对象
in.P();
}
}
当内部方法是私有的(priivate)时,此时其它类访问不到
当内部类为static时
package fuxi.com;
public class Outer {
int a = 10;
private void print() {
System.out.println(a);
}
public static class Inner {
void P() {
System.out.println("44444");
}
}
public static void main(String[] args) {
Outer.Inner in = new Outer.Inner();
// 外部类名.内部类名 内部类对象 无需建立外部类对象
in.P();
}
}
当内部类是静态的它的成员也是静态的
package fuxi.com;
public class Outer {
int a = 10;
private void print() {
System.out.println(a);
}
public static class Inner {
static void P() {
System.out.println("44444");
}
}
public static void main(String[] args) {
Outer.Inner.P();
// 类名.方法名
//内部类的成员时静态的,那内部类也应该是静态的
}
}
外部类访问内部类成员
外部类访问内部类中的成员,必须建方法,在方法中通过对象来访问
package fuxi.com;
public class Outer {
int a = 10;
private void print() {
System.out.println(a);
}
public static class Inner {
static int a=10;
static void P() {
System.out.println("44444");
}
}
public void getOt() {
// TODO Auto-generated method stub
Inner in=new Inner();
in.a=50;
in.P();
}
public static void main(String[] args) {
new Outer().getOt();
}
}
//外部类要访问本类中的内部类,要在本类创建方法来访问
内部类持有外部类的引用 外部类名.this
内部类访问自己的成员 内部类名.this 或this.
内部类定义在局部上如何访问外部成员
package fuxi.com;
public class Outer {
static int a=30;
private void gatA() {
class Inner{
int a=20;
public void print() {
System.out.println("内部类方法里的a="+a);
System.out.println("内部类里的a="+this.a);
System.out.println("内部类a="+Outer.a);
}
}
Inner in=new Inner();
in.print();
}
public static void main(String[] args) {
new Outer().gatA();
}
}
内部类定义在局部位置上
内部类定义在局部位置上如何访问内部类中的成员
可以直接访问外部中的成员
同时可以访问所在局部中(方法中)的局部变量,但是必须是被final修饰的
匿名内部类
匿名内部类是内部类的简写格式
匿名内部类的使用前提:
匿名内部类必须继承一个外部类,或实现一个接口。
匿名内部类格式
匿名内部类:匿名内部类就是局部内部类的形式之一
匿名内部类:
可以继承某个类,但不能用extends
可以实现接口,但不能用implements
包的概念
JAR(Java Archiver ,Java归档文件)是与平台无关的文件格式,它允许将多文件组合成一个压缩文件
包的作用:使用方便
打包方式1:
步骤1
在MyEclipse中选择需要导出的项目,package或者类,右击选择Export子选项
步骤2
选择Java—>选择JARfile
步骤3
可再次根据需要选择打包的内容,并选择jar包生成位置和命名
打包方式2:
步骤1
在Dos下敲jar,会出现jar工具参数及使用例子(jdk1.6\bin\jar.exe)
步骤2
在Dos下选择一个文件
D: >jar -cf Hello.jar Hello
D: >jar -cvf Hello.jar Hello
c生成新的归档文件
v在控制台生成详细输出
f制定归档文件名