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聚集索引与辅助索引的区别
聚集索引也称聚簇索引,英文为clustered index.从物理存储角度来分, 索引可以分为聚集索引和辅助索引(secondary index,也称作非聚簇索引),区别主要看叶子节点存了什么数 ...
- Redis异常 Invalid argument during startup: unknown conf file parameter
问题提出 设置 redis 过期事件监听时,需将 notify-keyspace-events的值设置为Ex,故去掉了 notify-keyspace-events Ex'之前的注释符.然而,启动re ...
- Hyperledger Fabric2.x基本概念之(一)交易和区块链
▲ 点击101链视界,关注不走丢 大家好,我是阿创,这是我的第30篇原创文章. 我比较爱看书,2021年全年我的阅读量大概是20+本书,涵盖法律.哲学.技术.人文. 但是阅读量一上来反而会觉得,单纯的 ...
- gitlabrunner之executor配置拉取镜像的账户密码
docker executor $ cat config.toml ...... [[runners]] environment = ["DOCKER_AUTH_CONFIG={\" ...
- .Net Web API 002 Program和WeatherForecastController
创建工程后,工程主要包含了Program.cs和WeatherForecastController.cs两个代码文件,还有一个WeatherForecast.cs文件,该文件定义的天气情况数据结构替, ...
- LinqPad:C#代码测试学习一品神器
01.LinqPad是干嘛的? LinqPad 是一个可编写.运行C#(VB/F#/SQL)代码的轻量工具,C#开发者强烈推荐必备的工具,一个一旦用了就再也不想丢弃的工具.工具出自<C# 核心技 ...
- 树形DP详解
哈喽大家好,我是 doooge,今天给大家带来的是 树形DP 详解. \[\Huge \sf 树形DP 详解 \] 1.树形DP是什么 想必大家都学过动态规划吧,树形DP 就是 DP 的一部分.顾名思 ...
- Hive与Clickhouse对比
个人理解,欢迎指正 对比指标 Hive Clickhouse 元数据管理 元数据存MySQL,通过HiveMetaStore管理 每个Shard自己管理 数据存储 HDFS 本地磁盘 架构设计 MR架 ...
- CF1990D Grid Puzzle 题解
CF1990D Grid Puzzle DP 好题.考虑分析两种操作的性质,不难发现操作 \(1\) 至多只能涂白 \(4\) 个方格,而操作 \(2\) 可以涂白的方格取决于这一行的方格数,几乎无上 ...
- 前端开发系列061-网络篇之HTML页面渲染的基本过程
本文描述了HTML页面渲染的基本(一般)过程,需要说明的是该文并不包含关于HTML解释器.CSS解释器.JavaScript引擎等相关部分内部的具体处理细节.该文旨在简单介绍网页从加载到被我们看到过程 ...