[7] Java包机制

本文详细介绍了Java包机制,包括包的定义、创建、导入和静态导入。包主要用于管理和解决类的同名问题,通常按照公司域名倒置的方式命名。在命令行中可以手动创建和编译包,而在IntelliJ IDEA中则可以更方便地通过鼠标操作完成。导入关键字`import`用于在不同包间引入类,静态导入允许直接使用类的静态成员,无需指定类名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java包机制

初识Java包

包的本质:包其实就是文件夹

包的用途:主要用来管理类的,当项目做大的时候肯定要写很多的类,如果都放在同一个文件夹下面,就看到得很乱,使用包类整理一下,就看得比较清晰。然后包也可以解决一些类的同名情况,把相同的类放在不同的包,那这两个类就是不一样的。

包的由来:其实也是为了防止重复造轮子,所以Java就把已经写好的类放在一个文件夹中,下次要使用的时候直接导入包然后就直接使用包里面的类就好,这样就不用每次都要写同样的类了。

Java包的关键字 package

包的定义

定义包的格式:

package 包名;

包名的命名规则:

一般包名是按照公司域名起的(倒置)。比如百度:com.baidu.www

个人的话也可以是按博客命名,同样也是倒置。com.Cukor.blog

使用起名的时候用小写。

package关键字要放在类的首行,在它之前不能有其他的语句,否则会报错。

命令行创建包

现在把java源文件写一下:

package com.zhong.www;		//定义包的格式

public class Hello{
    public static void main(String[] args){
        System.out.println("Hello");
        System.out.println("This is test of create package");
    }
}

在这里插入图片描述

然后进入命令行去编译Hello.java文件。注意使用的命令
在这里插入图片描述

编译后出现了com文件夹。进入com文件夹中看看:

在这里插入图片描述

里面存放的是Hello.class文件

然后运行程序看看:

在这里插入图片描述

命令行的代码格式是

java 包名.类名

其中.具有分割包的作用,就相当于路径。最后到达.class文件的时候就使用类名就可以了。

  • 对命令行代码的解释:
    • -d 表示的是要生成一个目录,而目录的结构就是package定义的结构
    • . 表示的就是在当前目录下
    • 所以上面的代码表示的意思就是在当前的目录下生成一个子目录

Intellij IDEA中创建包

在这里插入图片描述

现在有几个类已经写好了,没有一个包管理一下,现在就几个那还好,如果是多了就难受了,所以建立一个包来管理一下。
在这里插入图片描述

给包起个名字:
在这里插入图片描述

再在com包中创建包,同样的方法:

在这里插入图片描述

最后创建包到blog:

在这里插入图片描述

在IDEA中直接鼠标拖动.java文件到com.Cukor.blog中,弹出窗口直接点重构。

在这里插入图片描述

然后在com.Cukor.blog包中就会多出一些东西:

在这里插入图片描述

这个就是在IDEA中创建包,操作简单,只用鼠标点点点就完事了。

包的导入

导入的关键字是import

再创建一个test包

在这里插入图片描述

然后在test包中写测试代码,想要使用到com.Cukor.blog包中的类(MM、GG等类),那就使用import语句将该包中的东西导入到test包中的测试类中:

直接看代码:

//MM类中
package com.Cukor.blog;		//MM类在com.Cukor.blog中,已经写好,代码如下

public class MM {
        private String name;
        int age;
        int faceScore;
        public MM(String name,int age,int faceScore){
                this.name=name;
                this.age=age;
                this.faceScore=faceScore;
        }
        public void printInfo(){
                System.out.println(this.name+"\t"+this.age+"\t"+this.faceScore);
        }
}

//在TestCode类中
package test;

import com.Cukor.blog.MM;	//导入com.Cukor.blog包中的MM类

public class TestCode {
        public static void main(String[] args) {
                MM mm=new MM("Alice",20,100);
                mm.printInfo();
        }
}

输出结果:

Alice	20	100

如果在com.Cukor.blog包中还有很多类,testCode类中也都想使用com.Cukor.blog包中的类就必须将com.Cukor.blog包导入进来,有两种方案:

  • 按照上面的方式:包名.类名 一个个导入
  • 使用新方式:包名.* 使用了通配符“*”,告诉JDK,自己去找相应的类导进来。很方便。

上面两种方式,效果和性能都是一样的,当包中的类很多的时候使用第一种方法就不太合适了,因为要写很多代码。

看看代码实现:

现在个包com.Cukor.blog,里面有MM类和GG类

package com.Cukor.blog;

public class MM{
    private String name;
    private int age;
    private int faceScore;
    public MM(String name,int age,int faceScore){
        this.name=name;
        this.age=age;
        this.faceScore=faceScore;
    }
    public void printInfo(){
        System.out.println(this.name+"\t"+this.age+"\t"+this.faceScore);
    }
}
package com.Cukor.blog;

public class GG{
        private String name;
    private int age;
    private int money;
    public MM(String name,int age,int money){
        this.name=name;
        this.age=age;
        this.money=money;
    }
    public void printInfo(){
        System.out.println(this.name+"\t"+this.age+"\t"+this.money);
    }
}

测试类:(在test包中)

package test;

import com.Cukor.blog.MM;	//导入com.Cukor.blog包中的MM类
import com.Cukor.blog.GG;	//导入com.Cukor.blog包中的GG类

public class TestCode {
        public static void main(String[] args) {
                MM mm=new MM("Alice",20,100);
                mm.printInfo();
            	GG gg=new GG("Jack",21,8888);
                gg.printInfo();
        }
}

输出结果:

Alice	20	100
Jack	21	8888

把测试代码改改:

package test;

import com.Cukor.blog.*;	//让JDK自己去找

public class TestCode {
        public static void main(String[] args) {
                MM mm=new MM("Alice",20,100);
                mm.printInfo();
                GG gg =new GG("Jack",21,8888);
                gg.printInfo();
        }
}

输出结果:

Alice	20	100
Jack	21	8888

通过测试后发现两个代码的效果是一样的。

包的静态导入

当一个类中的全部方法都使用了static修饰,可以采用静态导入的操作。

现在有一个类,类中的方法都使用static修饰,意味着这些方法可以直接调用不需要对象来调用。

package com.Cukor.blog;

public class HaveStatic {
        public static int sum(int a,int b){
                return a+b;
        }
        public static int max(int a,int b){
                return a>b?a:b;
        }
}

然后在测试类中静态导入

package test;

import static com.Cukor.blog.HaveStatic.*;	//静态导入的写法

public class TestCode {
        public static void main(String[] args) {
                int result=sum(99,55);
                System.out.println(result);
                result=max(99,55);
                System.out.println(result);
        }
}

输出结果:

154
99

学Java找Cukor丘克

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值