【Java 学习】详细讲解---包和导包、Scanner类、输入源

article/2025/8/15 23:03:51

1. 包

1.1 什么是包?

举个例子,你和你的同学有不同的家庭,你们都有自己的爸爸妈妈,都有自己的家。在自己的家中你们可以按照自己爱好摆放东西,都互不干扰。但是,假如你们的家都在一起,你们就不能按照自己的喜好摆放东西了,你们之间会相互影响。

为了让每个程序之间直接有相对好的隔离,就设置了包。包其实就是一个串文件夹,在不同的文件夹中可以设置相同的名字的文件。

1.2 包的主要作用

包(Package)是一种将类和接口组织在一起的机制

  1. 命名空间管理
    包提供了一种命名空间管理机制,避免类名冲突。通过将类放在不同的包中,可以确保类名的唯一性。例如,多个项目中可能会有多个名为 Logger 的类,但通过将它们放在不同的包中,可以避免命名冲突。

  2. 访问控制
    包还提供了访问控制机制。通过使用不同的访问修饰符(如 public、protected、默认(即不写访问修饰符)和 private),可以控制类、方法和变量的可见性。例如,一个类的成员可以对同一个包中的其他类可见,但对其他包中的类不可见。

  3. 代码组织
    包有助于将相关的类和接口组织在一起,使代码更易于管理和维护。通常,一个包会包含一组具有相似功能或用途的类和接口。例如,java.util 包包含了各种实用工具类,如 List、Map、Set 等。

1.3 src文件

src 文件夹(或目录)通常代表“source”的缩写,用于存放项目的源代码文件。这个文件夹是项目的核心部分,包含了所有的业务逻辑、类定义、函数实现等代码文件。

项目的标准目录结构如下:
在这里插入图片描述

子文件夹组织:
src 文件夹通常会进一步细分为多个子文件夹,以更好地组织代码。
例如:

  • main/java:存放主要的 Java 源代码文件。
  • main/resources:存放资源文件,如配置文件、静态文件等。
  • test/java:存放测试代码文件。
  • test/resources:存放测试资源文件。

1.4 创建包

包时在src文件下创建的
在这里插入图片描述
接着创建包
在这里插入图片描述

包名通常是小写的,并且通常使用公司域名的逆序来命名,以确保全局唯一性。

把图片中的package_name改为:com.example.myapp

这个包名com.examplemyapp是一个文件的名字吗?

我们看一下src文件的有没有com.example.myapp文件
在这里插入图片描述

src文件夹中只有com文件夹,没有com.example.myapp文件,其实.把包的名字分隔了,分割成三个镶嵌的文件夹
在这里插入图片描述
com.example.myapp文件夹中创建Myclass
在这里插入图片描述

在这里插入图片描述
在 Java 源文件的顶部,使用 package 关键字来指定包名

目前该包的目录结构为:
在这里插入图片描述

2. 导包

2.1 什么是导包?

“导包”指的是使用 import 语句将一个类或接口从一个包中引入到当前的编译单元中,以便在代码中可以直接使用这些类或接口,而不需要每次都写完整的类名或接口名。

导包的作用:

  • 简化代码
    导包可以让你在代码中直接使用类或接口的简单名称,而不是完整的类名或接口名。这使得代码更简洁、易读。
    例如,java.util.ArrayList 可以简化为 ArrayList。
  • 避免命名冲突
    当两个不同的包中有同名的类或接口时,通过导包可以明确指定你使用的是哪个包中的类或接口。
    例如,java.util.Date 和 java.sql.Date 都有 Date 类,通过导包可以区分它们。

2.2 导包的语法

导入单个类或接口

import package_name.ClassName;

package_name:包的名子。
ClassName:类的名字。

导入整个包中的所有类和接口

import package_name.*;

package_name:包的名子。
*:表示该包下的所有类

静态导入(Java 5 及以上)
静态导入允许你直接使用类中的静态成员(如静态方法和静态字段),而不需要类名前缀。

import static package_name.ClassName.staticMember

static 关键字:表示静态导入。
package_name:包的名子。
ClassName:类的名字。
staticMember:类中静态成员变量或静态方法。

示例:

  1. 单个类的导入,导入ArrayList

    import java.util.ArrayList;public class InOut {public static void main(String[] args){// 创建数组ArrayList<String> arr = new ArrayList<>();// 添加元素arr.add("Hello");arr.add("World");// 打印System.out.println(arr);}
    

    ArrayListjava.util包中的泛型类,是一个动态数组。

  2. 整个包的导入,使用ArrayList和HashMap类

    import java.util.*;public class InOut {public static void main(String[] args){// 创建数组ArrayList<String> arr = new ArrayList<>();// 添加元素arr.add("Hello");arr.add("World");// 打印System.out.println(arr);HashMap<String, Integer> map = new HashMap<>();map.put("One", 1);map.put("Two", 2);System.out.println(map);}
    }
    

    ArrayListHashMapjava.util包中的两个类

2.3 习题

关于包的说法, 下列错误的是:( )

A.包是一组类的集合
B.包能防止类的名字冲突
C.import 语句能够导入一个指定的包
D.import static 能够导入一些静态方法

答:C

import java.util.Arrays;import java.util;  // 报错import java.util.*;

第1行导入的是具体的包中的类。

第2行报错,不能导入指定包。

第3行导入的是包下的所有类,用到这个包底下哪个类就回调用哪个。

3. Scanner 类

3.1 什么是 Scnner 类?

我们人与人之间的交流一般都是通过对话,但是我们怎么与程序进行对话呢?

答:用Scanner类。

Scanner 类是 Java 标准库中的一个实用工具类,用于从标准输入(通常是键盘输入)或其他输入源(如文件或字符串)读取不同类型的输入数据。Scanner 类提供了多种方法来读取和解析不同类型的数据,如整数、浮点数、字符串等。

主要特点:

  • 输入源多样:Scanner 可以从多种输入源读取数据,包括标准输入、文件、字符串等。
  • 类型丰富:Scanner 支持读取多种数据类型,如 int、double、String 等。
  • 分隔符灵活:Scanner 使用分隔符(默认为空白字符,包括空格、制表符、换行符等)来分隔输入数据,但也可以自定义分隔符。
  • 简单易用:Scanner 提供了丰富的 API,使得读取和解析输入数据变得非常简单。

3.2 创建一个 scanner 对象

Scanner类在java.util包中,使用Scanner需要调包。
示例:

import java.util.Scanner;public class InOut {public static void main(String[] args){Scanner  sc = new Scanner(System.in);//读取字符串System.out.println("请输入您的名字");String s = sc.next();// 读取整型System.out.println("请输入您的年龄");int n = sc.nextInt();//打印System.out.println(s+"年龄是:"+n+"岁");// 使用结束后释放资源sc.close()}
}

同学们可以发现,创建Scanner对象的时传入了一个参数System.in,为什么要传参呢?

在创建 Scanner 对象时传递 System.in 参数是为了指定输入源System.in 是一个标准输入流,通常用于从键盘读取用户输入。通过传递 System.inScanner 构造函数,你可以让 Scanner 从标准输入(即键盘)读取数据。

3.3 输入源

  1. 标准输入 (System.in)
    System.in 是一个 InputStream 对象,表示标准输入流,通常是从键盘输入的数据。

    import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入您的名字:");String name = scanner.nextLine();System.out.println("你好," + name);scanner.close();}
    }
    
  2. 字符串输入
    从字符串读取数据时,可以传递一个 String 对象给 Scanner 构造函数。

    import java.util.Scanner;public class Main {public static void main(String[] args) {String input = "100 200 300";Scanner scanner = new Scanner(input);while (scanner.hasNextInt()) {int number = scanner.nextInt();System.out.println(number);}scanner.close();}
    }
    
  3. 文件输入:
    从文件读取数据时,可以传递一个 File 对象给 Scanner 构造函数。

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;public class Main {public static void main(String[] args) {try {File file = new File("input.txt");Scanner scanner = new Scanner(file);while (scanner.hasNextLine()) {String line = scanner.nextLine();System.out.println(line);}scanner.close();} catch (FileNotFoundException e) {System.out.println("文件未找到!");e.printStackTrace();}}
    }
    

4. Scanner(System.in) 常用的方法

4.1 读取数值

方法名描述
next()读取下一个 token(默认以空白字符分隔)。
nextLine()读取下一行(字符串)。
nextInt()读取下一个整数。
nextDouble()读取下一个双精度浮点数。
nextBoolean()读取下一个布尔值。
nextByte()读取下一个字节。
nextShort()读取下一个短整数。
nextLong()读取下一个长整数。
nextFloat()读取下一个单精度浮点数。

nextLine():nextLine() 会读取包括空格在内的所有字符,直到遇到换行符\n为止。
next():next() 方法读取输入中的下一个 token,并返回一个字符串。一个 token 是由空白字符分隔的一段连续的字符序列。默认的分隔符是空白字符,包括空格( )、制表符(\t)、换行符(\n)、回车符(\r)等。例如,输入字符串 “Hello World” 会被 next() 方法分成两个 token:“Hello” 和 “World”。

示例:

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入您的名字:");String name = scanner.nextLine(); // 读取一行(字符串)System.out.println("你好," + name);System.out.print("请输入您的爱好(用空格分隔):");String hobbies = scanner.next(); // 读取下一个 tokenSystem.out.println("你的爱好是:" + hobbies);System.out.print("请输入您的年龄:");int age = scanner.nextInt(); // 读取下一个整数System.out.println("你的年龄是:" + age);System.out.print("请输入您的身高(米):");double height = scanner.nextDouble(); // 读取下一个双精度浮点数System.out.println("你的身高是:" + height + " 米");scanner.close();}
}

4.2 检查输入

在使用 Scanner 类读取输入时,检查输入的作用非常重要。这些检查方法可以帮助你在读取数据之前验证输入的类型和格式,从而避免潜在的运行时错误和异常。

方法描述
hasNext()检查是否还有下一个 token(默认以空白字符分隔)。
hasNextLine()检查是否还有下一行。
hasNextInt()检查是否还有下一个整数。
hasNextDouble()检查是否还有下一个双精度浮点数。
hasNextFloat()检查是否还有下一个单精度浮点数。
hasNextLong()检查是否还有下一个长整数。
hasNextByte()检查是否还有下一个字节。
hasNextShort()检查是否还有下一个短整数。

示例:

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入一个整数:");if (scanner.hasNextInt()) {int number = scanner.nextInt();System.out.println("你输入的整数是:" + number);} else {System.out.println("输入的不是整数!");scanner.next(); // 清除错误输入}scanner.close();}
}

http://www.hkcw.cn/article/JymMbbxwlg.shtml

相关文章

LEfSe分析:R语言一句代码轻松实现

数据和代码获取&#xff1a;请查看主页个人信息&#xff01;&#xff01;&#xff01; 大家好&#xff0c;今天我将介绍如何使用R语言进行LEfSe&#xff08;Linear discriminant analysis Effect Size&#xff09;分析及可视化。LEfSe是一种基于线性判别分析的算法&#xff0c;…

马斯克遭白宫背刺 提名撤销引失望

刚走一天就遭白宫“背刺”,马斯克对此表示失望。2023年10月11日,美国国家航空航天局在休斯敦约翰逊航天中心首次向公众展示了从小行星贝努采集到的样本图片和视频。5月31日,美国白宫宣布撤销对富豪贾里德艾萨克曼出任下一任NASA局长的提名。据报道,艾萨克曼与企业家马斯克关…

双腿戴假肢男子4小时登顶泰山 毅力与自信的见证

5月31日上午,山东泰安泰山景区天气晴朗。一位双腿安装假肢的男士一手拄着拐杖一手抓住扶手向上攀登的场景被游客上传到社交媒体,引发网友热议。6月1日下午,当事人盛先生介绍,这是他第三次登泰山了,从中天门到南天门花费了约4个小时。盛先生说,今年端午假期前,他出差来到…

南京大学通报施工方偷窃学生物品 施工单位被罚违约金

5月29日,南京大学基本建设处发布了一份关于对南京诚善科技有限公司执行合同违约金的通报。通报指出,南京诚善科技有限公司员工于5月13日在学校宿舍楼内偷窃学生物品。根据施工合同相关规定并经处办公会研究确认,南京大学基本建设处决定对该公司执行2000元违约金,从工程款中…

为省30块钱 卡车司机在青海缺氧离世 爱心卡友千里送别

46岁的河南卡车司机常志荣在青藏线因高原缺氧离世。今天上午,多名爱心卡友跨越2400多公里,将他的骨灰及车辆从五道梁地区送回老家安阳林州。5月27日,常志荣在青藏线五道梁地区遭遇严重缺氧不幸去世。车友任先生透露,出发前同行曾建议他至少携带两罐氧气,但他为了节省30元费…

樊振东将改变德国联赛竞争格局 新援加盟引关注

北京时间6月1日,德甲萨尔布吕肯俱乐部宣布中国运动员樊振东加盟该俱乐部,将参与2025-2026赛季德国乒乓球甲级联赛和欧洲冠军联赛。这并不意味着国内赛场上看不到樊振东的身影。目前樊振东仍处在奥运后的调整期,计划通过全国比赛以及国内外俱乐部比赛逐步恢复运动状态。樊振东…

少写一点,发布快一点:2025年的前端极简主义

我们先直白点&#xff1a;你大概并不需要那些 Button.js、PrimaryButton.js、OutlinePrimaryButton.js 甚至 MaybeIfItsFridayButton.js。 在2025年&#xff0c;我们被过度抽象的组件库淹没了——原子设计、过度工程化的 UI 库。 现在&#xff0c;该是我们聊聊「反潮流」的前端…

聊一聊接口测试中耗时请求如何合理安排?

目录 一、异步处理与轮询机制 轮询检查机制 二、 并行化测试执行 三、模拟与桩技术&#xff08;Mock/Stub&#xff09; 四、动态超时与重试策略 五、测试架构设计优化 分层测试策略 并行化执行 网络优化 六、测试用例分层管理 金字塔策略 七、 缓存与数据复用 响应…

VMware没有虚拟网卡,VMnet1,VMnet8显示黄色三角警告

VMware安装后没有虚拟网卡&#xff0c;VMnet1&#xff0c;VMnet8显示黄色三角警告 VMware安装后没有虚拟网卡&#xff0c;VMnet1&#xff0c;VMnet8显示黄色三角警告 VMware安装后没有虚拟网卡&#xff0c;VMnet1&#xff0c;VMnet8显示黄色三角警告 问题描述&#xff1a; 主机…

情侣和一家三口在迪士尼打架 因拍照起冲突

5月31日,有网友发布视频称,在上海迪士尼有一对情侣和一家三口发生了冲突,此事引发了广泛关注。视频中可以看到,双方在现场扭打,周围的人纷纷上前劝阻。据权威人士透露,事件发生在5月31日,地点并不是排队区域,而是游客自由打卡拍照的地方。情侣和一家三口因拍照问题产生…

猎德村龙舟文化与其他地区区别是什么 翻船事件引关注

端午节对于很多人来说只是一个普通的假期,但对于广东人来说却意义非凡。因为在这一天,他们要举行紧张刺激的龙舟比赛。猎德村在以往的比赛中总是表现亮眼,但今年还没正式开始就闹出了大笑话。三条新龙舟中有两条翻了,隔壁村因此疯狂嘲笑他们。网友们得知龙舟翻船的原因竟与…

未来3天可能有地磁暴 或现红绿极光

6月1日,中国气象局国家空间天气监测预警中心发布消息,北京时间5月31日7时45分左右,太阳活动区14100开始爆发耀斑,软X射线流量迅速上升,并在8时05分达到M8.1级中等耀斑强度。预计未来三天可能发生地磁暴,6月2日左右我国北部地区有机会出现较为明显的极光,部分地区甚至可能…

莎拉称不优先考虑与马科斯和解谈判 民众与国家更重要

综合菲律宾《马尼拉标准报》等媒体报道,菲律宾副总统莎拉杜特尔特表示,她不优先考虑与总统马科斯进行和解谈判。莎拉认为,目前不应谈论和解,因为个人问题并不重要,更重要的是民众与国家的利益。此前,据路透社等媒体5月19日报道,马科斯在社交媒体上分享了一期播客,表达了…

肖战主演的《藏海传》在台湾被刷屏 两岸文化共鸣引发热议

正在热播的电视剧《藏海传》在台湾引起了广泛关注,不仅观众好评不断,媒体也争相报道。这部剧以其精良的制作、紧凑的情节和展现的中华文化吸引了大量台湾观众。5月31日,“肖战演藏海在台湾刷屏”成为微博热搜话题。近年来,大陆电视剧在台湾持续走红。专家指出,除了这些作品…

孙中山孙女曾无偿捐赠大批文物 心系家乡贡献卓著

6月1日,孙中山长孙女孙穗瑛的家人为她在加州举办追思会。孙穗瑛于3月24日在美国去世,享年103岁。她和妹妹孙穗华生前都十分关心家乡中山的发展,多次回国探亲,并无偿捐赠大批文物。两人在2016年11月荣获中山市政府授予的“中山市荣誉市民”称号。孙穗瑛出生于1922年1月16日,…

最适合祝福考生的台词出现了 好运加持轻松过关

稳住,你能赢!考的全会,蒙的全对,好运加持,轻松过关。放轻松,努力就是最好的答案。笔下如有神,运气爆棚时,祝你考场开挂,惊喜连连!深呼吸,慢慢来,你比想象中强大。考的题目都眼熟,选的答案都正确,好运来敲门啦!笔下生花,未来可期。幸运小星星,统统落你卷子上,…

和院士一起科学过六一 科普短视频点燃好奇心

2025年六一国际儿童节来临之际,中国儿童中心联合抖音邀请多位中国工程院院士和中国科学院院士,针对青少年儿童关心的趣味学科知识进行解答分享。这些内容被汇总到“院士答青少年问”专题页,方便家长和孩子们查阅浏览。5月26日,火山地质学家刘嘉麒院士和遥感学家童庆禧院士来…

普京为何重提“中俄印”三角 重启对话时机成熟?

普京政府希望尽早重启中俄印大三角机制,呼吁中印尽快给出答复。俄罗斯外长拉夫罗夫公开表示,鉴于中印在实控线问题上已达成谅解,恢复三方对话机制的时机已经成熟。俄罗斯对中俄印三边机制非常重视,认为这可以与自己力推的“向东看”战略相辅相成。此前,中俄印三方已召开过…

2022---不重复版的数的划分-且范围太大

1.数的划分--数的划分--dfs剪枝-CSDN博客 2.范围太大&#xff0c;这题用dp 3.状态转移公式其中1是泛指 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair<int,int> pii; ll dp[2025][12]; int n,k; void solv…

女子被疑患精神病邻居多次持刀砍门 事件引发社区关注

近日,有大连网友在社交平台发布视频称,5月1日和5月28日,疑似患有精神疾病的邻居两次持刀上门,用刀砍其家门并进行踢踹。该网友表示,他们才搬来一年,与这名邻居素不相识,没有正面交流过。6月1日,一名当地官方知情人士透露,该名人员精神方面疑似有问题,目前属地公安和社…