A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马州州 中级黑马   /  2012-8-10 23:49  /  2215 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马州州 于 2012-8-10 23:55 编辑

简单的两个小程序,说明一下问题
import java.io.*;
class Test
{
public static void main(String[] args) throws IOException
{
  FileReader  fr = new FileReader("DateDemo.java");
  char[] buf = new  char[3];
int num =0;  问题来了,这里为什么在定义变量num的时候要让他等于0,不让他等于0,程序照样正常运行,如果是为了程序的安全问题,
                     在下面的while循环之后,num是=-1

  while((num=fr.read(buf))!=-1)
  {
   System.out.println(num);
   System.out.println(new String(buf,0,num));
  }
  
  fr.close();
  System.out.println(num);
}
}

程序2、
import java.io.*;
class  BufferedReaderDemo
{
public static void main(String[] args) throws IOException
{
  FileReader fr = new FileReader("buf.txt");

  BufferedReader bufr = new BufferedReader(fr);

  String line = null; 这里跟上面一样,为什么要定义一个初始值呢,如果是为了再次调用,那么这里的值还是null 上面是-1,如果下面还有程序要调用这个值,
                             不还是得重新赋值?为什么要让line=null;

  while((line=bufr.readLine())!=null)
  {
   System.out.print(line);
  }


  bufr.close();
}

}


问题
上面的程序int num= 0;下面的程序String line=null;这里为什么在定义变量的时候要定义一个初始值
如果不定义的话,也不会影响程序正常运行,那么为什么要定义?如果不定义的话,有什么危害?


ps:就是这种小问题最纠结人啊,虽然知道要这么做,也能记得住,但是不知道为什么的话,就是心理难受,非得弄明白了

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 这不来给分了么!

查看全部评分

9 个回复

倒序浏览
来个细节大师,说一下哇
回复 使用道具 举报
本帖最后由 牛杨 于 2012-8-11 00:36 编辑

对于楼主的问题 我认为其实就是 编程习惯的问题了。
对于 上面的程序int num= 0;下面的程序String line=null;其实你不定义初始值也是没有错的,因为在使用这些变量的时候 就已经赋值了。在你的程序中就是这两句:
while((num=fr.read(buf))!=-1)
while((line=bufr.readLine())!=null)
但是为什么要定义呢? 我认为就是个人编程素养的问题了。
因为java是一中强类型的语言(强类型的语言就是 为所有变量指定数据类型称为“强类型”,强类型的语言在编译期要进行严格的变量类型检查。说道通俗点就是 要使用一个变量的时候,你必须先把这个变量定义出来。并且要为这个变量手动初始化。)
所以如果你是一个有好的编程习惯的人,你在定义变量的时候就应该初始化。如果你去面试的时候,你定义的变量没有初始化值,并且代码页没有缩进等层次感。那么你给面试官的第一感觉就是: 这个人不太放心,你是一个“野手”、是一个没有经验的业余选手。那么你面试成功的几率就很小了。
但是如果你有好的java编程习惯的话,就比如 定义变量的时候 进行初始化。代码写的很规范也有层次感,不混乱。那么你就会让人觉得你是一个 训练有素的人啊,经验也够丰富。
所以说,定不定义初始值 完全是习惯性的问题,但是很能从这些小地方看出一个程序员的水平哦。
所以最后建议你还是定义初始值的好,从小就培养起好的编程习惯,会受益终生的。:) 。

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
牛杨 发表于 2012-8-11 00:35
对于楼主的问题 我认为其实就是 编程习惯的问题了。
对于 上面的程序int num= 0;下面的程序String line=nul ...

说的挺对的,但是不写的话会出现什么问题呢?能不能举个例子说明一下,不写的危害啊
回复 使用道具 举报
马州州 发表于 2012-8-11 00:37
说的挺对的,但是不写的话会出现什么问题呢?能不能举个例子说明一下,不写的危害啊 ...

就好比这个程序:
public class  HelloWorld
{
       public static void main(String[] args)
       {
            int  i;
            System.out.println(i);
       }

}
这个程序定义了一个变量i ,没有进行初始化。所以这个变量 i 就不能被使用。(在这里也即不能打印输出)

所以 定义 一个变量而没有进行初始化。那么你这个变量就不能使用。否则就会编译失败! 这就是定义而不初始化的危害。

希望对楼主有帮助 哦
回复 使用道具 举报
牛杨 发表于 2012-8-11 00:47
就好比这个程序:
public class  HelloWorld
{

对头,辛苦你拉,版主要是不给你分,我都不愿意啊
我再等等,看有没有别的说法,你说的这的确是个问题
回复 使用道具 举报
牛杨 中级黑马 2012-8-11 00:53:09
7#
马州州 发表于 2012-8-11 00:50
对头,辛苦你拉,版主要是不给你分,我都不愿意啊
我再等等,看有没有别的说法,你说的这的确是个问题 ...

哎呦  感动死了!:'(   。你分好高哦!快到25分了。
你这句“你说的这的确是个问题” 难道我哪里给你说错了么? 求指正
回复 使用道具 举报
牛杨 发表于 2012-8-11 00:53
哎呦  感动死了!   。你分好高哦!快到25分了。
你这句“你说的这的确是个问题” 难道我哪里给你说错 ...

你没说错啊,说的很对,我的意思是,你说的这种情况下的确会出问题的,我是想等等看有没有别人说会出现其他的错误情况
回复 使用道具 举报
好吧,看来是没人回答了,问题已解决
回复 使用道具 举报
马州州 发表于 2012-8-11 14:14
好吧,看来是没人回答了,问题已解决

版主为什么没有给你加分啊?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马