前言

我们在前面的文章中,学习了如何创建Java文件,也学习了Java里的标识符、运算符、进制等内容。有些同学觉得还不够过瘾,给壹哥发来了好多私信,期待我能够把进度更新的再快一点。这不,新内容这就给大家安排上了。今天这篇文章,壹哥就给大家详细讲讲Java里的输入和输出语句,看看有哪些小细节需要我们掌握。

------------------------------前戏已做完,精彩即开始----------------------------

全文大约【3000】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......

Java中其实有三个标准的“流”,他们被统称为standard streams:

标准输入:基于流的输入(stdin),Java中对应的API是System.in;

标准输出:基于流的输出(stdout),Java中对应的API是System.out;

标准错误:基于流的错误输出(stderr),Java中对应的API是System.err;

这三者之间的关系是,我们在命令行中输入各种指令,转到stdin的环境中运行处理,并在控制台中将处理好的结果,利用stdout和stderr进行输出显示为文本,还可以将结果重定向到对应的磁盘文件等。接下来壹哥就给大家详细地讲讲输入和输出。

一、输出语句

我们在前面的文章和案例中,其实早就知道Java是如何实现输出功能的了。没错,就是利用System.out.println()语句来实现的!接下来壹哥就给大家详细解读一下这个语句的作用及其含义。

1. System

我们先来看看System是个什么东东。

System是Java自带的一个类,它代表着系统类。该类位于java.lang包中,很多有用的系统级别的属性、控制方法都在该类里面。

System类的构造方法是private(私有)修饰的,所以我们无法直接创建该类的对象,即无法实例化该类。关于这些对象的实例化,壹哥在后面讲解面向对象时会再详细讲解,大家先不要着急哦。System内部的成员变量和成员方法都是static的,我们可以很方便的直接进行调用。在System类里面,给我们提供了如下几个核心功能:

标准输入输出:如out、in、err;

外部定义的属性和环境变量的访问:如getenv()、setenv()、getProperties()和setProperties();

加载文件和类库的方法:如load()和loadLibrary();

快速拷贝数组的方法:arraycopy();

jvm操作:如gc()、runFinalization()、exit();

获取时间方法:如System.nanoTime 和 System.currentTimeMillis。

2. out与err

out表示一种“标准”的输出流,它是System类中的静态成员,可以直接被我们调用,且这个成员变量是java.io.PrintStream类的引用。

另外还有一个与out功能类似的输出流err。err表示“标准”的错误输出流,此流可以打开并准备接受输出的数据。一般err流用于显示错误消息,或者用于显示需要引起用户特别注意的信息,在控制台中会显示红色的文字。

其实out和err的用法完全一样,功能也基本相同。out和err的唯一区别就是,out往往是带缓存功能的,而err没有缓存功能(默认设置,可以更改)。

3. print和println

print()和println()都是java.io.PrintStream类里的方法,它们的作用都是向控制台输出信息。两者的基本作用完全一样,只是print()方法不会产生换行,println()会产生换行,因为println是print line的缩写,表示输出并换行。

通过以上这3个API(应用程序接口)的讲解,我们可以总结出一个基本的规则:在Java中,被static关键字修饰的成员变量,可以直接通过"类名.成员名"的形式来引用,不用创建类的实例对象。所以我们可以直接调用System类里的静态成员out,即System.out。又因为System.out是java.io.PrintStream类的实例引用,所以又可以通过 System.out.println(); 的形式来调用。

以上这段话,如果你看着有点懵逼,请不用纠结。这属于面向对象的知识,我们暂时还没学到,在后面面向对象的章节中,壹哥会详细讲解!

4. 基本案例

以下是关于标准输出的代码案例,大家对着练习一下即可,很简单的哦。

public class Demo01 {

	public static void main(String[] args) {
//输出语句
//不换行输出
System.out.print("Hello");
System.out.print(" World"); //换行输出
System.out.println("你好");
System.out.println("一一哥"); //标准的错误输出,控制台会用红色文字显示
System.err.append("标准的错误输出,哈哈哈");
} }

运行效果如下图所示:

5. 格式化输出

5.1 概念

有时候,计算机默认输出的数据格式,并不一定能够满足我们的阅读需求,比如有的人想要保留小数点后两位,也有的人想要保留小数点后四位,大家的需求是个性化的,那么Java能不能针对特殊的需求,进行一些个性化的输出呢?这是可以实现的!这就需要用到格式化输出了!

利用格式化输出功能,可以把数据显示成我们期望的格式。我们可以使用System.out.printf()语句,并结合%与?这两个占位符来实现,printf()方法可以把后面的参数格式化成指定的格式。

5.2 占位符

Java为了实现格式化功能,给我们提供了多种占位符,可以把各种数据类型“格式化”成指定的字符串。常用的占位符有如下这些:

这里我们要注意,在输出语句中,%表示占位符。如果连续使用两个%%,应该传入两个对应的数字,否则会把后面的%字符给原文输出。

如果我们想了解更详细的格式化参数,可以参考JDK文档:java.util.Formatter

5.3 案例

下面是壹哥设计的与本小节对应的代码案例,大家可以对照练习。

public class Demo01 {

	public static void main(String[] args) {
//格式化输出 //默认输出格式
//double d = 88800000;
//System.out.println(d); // 8.88E7 double d = 3.1415926;
System.out.printf("%.2f\n", d); // 保留2位小数3.14
System.out.printf("%.4f\n", d); // 保留4位小数3.1416 //占位符与格式化
int n = 123456789;
//%08x,输出16进制数据,如果不足8位,用0补齐
System.out.printf("n=%d, hex=%08x", n, n); // 注意,两个%占位符应该传入两个数字
} }

二、输入语句

1. 输入简介

壹哥在前面给大家讲过,Java中给咱们提供了有三个标准的“流”,他们被统称为standard streams。除了负责输出的流之外,还有一个负责输入的标准流,Java中对应的API是System.in。

与标准输出相比,标准输入则复杂的多。尤其是直接使用System.in时,虽然可以读取到用户的输入,但该方式特别的复杂,对咱们初学者来说很不友好。所以为了更方便地实现输入功能,壹哥给大家介绍一个更简单的Scanner类。

2. Scanner类

2.1 Scanner简介

Scanner类是Java 5中开始提供的,负责解析基本类型和字符串的简单文本扫描器。通过Scanner类,我们可以获取用户在控制台里的输入数据。Scanner类里常用API方法有如下几个:

nextInt():获取输入的整数;

nextDouble():获取输入的双精度浮点数;

nextLine():获取输入的字符串,包括单词里的空格和除回车以外的所有字符;

next():获取输入的字符串,只从有效字符计算。在有效字符之前遇到的空格键、Tab键、换行符或Enter键等结束符,next()方法会自动将其去掉。只有在输入有效字符之后,next()方法才会将其后面输入的空格键、Tab键或Enter键等都视为分隔符或结束符,并以空格结束。

2.2 使用步骤

我们要想使用Scanner,需要遵循以下步骤:

1导入Scanner类;

2创建Scanner对象;

3使用Scanner对象扫描输入的内容。

接下来壹哥就给大家设计一个案例,讲解Scanner的具体使用。

3. 案例

本案例对初学者来说,具有一定的挑战性,大家要集中精力哦。

//1.import导包:导入Scanner类
import java.util.Scanner; public class Demo03 { public static void main(String[] args) {
//输入语句
//2.创建一个从键盘录入的Scanner扫描对象
Scanner sc = new Scanner(System.in); //3.使用Scanner对象,扫描输入的内容(整数、小数、字符串、布尔)
//在控制台或命令行输入数字,并点击回车键结束
System.out.println("请输入一个数字");
int num = sc.nextInt();
System.out.println("你输入的数字为:"+num); System.out.println("请输入一个小数");
double num2 = sc.nextDouble();
System.out.println("你输入的数字为:"+num2); System.out.println("请输入一个字符串");
String str = sc.next();
System.out.println("你输入的字符串为:"+str);
} }

本案例效果如下:

------------------------------正片已结束,来根事后烟----------------------------

三、结语

至此,壹哥就把Java里的输入和输出语句给大家讲解完毕了,本节内容比较简单,大家把案例对照着练习一下吧。下一篇文章中,壹哥会给大家讲解分支语句里的if语句。

四、今日作业

第一题

定义一个四位整数,分别输出其个位、十位和百位、千位。

第二题

从键盘输入三角形的底和高等三边数据,并输出三角形的面积。

Java输入与输出语句详细解析的更多相关文章

  1. 【JAVA零基础入门系列】Day7 Java输入与输出

    [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...

  2. Java 多线程安全问题简单切入详细解析

    线程安全 假如Java程序中有多个线程在同时运行,而这些线程可能会同时运行一部分的代码.如果说该Java程序每次运行的结果和单线程的运行结果是一样的,并且其他的变量值也都是和预期的结果是一样的,那么就 ...

  3. Java虚拟机堆和栈详细解析,以后面试再也不怕问jvm了!

    堆 Java堆是和Java应用程序关系最密切的内存空间,几乎所有的对象都放在其中,并且Java堆完全是自动化管理,通过垃圾收集机制,垃圾对象会自动清理,不需自己去释放. 根据垃圾回收机制的不同,Jav ...

  4. Java输入和输出数组(加逗号)

    输入示例 61,2,3,4,5,6 输出示例 1,2,3,4,5,61,2,3,4,5,6 import java.util.Scanner; public class Demo01 { public ...

  5. java类生命周期详细解析

    (一)详解java类的生命周期 引言 最近有位细心的朋友在阅读笔者的文章时,对java类的生命周期问题有一些疑惑,笔者打开百度搜了一下相关的问题,看到网上的资料很少有把这个问题讲明白的,主要是因为目前 ...

  6. C++ Primer: 1. 初识输入和输出

    C++没有定义任何的输入和输出语句,而是使用了 标准库来提供IO机制---iostream; 标准库iostream定义了4种不同的IO对象: cin:     标准输入对象:instream类型的对 ...

  7. Java(5)输入和输出

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201515.html 博客主页:https://www.cnblogs.com/testero ...

  8. Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  9. Java 集合系列 10 Hashtable详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  10. Java 集合系列 06 Stack详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

随机推荐

  1. python中的字典数据读取

    ①字典中嵌套字典 res1={'content': {'age': '47岁', 'ageOne': 47, 'ageOneUnit': '1', 'ageTwo': '8', 'ageTwoUnit ...

  2. 执行Maven的test命令报错

    参考网址:https://blog.csdn.net/weixin_46688566/article/details/126470742 解决方案 在pom.xml文件中加入以下依赖: <plu ...

  3. Jmeter六、采样器解析

    一.HTTP request sampler 默认端口:80 协议protocol:http,https,file 参数中有特殊字符,勾选编码encode send files with reques ...

  4. Verilog 变量声明与数据类型二

    Verilog 变量声明与数据类型二 上节介绍了wire,reg数据类型及其用法,并对变量定义中的向量的定义及使用做了说明.本节主要介绍其它几种类型.常用的有如下几种:整数integer,实数 rea ...

  5. 国际化vue-i18n 向语言包中传入参数

    模板 <span>{{$t('el.table.total', { pagetotal: 123 })}}</span> js代码中 this.$t('el.table.num ...

  6. 设计模式 (Design Pattern)C# -- 简介

    简介 设计模式(Design Pattern)是对面向对象设计中反复出现的问题的解决方案. 设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用. 设计模式是软件开发人员在软件开发过程 ...

  7. v-imgerror作用:当图片链接无效的时候,显示默认图片内容

    // 回顾自定义指令 // 作用: 自定义一些对DOM的操作快捷指令 // 前提: 指令就是用来操作DOM (v-if/v-show/v-for....) // 语法: Vue.directive(指 ...

  8. 12-XXE漏洞

    1.概述 <!--第一部分:XML声明--> <?xml version="1.0"?> <!--第二部分:文档类型定义DTD--> <! ...

  9. EL_获取域中存储的值_ List 集合&Map集合值和EL _ empty 运算符&隐式对象 pageContext

    3.获取对線. List 集合. Map 集合的值 1.对線:${域名称,键名.属性名}本质上会去调用对線的 getter 方法 2. List 集合:${域名称.键名[索引]} List list ...

  10. Axure RP Extension for Chrome 0.6.2安装和详解

    1.当我们用网页访问一个本地页面时就会出现这种问题,提示你要安装浏览器的扩展程序包,以下有搜狗浏览器如何安装,qq浏览器 ​