前言

我们在前面的文章中,学习了如何创建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. 7种实现web实时消息推送的方案

    做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里我帮他整理了一下几种方案,并简单做了实现. 什么是消息推送(pus ...

  2. dedecms安装使用

    1.运行 http://域名/install/index.php(比如你的域名是:http://www.dede58.com/,就输入http://www.dede58.com/install/ind ...

  3. vcsa7 页面出现“no healthy upstream”处理过程

    一.昨天服务器出现"no healthy upstream"错误无法登录,搜索网络给出一下的思路: 对于"no healthy upstream"的错误提示,可 ...

  4. jekyll+github pages

    写在前面 这篇文章记录了我折腾jekyll,github pages的过程,看到别人的 xxxx.github.io,于是我也想搞一个,了解到大都使用的jekyll来生成的.最开始我还不知道可以直接f ...

  5. 实验1 Python开发环境使用和编程初体验

    # print输出的几种用法 # 用法1:用于输出单个字符串或单个变量 print('hey, u') # 用法2: 用于输出多个数据项,用逗号分隔 print('hey', ' u') x,y,z ...

  6. Vuex的核心State

    State提供唯一的公共数据源,所有共享的数据都要统一放到 Store的 State 中进行存储. import Vue from 'vue' import Vuex from 'vuex' Vue. ...

  7. 在gitlab仓库中cli 编译通不过 怎样解决

    1.先切换到master  分支 git  pull   (把代码拉下来) 2.再切换到当前分支 git  rebase   master 查看git  log 看是否跟新到最新的log 3.再在当前 ...

  8. getElementsByClassName()获取不到值

    在这种方式下,虽然使用了getElementsByClassName方法,但是并不能获得到值.从执行顺序上来说,在HTML还没有执行的时候JS就已经开始执行了,所以获得的值不能够获得到.因此,如果遇到 ...

  9. AT212 P-CASカードと高橋君

    题目描述 高桥君为了准备即将到来的7月27日土用丑日,打算邮购一些高级鳗鱼食材,通过网上银行来支付. 高桥君使用的银行卡背面有下图所示的9×9密码表.支付的时候从表中某一位置开始根据指定的方向连续读4 ...

  10. 设计模式 - 单例模式 Singleton Pattern - C#

    单例模式 Singleton Pattern 1.单例模式设计模式属于创建型模式 2.是单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建.这个类提供了一种访问其唯一的对象的方式,可以直接访 ...