• 《Java程序设计基础》 第3章手记


    《Java程序设计基础》 第3章手记

    本章主要内容:

    1. 数据类型
    2. 变量
    3. 基本类型变量
    4. 数据类型的转换规则
    5. 从键盘上输入数据的语句格式
    6. 运算符

    Java语言中的数据类型分为两大类:基本数据类型引用数据类型

    Java语言采用Unicode字符集编码方案(在使用中文时由于编码可能会出现问题,我们后面会讲到)

    其余的知识请参阅原书。我们有C语言的基础,重点记忆与C语言不同的和新增的内容,你可以拿一本C语言的书在手边,一样的就按C语言来记,不一样的和新增的从现在开始记忆。

    如果类,对象这些概念你弄不懂的话,百度一下面向对象编程吧。

    我们的重点在于从键盘上输入数据的语句格式,这部分内容涉及代码,而且由于类的使用令人蛮纠结的。原书介绍了两种方法,很不幸,两种方法你都要掌握,虽然第二种确实比第一种要简单得多。Java算是时间比较长的语言了,SE5之后才开始支持Scanner方法,不排除你遇到的代码使用了第一种方法。

    3.6从键盘输入数据

    数据输入方式一:

    1)字符输入:

    import java.io.*; //加载Java.io类库中的所有类
    public class input1 //定义类,input1是类名称
    {
        public static void main(String[] args) throws IOException //throws方法可能出现异常声明
        {
        String str; //声明str为String类型
        BufferedReader buf; //声明buf为BufferedReader类的变量,该类在java.io类库中
        buf = new BufferedReader(new InputStreamReader(System.in));//创建buff对象这是一种简略的写法
        str = buf.readLine(); //使用readLine方法将字符串读入并存入str中,且需处理IOException异常
        }
    }

    throws IOException表示此方法有抛出IOException异常的可能性。只要此方法的某些代码可能抛出异常,你就必须显式的处理他,要么抓住(try…catch),要么抛出。具体处理方式以后会涉及到。

    buf = new BufferedReader(new InputStreamReader(System.in))//创建buff对象
    括号里实际上创建了一个InputStreamReader的对象,该对象用System.in创建,创建之后直接用来创建BufferedReader对象,所以说是简略的写法,原书34页上方是完整版的例子。

    *(核心内容)*看不懂没关系,不要头疼,这是原理,下面有简单的介绍。

    1. java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。

    2. 从标准输入流System.in中直接读取使用者输入时,使用者每输入一个字符,System.in就读取一个字符。为了能一次读取一行使用者的输入,使用了BufferedReader来对使用者输入的字符进行缓冲。readLine()方法会在读取到使用者的换行字符时,再一次将整行字符串传入。

    3. System.in是一个位流,为了转换为字符流,可使用InputStreamReader为其进行字符转换,然后再使用BufferedReader为其增加缓冲功能。

    简单地讲这种输入方式,就是用System.in读取一位一位的数据,再使用InputStreamReader转换为字符流(这种转换是通过创建对象进行的),再用BufferedReader创建一个对象,目的是增加缓冲功能来读取字符串而不是单个字符,这样操作之后才能使用readLine方法读入并存储用户输入的字符串。

    2)数值输入

    Java和C#中,从键盘输入的数据均被实为字符串,因此数值输入都是先输入字符串,再转换成数值。转换方法参见33页表3.7,具体的例子在35页例3.4。

    数据输入方式二:

    从Java SE 5版本之后,专门在java.util类库中增加了类Scanner来简化输入操作。

    import java.util.*; //加载java.util类库中的所有类
    public class in1 //类声明,in1是类名称,可自定义
    {
        public static void main(String[] args) //类中主方法(函数)声明
        {
            Scanner reader = new Scanner(System.in); //创建一个Scanner类,名为reader
            double num; //定义一个double类型变量,名为num
            num = reader.nextDouble(); //用reader对象调用nextDouble方法来读取用户输入的double型数据
        }
    }

    可以看出,这种输入方式可以用reader对象以“next数据类型()”这种形式的方法读取用户输入的相应数据类型的数据。(如本例的nextDouble()和下一个例子的nextInt()等)

    这里没有探讨多个数据输入和打印,我相信你能够理解那部分内容。多个数据只是增加了数量,打印的话,print和println的差别是println输出内容之后会自动换行。

    编译Java文件可能出现的错误

    1)编码错误

    如果你使用的是记事本,不会因为编码问题出现错误,因为记事本的默认编码方式是ANSI。
    这里写图片描述

    但如果你使用notepad++、VS Code等其他文本编辑器则可能如下报错:

    错误:编码GBK的不可映射字符

    表示你的文本编辑器没有采用Java能够读取的编码(默认采用utf8编码),解决方法如下:

    1.编译时在命令行输入 javac -encoding UTF-8 test.java

    2.使用记事本打开你的java文件,然后另存为ANSI编码格式的文件,就可以正常编译了。

    3.(推荐方法)在使用你的文本编辑器写好代码要保存的时候,设置保存为ANSI编码格式或者Unicode或者GBK2312编码格式(中国官方简体中文标准编码),这是一劳永逸的方法。

    各种编码的区别:
    http://blog.csdn.net/xiongxiao/article/details/3741731

    2)其他错误

    仔细看编译时cmd或者PwoerShell里的报错信息,他们都是中文的,你应该可以看懂,然后对症下药。能告诉你的是,它会有一个^符号来指明哪个位置出现错误。

    例:

    错误:需要‘)’
    你漏了右括号


    Solo | weibo@从流域到海域

  • 相关阅读:
    Node 核心模块HTTP模块
    Node 的 模块 及fs 模块的使用
    Node 简介和环境安装
    RBAC权限管理模型:基本模型及角色模型解析及举例
    JS中Ajax的同步和异步
    tp5.1 获取json对象的json内容
    JavaScript 判断对象中是否有某属性
    php 函数使用可变数量的参数
    ThinkPHP5.1关于查询器查询条件为[NOT] NULL时的写法
    js中const,var,let区别
  • 原文地址:https://www.cnblogs.com/wanghongze95/p/13842671.html
Copyright © 2020-2023  润新知