Java面向对象——9.包
Java的包(Package)
在Java编程中,当多个开发者协作或引入第三方代码时,类名重复是一个很常见的问题。比如两个开发者都写了一个Person类,或者自定义的类与JDK自带的类重名,这时候就需要Package来区分这些同名类。
包的概念
包本质上是一种名字空间,它通过给类添加一个"前缀"来确保类的唯一性。一个类的完整标识不再是简单的类名,而是包名.类名。
举个例子:
- 若小明的
Person类放在ming包下,其完整类名是ming.Person - 若小红的
Person类放在hong包下,其完整类名是hong.Person - JDK自带的
Arrays类位于java.util包,完整类名是java.util.Arrays
这样一来,即使类名相同,只要所在的包不同,Java虚拟机就能准确区分它们。
包的定义与目录结构
定义包时,需要在Java文件的第一行使用package语句声明:
package mr.jun; // 声明所属包
public class Arrays {
// 类内容
}
重要规则:Java文件的目录结构必须与包结构完全一致。例如,对于package com.itranswarp.sample的类,其源文件必须放在src/com/itranswarp/sample目录下。
典型的项目结构如下:
package_sample
└─ src
├─ hong
│ └─ Person.java
├─ ming
│ └─ Person.java
└─ mr
└─ jun
└─ Arrays.java
编译后的.class文件也需要保持相同的目录结构,通常会放在bin目录下。
导入类:import语句
每次使用类时都写完整类名非常繁琐,Java提供了import语句来简化操作。
导入方式
- 导入特定类:
package ming;
import mr.jun.Arrays; // 导入特定类
public class Person {
public void run() {
Arrays arrays = new Arrays(); // 可直接使用简单类名
}
}
- 导入整个包(不推荐):
import mr.jun.*; // 导入mr.jun包下所有类
这种方式可能导致类名冲突,且不易区分类的来源。
- 静态导入(很少使用):
import static java.lang.System.*; // 导入System类的所有静态字段和静态方法
public class Main {
public static void main(String[] args) {
out.println("Hello"); // 相当于System.out.println
}
}
Java编译器类名查找规则
Java编译器查找类名时遵循以下顺序:
- 检查是否为完整类名,若是则直接使用
- 查找当前包中是否存在该类
- 查找
import的包中是否包含该类 - 查找
java.lang包(自动导入)
如果存在同名类来自不同包,必须为其中一个类使用完整类名。
总结
- 了解Package机制的定义和作用
- 了解Java编译器类名查找规则
Java面向对象——9.包的更多相关文章
- LY.JAVA面向对象编程.包的概述、导包
2018-07-18 08:46:57 导包:
- Java面向对象 包
Java面向对象 包 知识概要: (1)包的概念 (2)包的命名 (3)编译执行 (4)导入 (5)包的访问权限 包: 包(package)用于将完成不同功能 ...
- JAVA面向对象-----包机制
JAVA面向对象-–包机制 问题: 当定义了多个类的时候,可能会发生类名的重复问题. 在java中采用包机制处理开发者定义的类名冲突问题. 怎么使用java的包机制呢? 1.使用package 关键字 ...
- Java 面向对象异常处理,finally,覆盖时异常特点,package,import,包之间的访问(10)
Java 面向对象异常处理, finally:final 关键字的用法参考http://www.cnblogs.com/itcqx/p/5541659.html 覆盖时异常特点,package,imp ...
- 090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 04 使用包进行类管理(2)——导入包
090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 使用包进行类管理(1)——创建包
089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- Java之旅_面向对象_包(Package)
http://www.runoob.com/java/java-package.html 包的作用: 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用 ...
- JavaSE入门学习17:Java面向对象之package(包)
一Java包(package) 为了更好地组织类,Java提供了包机制,用于差别类名的命名空间. 包的作用: A把功能类似或相关的类或接口组织在 ...
- Java入门 - 面向对象 - 07.包(package)
原文地址:http://www.work100.net/training/java-package.html 更多教程:光束云 - 免费课程 包(package) 序号 文内章节 视频 1 概述 2 ...
- Java面向对象:接口
Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...
随机推荐
- MySQL 根据时间排序失败
问题背景:MySQL数据库中,如果使用datetime,那其实只是精确到了秒.如果基于它排序并分页查询,若同一秒的数据超过一页,则多次查询得到的结果集可能会出现不一样的灵异事件.SQL: SELECT ...
- Guava中的常见集合操作用法
本文主要介绍Guava中几种处理字符串和Map的方法,包括Joiner(连接).FluentIterable(过滤.转换集合)和Splitter(分割).本文基于Java 8进行测试,Guava 版本 ...
- 一种通用的arduino通信例程
本教程将给出一种通用的,适用于arduino(uno和mega等)单片机的一个通信的教程,通过对例程的修改,可以做成任意的符合需求的代码,下面请看. // 函数定义 String detectStri ...
- 函数使用十二:BAPI_CONTRACT_CREATE
*&---------------------------------------------------------------------* *& Report ZBAPI_WB2 ...
- Spring Boot 启动优化实践
作者:vivo 互联网服务器团队- Liu Di 本文系统性分析并优化了一个Spring Boot项目启动耗时高达 280 秒的问题.通过识别瓶颈.优化分库分表加载逻辑.异步初始化耗时任务等手段,最终 ...
- 从困境到突破,EasyMR 集群迁移助力大数据底座信创国产化
在大数据时代,企业对数据的依赖程度越来越高.然而,随着业务的不断发展和技术的快速迭代,大数据平台的集群迁移已成为企业数据中台发展途中无法回避的需求.在大数据平台发展初期,国内数据中台市场主要以国外开源 ...
- 数栈技术分享:前端小姐姐和你聊聊IOC中依赖注入那些事 (Dependency inject)
Part1: What is Dependency injection 依赖注入定义为组件之间依赖关系由容器在运行期决定,形象的说即由容器动态的将某个依赖关系注入到组件之中在面向对象编程中,我们经 ...
- 逗号位置决定命运:CSS 选择器 `#id > a, b` 和 `#id > a, #id > b` 的致命差异
引言:被忽视的逗号陷阱 在日常开发中,CSS 选择器的逗号,看似简单,但一个符号的位置差异就能导致样式作用范围天差地别.本文通过真实代码对比,揭示这个容易被忽视的关键细节. 核心结论(先看结果) 选择 ...
- 解决Xamarin.Android 软键盘弹出挡住Edittext的问题
Window.SetSoftInputMode(SoftInput.AdjustPan);
- 新能源制造升级核心引擎:五大MES厂商如何破局行业痛点?
在全球"双碳"目标驱动下,中国新能源产业迎来爆发式增长,动力电池.光伏组件.储能设备产能持续扩张.然而,高速发展的背后,工艺变更频繁导致生产计划失效.多系统数据孤岛阻碍全流程追溯. ...