zoukankan      html  css  js  c++  java
  • 《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@从流域到海域

  • 相关阅读:
    PAT (Advanced Level) 1080. Graduate Admission (30)
    PAT (Advanced Level) 1079. Total Sales of Supply Chain (25)
    PAT (Advanced Level) 1078. Hashing (25)
    PAT (Advanced Level) 1077. Kuchiguse (20)
    PAT (Advanced Level) 1076. Forwards on Weibo (30)
    PAT (Advanced Level) 1075. PAT Judge (25)
    PAT (Advanced Level) 1074. Reversing Linked List (25)
    PAT (Advanced Level) 1073. Scientific Notation (20)
    PAT (Advanced Level) 1072. Gas Station (30)
    PAT (Advanced Level) 1071. Speech Patterns (25)
  • 原文地址:https://www.cnblogs.com/wanghongze95/p/13842671.html
Copyright © 2011-2022 走看看