9.面向对象(4):包

2025-05-15  本文已影响0人  呦丶耍脾气

包(Package) 是一种用于组织和管理类、接口及其他资源的命名空间机制。它的核心意义在于解决大型项目中的代码组织、命名冲突、访问控制等问题

定义包

在类文件首行声明包名:

package model;  // 声明该类属于model包

public class User {
    private String name;
    // ...
}

导入包

通过 import 使用其他包的类

import model.User;  // 导入单个类
import model.*;      // 导入整个包(不推荐,易导致冲突)
import static java.lang.System.*;// 导入System类的所有静态字段和静态方法:不常用

public class Main {
    public static void main(String[] args) {
        User user = new User();  // 使用导入的User类
        out.println("Hello, world!");// 相当于调用System.out.println(…)
    }
}

Java编译器最终编译出的.class文件只使用完整类名,因此,在代码中,当编译器遇到一个class名称时:

// Main.java
package test;
import java.text.Format;
public class Main {
    public static void main(String[] args) {
        java.util.List list; // ok,使用完整类名 -> java.util.List
        Format format = null; // ok,使用import的类 -> java.text.Format
        String s = "hi"; // ok,使用java.lang包的String -> java.lang.String
        System.out.println(s); // ok,使用java.lang包的System -> java.lang.System
        MessageFormat mf = null; // 编译错误:无法找到MessageFormat: MessageFormat cannot be resolved to a type
    }
}
  • 默认自动import当前package的其他class
  • 默认自动import java.lang.*

内部类

如果一个类定义在另一个类的内部,这个类就是Inner Class:

class Outer {
    class Inner {
        // 定义了一个Inner Class
    }
}
public class Outer {
    private String name;
    public Outer(String name) {
        this.name = name;
    }

    public class Inner {
        public void print() {
            System.out.println(Outer.this.name);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Outer outer = new Outer("张三");
        Outer.Inner inner = outer.new Inner();
        inner.print();

    }
}

要实例化一个Inner,我们必须首先创建一个Outer的实例,然后,调用Outer实例的new来创建Inner实例:
Outer.Inner inner = outer.new Inner();
Inner Class和普通Class相比,除了能引用Outer实例外,还有一个额外的“特权”,就是可以修改Outer Classprivate字段,因为Inner Class的作用域在Outer Class内部,所以能访问Outer Classprivate字段和方法。

观察Java编译器编译后的.class文件可以发现,Outer类被编译为Outer.class,而Inner类被编译为Outer$Inner.class

上一篇 下一篇

猜你喜欢

热点阅读