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

文章目录

  • 一、package关键字的使用
    • 1. 说明
    • 2. 包的作用
    • 3. JDK中主要的包
  • 二、import关键字的使用

一、package关键字的使用

1. 说明

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

image.png

举例:pack1\pack2\PackageTest.java

package pack1.pack2; //指定类PackageTest属于包pack1.pack2public 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.mzph.cn/news/114010.shtml

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

相关文章

Xshell+screen解决ssh连接 服务器掉线的问题

Linux screen命令解决SSH远程服务器训练代码断开连接后运行中断_linux screen ssh-CSDN博客 Linux命令之screen命令_linux screen_恒悦sunsite的博客-CSDN博客 使用教程: 这里粗略介绍一下 (1)xshell xftp(xshell点这个&#…

组合数(递推版)的初始化

初始考虑为将第一列数和斜对角线上的数进行初始化。 橙色方块由两个绿色方块相加而来,一个为1,一个为0,所以斜对角线都为1,可以通过计算得来,不需要初始化,需要与码蹄集盒子与球 第二类Stirling数&#xf…

Go并发编程之一

一、前言 新年学新语言Go系列文章已经完结,用了最简单的例子去了解Go基础语法,但Go最牛B的是它对并发的友好支持,每一门语言都有它自己独特的优势,如Java适合大型工程化项目,Python适合做数据分析及运维脚本&#xff0…

✔ ★【备战实习(面经+项目+算法)】 10.21学习时间表(总计学习时间:5h30min)(算法刷题:7道)

✔ ★【备战实习(面经项目算法)】 坚持完成每天必做如何找到好工作1. 科学的学习方法(专注!效率!记忆!心流!)2. 每天认真完成必做项,踏实学习技术 认真完成每天必做&…

工具篇之Axure RP 10的使用

引言 最近在学习原型图,针对画原型图的工具,反复对比墨刀、Axure、xiaopiu后,最终选择Axure。 接下来,我便从Axure RP 10的下载、安装、中文字体、授权等几个方面,来介绍Axure。 一、背景 Axure是一款强大的原型设计…

华为OD技术面试-最短距离矩阵(动态规划、广度优先)

背景 记录2023-10-21 晚华为OD三面的手撕代码题,当时没做出来,给面试官说了我的想法,评价:解法复杂了,只是简单的动态规范 或 广度优先算法,事后找资料记录实现方式。 题目 腐烂的橘子 问题描述&#xff…

[SQL | MyBatis] MyBatis 简介

目录 一、MyBatis 简介 1、MyBatis 简介 2、工作流程 二、入门案例 1、准备工作 2、示例 三、Mapper 代理开发 1、问题简介 2、工作流程 3、注意事项 4、测试 四、核心配置文件 mybatis-config.xml 1、environment 2、typeAilases 五、基于 xml 的查询操作 1、…

EtherCAT主站SDO写报文抓包分析

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

STM32-LCD液晶显示

目录 LCD液晶显示 ILI9341液晶控制器简介 液晶屏的信号线和8080时序 使用STM32的FSMC外设模拟8080接口时序 FSMC 功能框图 通讯引脚 存储器控制器 时钟控制逻辑 FSMC的地址映射 FSMC控制异步Nor Flash的时序 FSMC模拟8080时序 FSMC结构体 NOR FLASH时序结构体 F…

由Django-Session配置引发的反序列化安全问题

漏洞成因 漏洞成因位于目标配置文件settings.py下 关于这两个配置项 SESSION_ENGINE: 在Django中,SESSION_ENGINE 是一个设置项,用于指定用于存储和处理会话(session)数据的引擎。 SESSION_ENGINE 设置项允许您选择不…

Python基础教程:内置函数之字典函数的使用方法

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 len(字典名): 返回键的个数,即字典的长度 # len(字典名): # 返回键的个数,即字典的长度dic {a:123,b:456,c:789…

大疆智图(PC):新一代高效率高精度摄影测量软件

大疆智图是一款以二维正射影像与三维模型重建为主的软件,同时提供二维多光谱重建、激光雷达点云处理、精细化巡检等功能。它能够将无人机采集的数据可视化,实时生成高精度、高质量三维模型,满足事故现场、工程监测、电力巡线等场景的展示与精…

抖音热搜榜:探索热门话题的奥秘

抖音热搜榜是抖音平台根据用户观看、点赞、评论、分享等行为数据,综合计算得出的热门话题排行榜。它反映了当前平台上最热门、最受欢迎的话题和内容。抖音热搜榜有以下几个作用和意义: 1. 满足用户需求:抖音热搜榜为用户提供了丰富的热门话题…

华为云云耀云服务器L实例评测|使用clickhouse-benchmark工具对ClickHouse的性能测试

目录 引言 1 ClickHouse简介 2 利用docker安装ClickHouse 2.1 安装Docker 2.2 下载ClickHouse Docker镜像 2.3 创建ClickHouse容器 2.4 访问ClickHouse 3 创建测试表 4 运行 clickhouse-benchmark 5 分析结果 结语 引言 利用华为云的云耀云服务器L实例&#xff0c…

【Objective-C】浅析Block及其捕获机制

目录 Block的基本使用Block的声明Block的实现Block的调用 Block作为形参使用Block作为属性使用给Block起别名Block的copy Block的捕获机制auto类型的局部变量__block浅析static类型的局部变量全局变量 其他问题 Block的基本使用 什么是Block? Block (块…

【技术分享】RK356X Ubuntu 推流USB摄像头

本文适用与触觉智能所有RK356X ubuntu系统的主板。 IDO-SBC3566基于瑞芯微RK3566研发的一款高性能低功耗的智能主板,采用四核A55,主频高达1.8GHz,专为个人移动互联网设备和AIOT设备而设计,内置了多种功能强大的嵌入式硬件引擎,为…

2020年亚太杯APMCM数学建模大赛A题激光标记舱口轮廓生成求解全过程文档及程序

2020年亚太杯APMCM数学建模大赛 A题 激光标记舱口轮廓生成 原题再现: 激光是20中的一项重要发明世纪,它被称为“最锋利的刀”、“最精确的尺子”和“最不寻常的光”。 激光已越来越多地应用于工业加工, 其中可以是就业在各种加工业务例如作…

「Qt中文教程指南」如何创建基于Qt Widget的应用程序(三)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文描述了如何使用…

学信息系统项目管理师第4版系列34_10大管理49过程ITTO

整合管理 组 过程 输入 工具和技术 输出 启动 制定项目章程 立项管理文件协议事业环境因素组织过程资产 专家判断数据收集人际关系与团队技能会议 项目章程假设日志 计划 2.制定项目管理计划 项目章程其他知识领域规划过程的输出事业环境因素组织过程资产 专家…

设计链表复习

设计链表 class ListNode {int val;ListNode next;public ListNode() {}public ListNode(int val) {this.val val;}public ListNode(int val, ListNode next) {this.val val;this.next next;}}class MyLinkedList {//size存储链表元素的个数int size;//虚拟头节点ListNode…