包机制(package、import)

包(package)

包(package)就相当于文件夹对文件的作用,用于管理类和解决类的重名问题;

package使用的要点:

  1. 通常是类的第一句非注释性语句;

  2. 包名:域名倒着写即可,便于内部管理类;

实例:

java 复制代码
com.xxx.test
com.itbaidu.test

注意:

  1. 写项目都要写包,不要使用默认包
  2. com.xx 和 com.xx.test是两个完全独立的包,只是看上去以为后面是前面的一部分;
typescript 复制代码
package com.it.test;

public class Test {
    public static void main(String[] args) {
        System.out.println("建立包机制");
    }
}

JDK中主要包:

java.lang: 包含一些Java语言的核心类,如String、Math、Integer、System、Thread.

java.awt:包含了构成抽象窗口工具集(abstract、window、toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)

java.net:包含了执行与网络相关操作的类

java.io: 包含了能够提供多种输入输出功能的类

java.util: 包含了一些实用工具类,如定义系统性、使用和日期日历相关的函数

java从其他包中引入类

  1. 使用完全限定名(不推荐)每次使用时都写出完整的包名和类名:
java 复制代码
package com.itxx.test;
public class ImportTest {
    public static void main(String[] args) {
        com.it.test.Test test = new com.it.test.Test();
        System.out.println(test);
    }

}
  1. 使用import语句(推荐)
java 复制代码
package com.itxx.test;
import com.it.test.Test;
public class ImportTest {
    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test);
    }

}
  1. 可以导入整个包(谨慎使用)可以导入整个包,但通常不建议这样做,因为可能导致命名冲突:
java 复制代码
package com.itxx.test;
import com.it.test.*;
public class ImportTest {
    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test);
    }

}

import

java会默认导入java.lang包下所有的类,因此有些类我们可以直接使用

如果导入两个相同的类,则只能用包名+类名来显示调用类:

com.it.test.Test test = new com.it.test.Test();

静态导入

java 复制代码
package com.itxx.test;
import com.it.test.*;
import static java.lang.Math.*; // 导入Math类的所有静态属性
import static java.lang.Math.PI; // 导入Math类的PI属性
public class ImportTest {
    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test);
        System.out.println(random());
        System.out.println(PI);
    }

}

引入其他包中的类,为什么不执行其main方法:

在Java中,当你从其他包引入一个类时,该类的main方法不会自动执行,这是由Java程序的执行机制决定的。以下是具体原因:

1. Java程序的执行机制

  • 入口点唯一性 :Java程序运行时,只会执行你明确指定的那个类的main方法(通过命令行或IDE配置)
  • 类加载不等于执行import语句只是让编译器知道类的存在,实际加载类时也不会自动执行main方法

2. import语句的本质

import语句只是:

  • 一种编译时的声明,告诉编译器在哪里可以找到类
  • 一种避免写完全限定类名的便捷方式
  • 不会导致类的初始化或方法执行

3. main方法的特殊性

main方法是:

  • 一个标准的程序入口点
  • 只有在作为启动类时才会被JVM调用
  • 本质上只是一个普通的静态方法,除非被显式调用否则不会执行

4 实例:

typescript 复制代码
package com.itxx.test;
import com.it.test.Test;
public class ImportTest {
    public static void main(String[] args) {
        Test.main(args);
    }

}
相关推荐
短剑重铸之日几秒前
《7天学会Redis》Day 3 - 持久化机制深度解析
java·redis·后端·缓存
萧曵 丶12 分钟前
Spring 全套高频面试题(由浅到深 完整版)
java·后端·spring
武子康13 分钟前
大数据-213 Python 手写 K-Means 聚类实战(鸢尾花 Iris 数据集):从距离函数到迭代收敛与坑点
大数据·后端·机器学习
神奇小汤圆15 分钟前
MySQL大事务的Recovery优化
后端
魔术师卡颂21 分钟前
提问量暴跌 80% ,Stack Overflow 却赚翻了?
前端·后端·ai编程
FAFU_kyp1 小时前
Rust 字符串与切片
开发语言·后端·rust
Java水解1 小时前
Nginx 配置文件完全指南
后端·nginx
好想来前端1 小时前
私有化部署 LLM 时,别再用 Nginx 硬扛流式请求了 —— 推荐一个专为 vLLM/TGI 设计的高性能网关
后端·架构·github
OpenTiny社区1 小时前
TinyPro v1.4.0 正式发布:支持 Spring Boot、移动端适配、新增卡片列表和高级表单页面
java·前端·spring boot·后端·开源·opentiny
Java编程爱好者1 小时前
如何使用SpringAI来实现一个RAG应用系统
后端