重定向输出流实现程序日志
SYStem类中的out成员变量式Java的标准输出流,程序常用它来输出调试信息,out成员变量被定义为final类型的,无法直接重新复制,可以通过setOut()方法来设置新的输出流。
本实例使用了该方法实现了输出流的重定向,把他只想一个文件输出流,从而实现日志功能。运行过程中一些输出出保存到了日志文件中‘
关键技术
System类的setOut()方法改变输出流,System类中的out,err,in成员变量都可以使用该方法:
setOut方法
该方法用于重新分配System类的标准输出流。该方法的声明如下:
public static void setOut(printStream out)
out:新的printStream输出流对象
setErr方法
该方法用于重新分配System类的标准错误输出流。该方法的声明如下:
public static void setErr(printStream err)
out:新的printStream输出流对象
setOut方法
该方法用于重新设置System类的in 成员变量。 即标准的输入流。
运算符
BigDecima类,用于大数字的精确计算。
乘法运算:
1.*
2,BigDecimal类的multiply()方法,
3,对接收的整数执行位运算的左移操作。
实现两个变量的互换(不借助第3个变量)
变量互换常见于数组排序算法中,会使用一个临时变量来完成互换。临时变量的创建增加了系统资源的消耗。如果需要交换的时两个整数类型的变量,那么可以利用更高效的方法。
注意:inputStream输入流以字节为单位获取数据,而且对于需要复杂的判断并创建字节数组作为缓冲,最主要的是字节转换为字符时容易出现中文乱码的情况,所以对于字符数据的读取,应该使用扫描器进行封装,然后获取字符串类型的数据。
package learning;
import java.util.Scanner;
public class VariableExchange {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan =new Scanner(System.in); //创建扫描器
System.out.println("请输入变量A的值");
long A=scan.nextLong();
System.out.println("请输入变量B的值");
long B=scan.nextLong();
System.out.println("A="+A+"\tB="+B);
System.out.println(" z执行变量互换..." );
A=A^B;
B=B^A;
A=A^B;
System.out.println("A="+A+"\tB="+B);
}
}
异或”“和其他位运算符并不会改变变量本身的值,即"AB"没有任何意义,必须将运算结果赋值给一个变量。
foreach循环优于for循环
foreach是for循环遍历数据的一种简写格式,使用的关键字依然是for,但是参数格式不同。只用于遍历数据集合或数组,语法格式如下:
for (Type e:collections){
//对变量e的使用
}
参数说明:
e :其类型Type是集合或数组中元素值的类型,该参数是集合或数组collections中的一个元素。
collections :要 遍历的集合或数组,也可以是迭代器。