• Java面向对象(基础)--package和import关键字的使用


    一、package关键字的使用

    1. 说明

    • package:包
    • package用于指明该文件中定义的类、接口等结构所在的包
    • 语法格式

    image.png

    举例:pack1\pack2\PackageTest.java

    package pack1.pack2; //指定类PackageTest属于包pack1.pack2
    	
    public class PackageTest{
    	public void display(){
    		System.out.println("in method display()");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    比如随便写的一个文件:

    package Object6;
    
    /**
     * ClassName: Person
     * Package: Object6
     * Description:
     *案例:
     *
     * (1)创建Person类的对象,设置该对象的name、age和gender属性,
     * 调用study方法,输出字符串“studying”;
     * 调用showAge()方法,返回age值;
     * 调用addAge(int addAge)方法给对象的age属性值增加addAge岁。比如:2岁。
     *
     * (2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。
     * @Author 雨翼轻尘
     * @Create 2023/9/25 0025 10:45
     */
    public class Person {
        String name;
        int age;
        char gender;
        public void study(){
            System.out.println("studying");
        }
        public int showAge(){
            return age;
        }
        public void addAge(int addAge){
            age+=addAge;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    类和包:

    image.png

    类就相当于每个学生,包就相当于班级。
    将不同功能的类放在不同的包下面,方便检查和调用。

    也有一些文件直接写在src目录下,没有从属的包,叫无名包:(包没有名字,类也没有具体的包从属)

    image.png

    💬注意

    • 一个源文件只能有一个声明包的package语句

    • package语句作为Java源文件的第一条语句出现(前面若有空行也算第一条语句)。若缺省该语句,则指定为无名包。

    • 包名,属于标识符,满足标识符命名的规则和规范(全部小写,若大写并不会报错,但最好遵守规范)、见名知意

    • 包通常使用所在公司域名的倒置:com.atguigu.xxx。(XXX是根据包具体的功能来写的)

    • 大家取包名时不要使用"java.xx"包(不要java开头,可以java结尾)

    若此时创建了一个java.at的包:

    image.png

    并创建了一个类:

    image.png

    随便输出一下:

    image.png

    运行一下就会报错:

    image.png

    运行代码的时候要执行main方法,执行main方法需要类加载,类加载的时候需要知道包在哪儿。
    类加载的时候使用类加载器,专门加载类,将它放在方法区。在加载的时候需要看到这个类是属于哪个包的,它可看到java开头的包特别敏感,它会认为是JDK提供的API(安全机制的问题),就去那里面找,没有找到此时的包,就会报错啦。

    • 包对应于文件系统的目录,package语句中用 “.” 来指明包(目录)的层次,每.一次就表示一层文件目录。

    随便一个文件,右键点击“打开于Explorer”:

    image.png

    文件目录:

    image.png

    • 同一个包下可以声明多个结构(类、接口),但是不能定义同名的结构(类、接口)。不同的包下可以定义同名的结构(类、接口)。

    2. 包的作用

    • 包可以包含类和子包,划分项目层次,便于管理

    比如:

    image.png

    • 帮助管理大型软件系统:将功能相近的类划分到同一个包中。比如:MVC的设计模式

    • 解决类命名冲突的问题

    • 控制访问权限

    3. JDK中主要的包

    java.lang----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread,提供常用功能

    java.net----包含执行与网络相关的操作的类和接口。

    java.io ----包含能提供多种输入/输出功能的类。

    java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。

    java.text----包含了一些java格式化相关的类

    java.sql----包含了java进行JDBC数据库编程的相关类/接口

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

    二、import关键字的使用

    • import : 导入

    为了使用定义在其它包中的Java类,需用import语句来显式引入指定包下所需要的类。

    • 语法格式

    image.png

    举例:

    import pack1.pack2.Test; //import pack1.pack2.*;表示引入pack1.pack2包中的所有结构
    public class PackTest{
        public static void main(String args[]){
            Test t = new Test(); //Test类在pack1.pack2包中定义
            t.display();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • import语句来显式引入指定包下所需要的类。相当于import语句告诉编译器到哪里去寻找这个类。

    • import语句,声明在包的声明和类的声明之间

    比如:

    image.png

    • 如果需要导入多个类或接口,那么就并列显式多个import语句即可。

    比如:

    image.png

    • 如果使用a.*导入结构,表示可以导入a包下的所有的结构。举例:可以使用java.util.*的方式,一次性导入util包下所有的类或接口。

    比如这三个都是util包下的:

    image.png

    那么可以这样来写:

    /*import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Scanner;*/
    
    import  java.util.*;	// *表示util包下所有的类/接口
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 如果导入的类或接口是java.lang包下的(使用频繁),或者是当前包下的,则可以省略此import语句。

    比如:

    package Object17;
    
    import java.lang.String;	//可以不用写
    import java.lang.System;	//可以不用写
    
    public class PackageImport {
        public static void main(String[] args) {   
            String str="hello";
            System.out.println(str);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    若在同一个包下面,也可以省略import语句。比如此时在同一个Object17包下面,就不需要导包:

    image.png

    • 如果已经导入java.a包下的类,那么如果需要使用a包的子包下的类的话,仍然需要导入

    比如要使用java.lang就不需要导包,若是要使用java.lang下面的子包里面的某个类,比如java.lang.reflect就需要导包。
    image.png

    现在咱们声明一个Fild类(java.lang.reflect下的某个类),先置成null:
    image.png

    这里会提示,好多包下面都有这个类。

    点击一下Field并将光标放在Field上,按Alt+Enter,会弹出一个框,选择需要的包即可:
    image.png

    此时系统会自动导包:

    import java.lang.reflect.Field;
    
    • 1

    再举个例子:

    比如现在正在cat包下的nose类中,想创建一个dog包下的people类的对象,那么就需要导包:import dog.people;
    image.png

    将这个位置改成*import dog.*;(现在可以调用dog包下的所有类):
    image.png

    此时若还想使用dog包下的子包one里面的Leo类,还需要重新调包import dog.one.Leo;
    image.png

    • 如果在代码中使用不同包下的同名的类,那么就需要使用类的全类名的方式指明调用的是哪个类。

    比如Date类在很多包里面都有,现在我在一个文件中想用它们两个:
    image.png

    先使用它:
    image.png

    目前这个Date就使用的是util下的:
    image.png

    现在又写了一个date1,想要使用的是sql下的类:
    image.png

    但是它目前默认是util下面的:
    image.png

    若此时手动导包import java.sql.Date是不行的,date和date1都变成sql下的了。
    现在想要的是:date是util包下的,date1是sql包下的。

    那如何指明date1是java.sql下的呢?

    只能这样:

    java.sql.Date  date1=null;
    
    • 1

    看一下全部代码:

    package cat;
    
    import java.util.Date;
    
    public class nose {
        //使用import的方式指明
        Date date=new Date();
    
        //使用全类名的方式(把类所在的包都加上)
        java.sql.Date  date1=new java.sql.Date(1332);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    同样,date也可以全类名定义,这样就不需要在上面再导包了。

    以下是两种方式:
    image.png

    其实,只要用到具体的类,都要写明“全类名”(是哪个包下的哪个类),只不过这样会使得代码可读性太差,所以才出现了import导入,再使用这个包下面的类的时候就不用再写全类名了。
    若是在同一个文件中,要使用不同包下的同一个名字的类,那就需要写完整全类名以示区分。

    • (了解)import static组合的使用:调用指定类或接口下的静态的属性或方法。

    以前都需要拿对象来调用,这里却可以用类(System)调用:

    System.out.println();
    
    • 1

    其实类也可以调用,只不过调用的结构需要有static修饰。

    按住Ctrl键点击out
    image.png

    可以看到被static修饰了:
    image.png

    如果在上面指明了out的所在包:import static java.lang.System.out;,在下面就可以直接调用out

    import static java.lang.System.out;
    public class nose {
        public static void main(String[] args) {
            out.println("hel");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行结果:
    image.png


    再举个例子:

    public static void main(String[] args) {
            System.out.println(Math.PI*3*3);
    }
    
    • 1
    • 2
    • 3

    按住Ctrl键点击PI:(可以看到PI也被static修饰)
    image.png

    如果在上面指明了out的所在包:import static java.lang.Math.PI;,在下面就可以直接调用PI

    import static java.lang.System.out;
    import static java.lang.Math.PI;
    public class nose {
        public static void main(String[] args) {
            out.println(PI);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行结果:
    image.png

    这里主要是方便以后看别人写的代码不至于稀里糊涂,具体使用按照自己的习惯。

  • 相关阅读:
    Shiro中的session和cookie
    Flink 实践 | B站流式传输架构的前世今生
    线程的学习
    【ACWing】273. 分级(配数学证明)
    Element-UI 快速入门指南
    Python教程之深度比较Python移动应用框架
    Spring的Factories机制介绍
    2023山东科技大学计算机考研信息汇总
    小程序添加分享和禁用分享功能
    Android:DMB-T/H,开发记录
  • 原文地址:https://blog.csdn.net/m0_55746113/article/details/133970476