美文网首页
9.面向对象(4):包

9.面向对象(4):包

作者: 呦丶耍脾气 | 来源:发表于2025-05-15 11:35 被阅读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名称时:

  • 如果是完整类名,就直接根据完整类名查找这个class;
  • 如果是简单类名,按下面的顺序依次查找:
    • 查找当前package是否存在这个class;
    • 查找import的包是否包含这个class;
    • 查找java.lang包是否包含这个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

相关文章

  • Lua-基本语法

    1.基本语法 2.表 3.数组 4.面向对象之复制表的方式面向对象 5.面向对象之函数闭包的方式面向对象

  • 9.面向对象

  • 闭包和面向对象设计

    闭包: 面向对象:

  • 闭包与面向对象设计

    闭包 面向对象 或者

  • 面向对象01-方法(重载)/包/修饰符

    面向对象01-方法(重载)/包/修饰符 [TOC] 1、面向对象与面向过程 2、类和对象 2.1、类和对象的的创建...

  • 2018-06-27

    JavaScript(面向对象+原型理解+继承+作用域链和闭包+this使用总结) 一、面向对象 1、什么是面向对...

  • 跟着大大学python(33)

    9.类 面向对象编程是最有效的软件编写方法之一。在面向对象编程中,你编写表示现实世界中的事物和情境的类,并基于这些...

  • Python:9.面向对象编程

    访问限制 继承和多态 获取对象信息 实例属性和类属性 千万不要对类属性和实例属性使用相同的名字,因为相同名字的实例...

  • 9.面向对象与函数

    课程来自慕课网Visitor.zc老师 面向对象与函数 main.m People.h People.m

  • 面向对象闭包

    面向对象备份指针 // this在事件指令中指向事件源 // that称为备份指针 var that = this...

网友评论

      本文标题:9.面向对象(4):包

      本文链接:https://www.haomeiwen.com/subject/cleiijtx.html