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

news2024/11/20 3:31:30

文章目录

  • 一、package关键字的使用
    • 1. 说明
    • 2. 包的作用
    • 3. JDK中主要的包
  • 二、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()");
	}
}

比如随便写的一个文件:

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;
    }

}

类和包:

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();
    }
}

  • 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包下所有的类/接口
  • 如果导入的类或接口是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);
    }
}

若在同一个包下面,也可以省略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;

再举个例子:

比如现在正在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;

看一下全部代码:

package cat;

import java.util.Date;

public class nose {
    //使用import的方式指明
    Date date=new Date();

    //使用全类名的方式(把类所在的包都加上)
    java.sql.Date  date1=new java.sql.Date(1332);
}

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

以下是两种方式:
image.png

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

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

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

System.out.println();

其实类也可以调用,只不过调用的结构需要有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");
    }
}

运行结果:
image.png


再举个例子:

public static void main(String[] args) {
        System.out.println(Math.PI*3*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);
    }
}

运行结果:
image.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1120317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCB铺铜的那些事

PCB在所有设计内容都设计完成之后,通常还会进行最后一步的关键步骤,那就是铺铜。铺铜可以将主要的地(GND,SGND(信号地),AGND(模拟地))连接在一起。 在设计软件…

自动化运维ansible(ansible-playbook)

一、ansible-playbook的构成 Inventory:主机列表,表示剧本中的任务要应用在哪些主机上; Tasks:具体任务,即调用哪些模块完成操作,可以配置多个任务; Variables:变量,包含内置变量和自定义变量;…

5分钟搞懂Web3架构

Web3通过区块链基础设施管理用户数据,重构了用户和互联网平台之间的关系,定义了全新的构建互联网应用的架构模式。原文: Web3 Architecture Shubham DhageUnsplash Web 1.0 只读网站,如Yahoo!, MSN,谷歌等。 Web 2.0 …

设计模式:代理模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

简介: 代理模式,它是一种结构型设计模式,它通过引入一个代理对象来控制对原始对象的访问。代理模式的主要目的是在保持原始对象完整性的同时,提供对原始对象的访问和控制。 代理模式包括以下三个角色: 抽象主题类&a…

EtherCAT主站SDO写报文抓包分析

0 工具准备 1.EtherCAT主站 2.EtherCAT从站(本文使用步进电机驱动器) 3.Wireshark1 抓包分析 1.1 报文总览 本文设置从站1的对象字典,设置对象字典主索引为0x2000,子索引为0x00,设置值为1500。主站通过发送SDO写报文…

Linux tmux使用总结

文章目录 1 tmux介绍2 tmux概念会话Sessions、窗口Windows、面板Panesstatus line中字段含义 3 Sessions会话管理新建会话断开当前会话进入之前的会话关闭会话查看所有的会话 4 tmux快捷指令系统指令窗口(Windows)指令面板(Panes)…

cec2013(python):麻雀搜索算法SSA求解CEC2013(提供完整python代码及参考文献)

一、麻雀搜索算法SSA求解cec2013 cec2013函数简介 CEC 2013 Special Session on Real-Parameter Optimization中共有28个测试函数维度可选择为10/30/50/100。 每个测试函数的详细信息如下表所示: 参考文献:[1] Liang J J , Qu B Y , Suganthan P N , …

Go并发编程之三

一、前言 前一篇讲了Go中通道的概念,只讲了无缓存通道,这一篇我们来了解一下有缓存通道以及它与无缓存通道一些区别。 二、有缓存通道 无缓存通道:如果通道数据没有被接收,发送方会被阻塞,相当于同步。 有缓存通道&…

Python图像处理【14】基于非线性滤波器的图像去噪

基于非线性滤波器的图像去噪 0. 前言1. min 滤波器2. max 滤波器3. mode 滤波器4. 高斯、中值、mode 和 max 滤波器对比小结系列链接 0. 前言 本节中我们将介绍诸如 max 和 min 之类的非线性滤波器,与中值滤波器一样,它们根据滑动窗口中像素的顺序统计信…

css中px、em、rem、%、vw、vh、vm、rpx 这些单位的区别

序言 px:像素 相对长度单位,相对于显示器屏幕分辨率(推荐使用) em:相对长度单位 基准点为父节点字体的大小,如果自身定义了font-size按自身来计算(浏览器默认字体是16px),整个页面内1em不是一个…

10个最流行的土木工程BIM软件

建筑信息模型 (BIM) 是一种数字化流程,最近在土木工程领域受到广泛关注。 它是一种设计、构建和管理项目的协作方法。 它涉及创建和使用建筑物的详细数字表示,包括 3D 模型、数据和有关项目的信息。 BIM 在参与项目的不同利益相关者之间提供实时协作&…

【Docker从入门到入土 2】Docker数据管理、网络通信和网络模式 1.0

Part2 一、Docker网络模式(面试高频)1.1 Docker 网络实现原理1.2 host模式1.3 container模式1.4 none模式1.5 bridge模式1.6 自定义网络 二、Docker网络通信2.1 端口映射2.2 容器互联 三、Docker资源控制3.1 Cgroup简介3.2 CPU资源控制3.2.1 设置CPU使用…

JAVA高级教程-Java Map(6)

目录 6、Map的使用 6、Map的使用 package Map01;import java.util.HashMap; import java.util.Map; import java.util.Set;/*** Map接口的使用*/ public class Demo01_HashMap {public static void main(String[] args) {Map<String,String> mapnew HashMap<>();ma…

黔院长 | 不忘初心在逆境中前行!

随着我国经济不断发展进步&#xff0c;以及人口老龄化程度的加深&#xff0c;加上自然环境质量的下降&#xff0c;人们越来越关注和重视自己的健康问题。据世界卫生组织相关数据显示&#xff0c;目前我国的亚健康率已经高达95%&#xff01;健康发展刻不容缓&#xff01; 国家政…

strlen函数

文章目录 strlen函数模拟实现&#xff1a; strlen函数 strlen函数是用来计算字符串长度的&#xff0c;不包括‘\0’ 使用&#xff1a; #include<stdio.h> #include<string.h>int main() {char arr[] "abcdef";int len strlen(arr);printf("%d\n…

Java基础(第一期):IDEA的下载和安装(步骤图) 项目结构的介绍 项目、模块、类的创建。第一个代码的实现

文章目录 IDEA1.1 IDEA概述1.2 IDEA的下载和安装1.2.1 下载1.2.2 安装 1.3 IDEA中层级结构介绍1.3.1 结构分类1.3.2 结构介绍project&#xff08;项目、工程&#xff09;module&#xff08;模块&#xff09;package&#xff08;包&#xff09;class&#xff08;类&#xff09; …

vue3 使用 elementUi: ./lib/theme-chalk/index.css is not exported from package

目录 1. 在 vue3 中使用 element-ui2. 如果启动报错&#xff1a;Module not found: Error: Package path ./lib/theme-chalk/index.css is not exported from package 1. 在 vue3 中使用 element-ui 在 vue3 中使用 element-ui&#xff0c;我们的流程一般是这样的&#xff1a;…

17 Transformer 的解码器(Decoders)——我要生成一个又一个单词

Transformer 编码器 编码器在干吗&#xff1a;词向量、图片向量&#xff0c;总而言之&#xff0c;编码器就是让计算机能够更合理地&#xff08;不确定性的&#xff09;认识人类世界客观存在的一些东西 Transformer 解码器 解码器会接收编码器生成的词向量&#xff0c;然后通…

Go并发编程之二

一、前言 前一篇 Go并发编程之一 主要介绍了如何通过go语句启动协程&#xff08;goroutine&#xff09;以及协程调度的不确定性&#xff0c;这一篇我们重点来介绍一下协程中另外一个重要概念channel&#xff0c;记住第一句话&#xff1a; goroutine之间不是通过共享内存来通信…

JUC高并发容器-CopyOnWriteArrayList

CopyOnWriteArrayList JUC高并发容器线程安全的同步容器类什么是高并发容器&#xff1f;CopyOnWriteArrayList JUC高并发容器 线程安全的同步容器类 Java同步容器类通过Synchronized(内置锁)来实现同步的容器&#xff0c;比如Vector、HashTable以及SynchronizedList等容器。线…