【Java】_2_Java程序入门第二课 -程序员宅基地

技术标签: java  c/c++  

前面一课说了简单的整型数据和浮点型数据,但是没有说char字符类型,今天我们来说说char字符类型。

【Java  Char型】

在Java中提供了字符类型,与C/C++类似,Java中字符是经过编码的;Exp: 编码值==65的字符是'A';

在Java中,使用的是Unicode编码格式。通常情况下,我们认为Unicode是16 bit的编码规则。

但是很多童鞋们,还是不明白这个东西,我自己也有点迷糊。下面是我摘录的部分度娘知道的回答:

     如果按照编码规则来看,这个赋值是兼容的。 输出的时候系统是根据“数值”的类型来判断的,正如上面说的,当用

System.out.println(numchar+4);

     这里会输出的是什么呢?我们可以看一下:

/*
This program try to test the CHAR data type
*/

public class CharTest
{
  public static void main(String[] args)
   {
    char charTestVar=4;
             System.out.println(charTestVar+4);
   }
}

输出如下所示:

 

而下面的程序段:

/*
This program try to test the CHAR data type
*/

public class CharTest
{
  public static void main(String[] args)
   {
    char charTestVar=4;
             System.out.println(charTestVar+4);
             System.out.println(charTestVar);
   }
}

输出如下所示:

这是为什么呢?我们知道在表达式计算过程中:会进行类型转换,通常是向数值范围方向大的转;因此第一段代码输出是8,而第二段代码输出的是8和四方形。

 

【Java 控制台输入流】

在Java类库中System.out 类在java.lang包中定义,这是一个默认包含的包。而在Java中输出数据不是这样的,在需要从控制台输入数据的时候,则需要

引用Java提供的类库包,这个与C语言一样(C语言通过系统提供的库函数实现输入和输出)。

在Java中用Scanner可以实现控制台数据的输入,Scanner是一个类,通过类的构造函数构造对象,然后通过类的方法(类似C++中的成员函数)来实现

数据的读取。

构造Scanner对象语法:   Scanner   objectIdentify=new  Scanner(System.in);

     在使用这个类的时候需要导入: java.util包,其语法如下:

 import  java.util.*;

这里需要注意一点:因为import是完整的java语句,因此后面的分号不能少。

下面我们看一段简单的代码如何实现数据的输入:

/*
This program test scaner 
*/

import java.util.*;

public class ScanerIn
{
  public  static void main(String[] args)
   {
      Scanner GetData=new Scanner(System.in);
              System.out.print("Please enter you name:");
              System.out.println("You name is:"+GetData.nextLine());
   }
}

这段代码执行的结果如下所示:

Scanner对象提供了很多不同的方法来输入不同的数据类型:

1、Scanner (InputStream In)

用给定的输入流创建一个Scanner对象

2、String nextLine()

读取输入的下一行内容,并保存为String对象

3、String next()

读取输入的下一个单词,单词以空白符分隔,空格、制表符算空白符(blank charecter)

4、int  nextInt()

读取输入的下一个整型数值

5、doublet nextDouble()

读取输入的下一个浮点数值

6、boolean  hasNext()

检测输入流中是否还有其他单词

7、boolean  hasNextInt()

检测输入流中是否还有整数

8、boolean  hasDouble()

检测输入流中是否还有浮点数值

下面我来测试一下这写类的方法:

/*
This program test scaner 
*/

import java.util.*;

public class ScanerIn
{
  public  static void main(String[] args)
   {
      Scanner GetData=new Scanner(System.in);
              System.out.print("Please enter you name:");
              System.out.println("You name is:"+GetData.nextLine());

                System.out.print("Now we have got you name,Can we get you age:");
              System.out.println("Your age is:"+GetData.nextInt());

              System.out.print("Can you show the expect salary:");
              System.out.println("Your expect salary is:"+GetData.nextDouble());

     if(GetData.hasNext())
        System.out.println("You hava finish you input data!!!");
   }
}

程序执行过程如下所示:

这里我有一点迷惑?那就要if子句执行过程和我想象的不一样。

 【Java 控制台密码输入】

如上面的测试一样,我们知道,在console输入中利用Scanner对象输入的时候,是明文输入的,有时候我们需要输入密码,很显然,密码不能用明文

进行输入,否则就失去了保密的作用;考虑这一点,Java提供了另外一种输入方式来实现密码的输入。

在Java中利用Console类实现密码的输入。其使用方法如下:

//首先利用Console类构造一个对象

Console   CodeInput=System.console

String      UserName=CodeInput.readLine();

String      PassWord=CodeInput.readPassword();

实例代码如下所示:

    Console CodeInput=System.console();
    String UserName;
    char[] Password;
           UserName=CodeInput.readLine("Enter your name:");
           Password=CodeInput.readPassword("Enter the password:");    

这段代码执行过程如下图所示:

这样的话,明文就不显示,并且Java继承了Unix/Linux的特征在输入密码的时候不显示*或者其他掩码符号。

这里有一点需要注意:如果要使用Console类,必须导入java.io.Console; 否则不能使用;同时object.readPassword()方法返回的值是数组类型,不能用String对象

存储,否则会报错。如下所示:

 

【Java 读取文件内容】

和其他程序设计语言一样,Java也提供了读写文件的机制,与C语言不一样的是,C语言读写文件非常麻烦,而在Java中通过前面所介绍的Scanner对象就可以实现文件的读写。

在使用前需要构造Scanner文件对象。如下所示:

Scanner    FileIn=new Scanner(new File("test.txt"));

这样就构造了一个文件输入输出对象,通过Scanner文件对象就可以进行文件的读写。

为了防止文件读写“指针”无指向,在文件读写语句中,必须进行异常捕捉;否则在编译的过程中会报没有进行异常处理。 

 

因为异常类型的处理我还没有深入了解,因此这里就不多说了,以后有机会再说。

下面我没来看一下文件读取的代码:

/*
This program test scaner 
*/

import java.util.*;
import java.io.Console;
import java.io.File;

public class ScanerIn
{
  public  static void main(String[] args)
   {
    /*
    //Scanner 对象测试
    Scanner GetData=new Scanner(System.in);
              System.out.print("Please enter you name:");
              System.out.println("You name is:"+GetData.nextLine());

                System.out.print("Now we have got you name,Can we get you age:");
              System.out.println("Your age is:"+GetData.nextInt());

              System.out.print("Can you show the expect salary:");
              System.out.println("Your expect salary is:"+GetData.nextDouble());
    
    //Console对象测试
    Console CodeInput=System.console();
    String UserName;
    char[] Password;
           UserName=CodeInput.readLine("Enter your name:");
           Password=CodeInput.readPassword("Enter the password:");

    */    


    //File对象测试
    try
    {
    Scanner FileIn=new Scanner(new File("TestText.txt"));
        while(FileIn.hasNext())
            System.out.println(FileIn.nextLine());
    }catch(Exception e)
     {
         System.out.println(e);
     }


        /*
    if(!GetData.hasNext())
           System.out.println("You hava finish you input data!!!");
    */
   }
}

这个代码的执行过程如下所示:

仔细看上面的执行过程可以发现,如果没有文件我们就不能读取文件,报文件找不到的异常,要是不用try结构捕捉的话,那么我们的程序运行过程中就会崩溃。如果

没有文件:TextText.txt,执行结果就如下所示:

可以看到Scanner对象,不能创建文件,那么我么要如何创建文件呢?这个就等到下次再来说吧,我们再来看看文件的写入。

【Java 写内容到文件】

在Java中写文件和读取文件内容一样容易实现。

为了实现“写”文件,我们需要构造一个PrintWriter对象;如下所示:

PrintWriter  FileOut=new PrintWriter("filename.txt");

这个对象需要引用java.io.PrinterWriter对象,为了省略很多的引用,通常我们引用:

java.io.*;  

     即可,但是我建议在不熟悉的时候,引用什么对象,则导入不同的对象,这样可以增加对类库的认识。

我们来看一段实例代码:

/*
This program test scaner 
*/

import java.util.*;
import java.io.Console;
import java.io.File;
import java.io.PrintWriter;
import java.io.*;

public class ScanerIn
{
  public  static void main(String[] args)
   {
    /*
    //Scanner 对象测试
    Scanner GetData=new Scanner(System.in);
              System.out.print("Please enter you name:");
              System.out.println("You name is:"+GetData.nextLine());

                System.out.print("Now we have got you name,Can we get you age:");
              System.out.println("Your age is:"+GetData.nextInt());

              System.out.print("Can you show the expect salary:");
              System.out.println("Your expect salary is:"+GetData.nextDouble());
    
    //Console对象测试
    Console CodeInput=System.console();
    String UserName;
    char[] Password;
           UserName=CodeInput.readLine("Enter your name:");
           Password=CodeInput.readPassword("Enter the password:");

    */    

       
        /******************

    //File对象测试
    try
    {
    Scanner FileIn=new Scanner(new File("TestText.txt"));
        while(FileIn.hasNext())
            System.out.println(FileIn.nextLine());
    }catch(Exception e)
     {
         System.out.println(e);
     }

    **************/

    //写文件测试
    try
    {
    PrintWriter FileOut=new PrintWriter(new FileWriter("TestText.txt"));
        FileOut.println("Hello wellcome to my word");
        FileOut.println("This is my fisrt to write a file via java");
        FileOut.println(":)");
                FileOut.close();
    }catch(Exception e)
     {
         System.out.println(e);
     }

        //测试写入文件是否成功,还测试,改写是追加还是全部重写
         try
    {
    Scanner FileIn=new Scanner(new File("TestText.txt"));
        while(FileIn.hasNext())
            System.out.println(FileIn.nextLine());
    }catch(Exception e)
     {
         System.out.println(e);
     }


        /*
    if(!GetData.hasNext())
           System.out.println("You hava finish you input data!!!");
    */
   }
}

上面代码的执行结果如下:

这里可以看到程序成功执行了。要点: 我们可以看到重复的导入库是不会报错的。

而且这样的写入文件时全部覆盖,会将原来的文件全部覆盖掉。如果不能覆盖原来的内容,则需要进行处理;我搜到了一段代码如下,可供大家参考:

import java.io.*;
import java.util.*;
public class TestPrintWriter
{
    public static void main(String[] args)throws IOException 
    {
           File file=new File("temp2.txt");
                if(file.exists())
                {
                   System.out.println("File temp.txt already exists.");
                   System.exit(0);
                }

           PrintWriter output=new PrintWriter(new FileWriter(file));

                   for(int i=0;i<10;i++)
                   {
            output.print((int)(Math.random()*100)+" ");
           }

        output.close();
        BufferedReader input=new BufferedReader(new FileReader("temp2.txt"));

        int total=0;
        String line;
        while((line=input.readLine())!=null)
        {
           StringTokenizer tokens=new StringTokenizer(line);
           while(tokens.hasMoreTokens())
           total+=Integer.parseInt(tokens.nextToken());
        }

                output=new PrintWriter(new FileWriter(file,true));
        output.printf("\n\n");
        output.printf("Total is %d ",total);
        output.close();
    }
}

 

今天就写到这里了,希望这次可以将这本书从头看到尾,然后根据学习进度写完整本书的总结。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/snake_hand/article/details/84417003

智能推荐

linux下/dev/tty, /dev/tty0, /dev/console区别-程序员宅基地

文章浏览阅读1.7w次,点赞6次,收藏23次。转自 http://blog.chinaunix.net/uid-20727076-id-3062401.html 在我的fedora11系统(linux2.6.31)下,这三个设备的具体情况如下:[root@localhost dev]# ls -l ttycrw-rw-rw- 1 root tty 5, 0 2012-01-30 17:26 tty[root@loc_/dev/tty

论程序员成长的正确姿势,下载量瞬秒百万-程序员宅基地

文章浏览阅读65次。个人背景如标题所示,我的个人背景非常简单,Java开发经验1年半,学历普通,2本本科毕业,毕业后出来就一直在Crud,在公司每天重复的工作对我的技术提升并没有什么帮助,但小镇出来的我也深知自我努力的重要性,想要改变“命运”,没有背景没有资本的人,只能通过勤奋获得。幸运女神往往会眷顾努力的人,所以当好运降临到我头上,我并不诧异,目前拿到了美团30K的offer,下文也不说废话,主要分享我这次“美团面试经历”和“个人学习方法”,希望能帮助到你们。蚂蚁金服一面:分布式架构 50分钟个人介绍加项目介绍2

Qt_常用控件_Table Widget_qt tablewidget-程序员宅基地

文章浏览阅读1.7w次,点赞19次,收藏170次。Qt_常用控件_tablewidget_qt tablewidget

spring整合mybatis异常 UnsatisfiedDependencyException BeanCreationException PropertyBatchUpdateException_unsatisfied dependency expressed through field 'st-程序员宅基地

文章浏览阅读1k次。Spring整合mybats引发异常对于自己无知的记录(浪费了一天)事发现场org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘studentInfoServiceImpl’: Unsatisfied dependency expressed through field ‘studentInfoMapper’; nested exception is org.sp_unsatisfied dependency expressed through field 'studentmapper'; nested excep

Springboot集成rabbitmq实现延时队列_rabbit mq 有时间轮吗-程序员宅基地

文章浏览阅读326次。Springboot集成rabbitmq实现延时队列什么是延时队列?列举几个使用场景:常见的种类有:延时任务-实现方式:详细信息:[https://www.cnblogs.com/JonaLin/p/11550427.html](https://mp.csdn.net).RabbitMQ-延时任务RabbitMQ TTL和DXL延时队列实现方案:源码地址:[https://github.com/9..._rabbit mq 有时间轮吗

**在intellij中java在做gui 中 中文乱码**_java gui 乱码-程序员宅基地

文章浏览阅读975次。在网上找了很久,发现有很多差异,所以特此再次写一下,若有雷同,纯属巧合。在没有改变前-即乱码状态将RUN—》Debug Configurations 中的在Vm options 中添加 -Dfile.encoding=GBK 即可完成的效果..._java gui 乱码

随便推点

使用div和js脚本弹出对话框_js 弹出div对话框-程序员宅基地

文章浏览阅读2.9k次。使用div和js脚本弹出一个对话框思路:div已经存在于网页当中,只是被隐藏了,当点击按钮时将其可见性设置为可见即可实现实现:在网页中设置好需要弹出的窗口,为其他控件设置一个事件,当触发该事件时将窗口设置为可见控件_js 弹出div对话框

Lucenesolr_lucene-solr-程序员宅基地

文章浏览阅读245次。Lucene全文检索技术课程计划Lucene介绍 全文检索流程介绍 索引流程 搜索流程 Lucene入门程序 索引实现 搜索实现 分词器 分词介绍 IK分词器 搜索技术理论基础 为什么要学习Lucene 原来的方式实现搜索功能,我们的搜索流程如下图:正在上传…重新上传取消正在上传…重新上传取消上图就是原始搜索引擎技术,如果用户比较少而且数据库的数据量比较小,那么这种方式实现搜索功能在企业中是比较常见..._lucene-solr

ios appstore 上架应用被拒绝原因_ios上架苹果商店提示支付宝支付,拒绝上架-程序员宅基地

文章浏览阅读1.5w次。http://blog.csdn.net/annkey123/article/details/8778996_ios上架苹果商店提示支付宝支付,拒绝上架

linux基础入门指令详解_已知有目录结构如图:已知当前工作目录为d1,要将文件f1移动到目录d2下,正确的命令-程序员宅基地

文章浏览阅读201次。Linux有150个常用指令,透过12道题去学习以及练习指令1、创建一个目录/dzqc提示: windows下的路径样式为c: \dzqc\ test,而linux下的路径样式为 /dzqc/test因此/dzqc就可以看做是c:\dzqc,不同的是 windows系统下还有D,E等盘, linux下就只有/为所有目录的顶点。英文 make directorys缩写后就是 mkdir,这..._已知有目录结构如图:已知当前工作目录为d1,要将文件f1移动到目录d2下,正确的命令

2021/3/27 每周总结-程序员宅基地

文章浏览阅读51次。每周总结1.学习总结有的题目可以转变思维来简化问题,比如vjudge上的那个骑车子的那个问题,要找最快到达终点的时间,可以直接找出最快的车辆算出最快的时间,而不必去模拟这道题的过程以简化问题,已经遇到了很多到和这种思想类似的题目,还有雷达那道题目(现在还没弄懂QAQ)也是有这种类似的思想,把范围由二维转化成一维。这种转化的思想可以把问题变得更简单,但就是有点难想。。。2.学习感受这周主要内容还是贪心,有的题目还是有一定难度的,想上半天想不出思路,感觉还是自己刷的题少,在周四的比赛中就明显的显露出来,