热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《疯狂Java讲义》8

目录与用户互动1、运行Java程序的参数2.使用Scanner获取键盘输入系统相关1.System类2.RunTime类BigDecimal类与用户互动1、运行Java程序的参数J

目录

 


与用户互动

1、 运行Java程序的参数

2. 使用Scanner获取键盘输入

系统相关

1.System类

2.RunTime类

BigDecimal类



与用户互动

1、 运行Java程序的参数

 Java程序的入口——main()方法的方法签名: 

public static void main(String[] args)    { }

下面详解为什么用这个方法签名:


  • public修饰符:因为Java类由JVM(java虚拟机)调用,为了让JVM可以自由调用这个main()方法,所以用public进行修饰。


  • static修饰符:JVM调用这个方法时,不会先创建该主类的对象,然后通过对象调用这个主方法,JVM直接通过调用这个类来调用这个主方法(之前说道过,static修饰的方法是类方法,可以通过类或者对象进行调用)。


  • void:JVM调用主方法,主方法的返回值要返回给JVM,但是这没有任何意义,所以就不要返回值就好了。


  • String[] args:字符数组形参。根据方法调用原则,谁调用了方法,谁就提供形参的值,也就是说,JVM调用了主方法,所以由它为形参赋值。

    但是JVM怎么知道如何为这个数组赋值?

    看下面代码:

    图片

    结果如下:

    图片


    这是是意料之中的结果,因为没有给数组赋什么值,长度当然为0;

    但是如果运行Java程序时(控制台运行)在类名后面紧跟一个或者多个字符串(多个字符之间通过空格分开),JVM就会把这些字符串依次赋值给args数组元素。

    如果某参数本身包含了空格,则应该将参数用双引号(“”)括起来,否则java会把这个空格单座参数分隔符,而不是参数本身。

     是不是很神奇,没想到一个以为是套路的东西含义这么深刻。

2. 使用Scanner获取键盘输入

(1)Scanner主要提供了两个方法来扫描输入:

    1)hasNextXXX():是否还有下一个输入项,其中XXX可以是int,long等代表基本数据类型的字符串;如果只是判断是否包含下一个字符串,则直接使用hasNext()。

    2)nextXXX():获取下一个输入项。

代码如下:

图片

结果如下:

图片

    这里需要了解一下,Scanner默认的是通过空白(空格,Tab空白,回车)作为分隔符,如果不想将空白作为分隔符,例如想输入一行数据,无论有没有空格,都看作一个输入项,如果是这种需求,可以把Scanner的分隔符设置成只回车。  为Scanner设置分隔符使用useDelimiter(String pattern)方法即可。该方法的参数应该是一个正则表达式。(后文会介绍)

看一下栗子:

图片

结果为:

图片

    可以看到这次在一行输入三个数据,空白是没有分界符的作用的。

    实际上,Scanner提供了两个简单的方法进行逐行读取:

1)boolean hasNextLine():返回输入源中是否还有下一行;

2)String nextLine():返回输入源中下一行的字符串。

下面演示个用Scanner获取输入源中整型的输入项:

图片

结果为:

图片

    可以看到的是,它将数字(整数或者浮点数均变成了浮点数进行输出),但是第二个输入数据,因为输入了字符,不是数字,所以没有输出结果,此时,Scanner的读取操作被阻塞。这也是其不如上一个程序所在,适应性不强。

    Scanner不仅能够读取用户的键盘输入,还能对文件进行读入。

举个栗子:

图片

这个大体上写法类似于上面的,要注意两点,一个是文件的载入的写法,一个是上面的异常处理(这个程序会自动提示生成)。

系统相关

    Java程序在不同操作系统上运行时,可能需要取得平台相关的属性,或者调用平台命令来完成特定的功能。Java提供了System类和Runtime类与程序的运行平台进行交互。

1.System类

    System类作为当前运行平台时,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接通过System类来调用这些类变量和类方法。

    System类提供了代表标准输入、标准输出和错误输出的类变量,并提供了一些静态方法用于访问环境变量、系统属性的方法,还提供了加载文件和动态链接库的方法(这个我不清楚,了解一下而已)。System类还有两个获取当前系统时间的方法,currentTimeMillis()和nanoTime(),它们都返回一个long型整数,这里必须指出的是,这两个方法返回的时间粒度取决于底层操作系统,可能所在的操作系统根本不支持以毫秒和纳秒作为计时单位。

2.RunTime类

    Runtime类代表Java程序的运行环境时,每个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时环境相连。应用程序不能创建自己的Runtime实例,但可以通过getRuntime()方法获取

与之关联的Runtime对象Runtime作为运行环境时,可以访问JVM的相关信息,

如处理器数量,内存信息等。

举个栗子:

图片

结果如下:

图片

    此外,Runtime类还有一个功能:直接单独启动一个进程来运行操作系统的命令:

图片

    感觉好厉害的样子哦!

BigDecimal类

1. 为了能精确表示、计算浮点数,Java提供了BigDecimal类,该类提供了大量的构造器用于创建BigDecimal 对象,包括把所有的基本数值型变量转换成一个BigDecimal对象,也包括利用数字字符串、数字字符数组来创建BigDecimal对象。

2. 在BigDecimal类的构造器中,BigDecimal(double val)构造器有一定的不可预知性,当程序使用new BigDecimal(0.1)来创建一个BigDecimal对象时,它的值并不是0.1,它实际上等于一个近似0.1的数,因为0.1无法准确表示为double浮点数。但是使用BigDecimal(String val)构造器的结果是可预知的,因此通常优先使用基于String的构造器。如果必须使用double浮点数作为BigDecimal 构造器的参数时,通过BigDecimal.valueOf(double value)静态方法来创建BigDecimal对象。

END

图片


推荐阅读
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 简述在某个项目中需要分析PHP代码,分离出对应的函数调用(以及源代码对应的位置)。虽然这使用正则也可以实现,但无论从效率还是代码复杂度方面考虑ÿ ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
author-avatar
小群群zheng
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有