目录
场景
能否将声明变量写在while的小括号里?
能否将声明变量写在for的小括号里?
省流:
BufferedReader br = new BufferedReader(null);for(String line; (line = br.readLine()) != null;){System.out.println(line);}
正文:
场景
通常写读取文件流的代码会这样写:
读文本:
BufferedReader br = new BufferedReader(null);String line;while ((line=br.readLine())!= null) {//通常会对内容做处理//xxxProcess.process();//这里直接用打印做演示System.out.println(line);}
读字节:
FileInputStream fileInputStream = new FileInputStream("文件路径");byte[] bytes = new byte[1024*10];int length = -1;while((length = fileInputStream.read(bytes)) != -1){//通常会对内容做处理//xxxProcess.process();//这里直接用打印做演示System.out.print(new String(bytes,0,length));}
能否将声明变量写在while的小括号里?
现在问题来了,能不能把声明变量的部分放进while的括号里,这样,在代码上就是一个整体,更加美观,方便阅读。像这样:
while ((String line = br.readLine())!= null) { //报错System.out.println(line);}
自然不行,这样就编译报错了。
在while的小括号里不能声明变量,这和if语句的小括号里不能声明变量一样。但可以赋值。
while((int i=1) > 0) //报错if((int i=1) > 0) //报错int i = 0;
if((i=1) > 0) //正确int i = 0;
while((i=1) > 0) //正确
也就是说,在while,if 这样的语句,小括号里是做表达式的判断是否成立,即大于小于等于这类。顺带可以赋值。
能否将声明变量写在for的小括号里?
while( 表达式 )
{语句
}for(表达式1; 表达式2; 表达式3)
{语句
}
声明变量属于一个表达式,判断大小属于一个表达式。
想要将两个表达式写在一个括号里,就得使用 for 语句了。例如:
BufferedReader br = new BufferedReader(null);for(String line = br.readLine(); line != null; line = br.readLine()){System.out.println(line); }
因为 for 语句的小括号里,是可以写3个表达式。第一个是声明变量,第二个是判断条件,第三个是循环赋值。
上面的写法还可以优化成这样:即将赋值语句合并在一起,放在判断表达式里(表达式2)。声明变量表达式就只声明一个变量(表达式1)。表达式3可以省略不写。
BufferedReader br = new BufferedReader(null);for(String line; (line = br.readLine()) != null;){System.out.println(line);}
补充:for循环执行顺序
for(int i=0; i<10; i++){// 语句
}
执行的顺序如下:
第1步,执行表达式1 :int i=0; 声明变量,赋值为0。(这一步只会执行一次,即初次进入for的时候,后面的循环不再执行这一步)
第2步,执行表达式2 :i<10; 判断条件是否成立,如果是,进入下一步,如果否,不再执行后面步骤。
第3步,执行语句 : 执行花括号里的语句
第4步,执行表达式3 :i++ ,变量 i 自增
第5步,执行表达式2 :即回到第2步,判断条件成立,如果是,执行第3步,第4步。即循环执行2,3,4步。直到在第2步判断为否,就不再执行。
========================分割线========================
文章到此已经结束,以下是紫薯布丁
BufferedReader br = new BufferedReader(null);
String line;
while ((line=br.readLine())!= null) {
//通常会对内容做处理
//xxxProcess.process();
//这里直接用打印做演示
System.out.println(line);
}
FileInputStream fileInputStream = new FileInputStream("文件路径");
byte[] bytes = new byte[1024*10];
int length = -1;
while((length = fileInputStream.read(bytes)) != -1){
//通常会对内容做处理
//xxxProcess.process();
//这里直接用打印做演示
System.out.print(new String(bytes,0,length));
}
while ((String line = br.readLine())!= null) { //报错
System.out.println(line);
}
while((int i=1) > 0) //报错
if((int i=1) > 0) //报错
int i = 0;
if((i=1) > 0) //正确
int i = 0;
while((i=1) > 0) //正确
while( 表达式 )
{
语句
}
for(表达式1; 表达式2; 表达式3)
{
语句
}
BufferedReader br = new BufferedReader(null);
for(String line = br.readLine(); line != null; line = br.readLine()){
System.out.println(line);
}
BufferedReader br = new BufferedReader(null);
for(String line; (line = br.readLine()) != null;){
System.out.println(line);
}