黑马程序员-基础知识梳理7

来源:互联网 发布:matlab数据周期性检验 编辑:程序博客网 时间:2024/05/17 09:36
------- android培训java培训、期待与您交流! ----------
/*
 * System:
 * 描述系统一些信息:
 * 获取系统属性信息:Properties getProterties();
 */ 
Properties prop =System.getProperties();
//因为Properties是Hashtables的子类,也就是Map集合的一个子类对象
//那么可以通过map方法去除该集合中的元素
//该集合中存储都是字符串,没有泛型定义
//如何在系统中自定义一些特有信息?
System.setProperty("mykey","myValue");
//获取指定属性信息
String value = System.getProperty("os.name");
System.out.println("value"+ value);
//可不可以在jvm启动时,动态加载一些属性信息?
//java  -D参数信息 -值 类名 ----------->java -Dhaha -dasdasd SystemDemo
String v = System.getProperty("haha");//参数信息haha
System.out.println("v="+v);//值随便取
/*//获取所有属性信息
for(Object obj : prop.keySet()){
String value = (String)prop.get(obj);
System.out.println(obj+"::"+value);
}
*/
Runtime对象
该类并没有刻意提供构造函数
说明不可以new对象,那么会直接想到该类中的方法是静态的
发现该类中海油飞静态方法
说明该类肯定提供方法获取本类对象。而且该方法是静态的,并返回值类型是基本类型。 
 
有这个特点看出该类使用了单例设计模式
该方式histatic RuntimegetRuntime(); 

Date类常用方法 
'
Date d = new Date();
System.out.println(d);//打印时间看不懂,希望有些格式
//将模式封装到SimpleDateformat对象中
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss");
//调用format方法让模式格式化制定Date对象
String time = sdf.format(d);

常用的一些Math方法
double d = Math.ceil(16.34);//ceil返回大于指定数据的最小整数
double d1 = Math.floor(12.34); //floor 返回小于指定数据的最大整数
long l = Math.round(12.34);// round 四舍五入
double db = Math.pow(2,3);//幂运算,2底数3指数
 * 练习:给定一个小数,保留小叔的后两位

 public static double lianxi( double d){
int dd =(int)(Math.round(d*100));
System.out.println(dd);
double dd1 = dd/100.0;
        return dd1;
}

字符流和字节流:
 * 字节流2个基类:
 * InputStream OutputStream
 * 
 * 字符流两个基类
 * Reader Writer
 * 
 * 既然IO流是用于操作数据的
 * 那么数据的最常见体现形式是:文件
 * 
 * 那么先以操作 文件为主来演示
 * 
 * 需求:在硬盘上,创建一个文件并写入一些文字数据
 * 
 * 找到一个专门用于操作文件的Writer子类对象。FileWriter 后缀名是父类名,前缀名是该流对象的功能呢
 
 * IO异常的处理方式 
FileWriter fw = null ;
try {
fw = new FileWriter("k:\\demo.txt");
fw.write("adsada");
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
}
finally{
try {
if(fw!=null){
fw.close();
}
} catch (IOException e2) {
// TODO: handle exception
System.out.println(e2.toString());
}
}
  *演示对已有文件的数据续写 
FileWriter fw = new FileWriter("demo.txt",true);
fw.write("你好\n谢谢\nadasad");
fw.close();

文件读取的第一种方式 一个一个读字节

            //创建一般的文件读取流对象,和制定名称的文件相关联
//要保证该文件是已经存在的,如果不存在,会发生FileNotFoundException
FileReader fr = new FileReader("demo.txt");
//调用读取流对象的read方法
//read();一次读一个字符。 而且会自动往下读
int ch = 0;
while((ch = fr.read())!=-1){
System.out.println((char)ch);


文件读取 的第二种方式:通过字符数组进行读取
FileReader fr = new FileReader("demo.txt");
//定义一个字符数组,用于存储读到的字符
//该read(char[])返回的是独到字符的个数
char[] buf = new char[3];
int num =fr.read(buf);
System.out.println("num="+num+"...."+new String(buf));
int num1 =fr.read(buf);

System.out.println("num1="+num1+"...."+new String(buf,0,num)); 

小练习://读取一个.java文件,并打印在控制台上
FileReader fr = new FileReader("FileReaderDemo2.java");
char[] buf =new char[1024];
int num = 0;
while((num=fr.read(buf))!=-1){
System.out.print(new String(buf,0,num));
}
fr.close();

缓冲区: 
  * 缓冲区的出现时为了提高流的操作效率而出现的
 * 所以在创建缓冲区之前,必须要先有流对象
 * 该缓冲区中提供了一个跨平台的换行符
 * newLine();
//为了提高字符写入流效率,加入缓冲技术
//  只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可

//只要用到缓冲区,需要记得刷新
//bufw.flush();
//其实关闭缓冲区,就是在关闭缓冲区中的对象 

 字符读取流缓冲区:
 * 该缓冲区提供了一个一次读一行的方法 readLine ,方便于对文本数据的获取
 * 当返回null时,表示读到文件末尾
 * 
 * readLine方法返回的时候返回回车符之前的数据内容,并不返回回车符。 

装饰设计模式:
*
 * 装饰设计模式:
 * 当想要对已有对象进行功能增强时
 * 可以定义类,将已有对象传入,基于已有对象的功能,并提供功能
 * 那么自定义的该类就称为装饰类
 * 
 * 装饰模式比集成要更灵活,避免了继承体系臃肿
 * 而且降低了类与类之间的关系
 * 
 * 装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强的功能。
 * 所以装饰类和被装饰类通常属于一个体系中
 * 
 * 装饰类通常会通过构造方法接受被装饰的对象
 * 并给予被装饰的对象的功能,提供更强的功能

复制一个图片
 * 思路:
 * 1.用字节流对象和图片关联
 * 2.用字节写入流对象创建一个图片文件。用于存储获取到的图片数据。
 * 3.通过循环读写,完成数据的存储
 * 4.关闭资源


字符流:
 * FileReader
 * FileWriter
 * 
 * BufferedReader
 * BufferedWriter
 * 
 * 字节流:
 * FileInputStream
 * FileOutputStream
 * 
 * BufferedInputStream
 * BufferedOutputStream
 * 
 * 通过刚才的键盘录入一行数据并打印其大写,发现其实就是读
 * 一行的原理,也就是readLine的方法
 * 
 * 
 * 能不能直接使用readLine方法来完成键盘录入的一行数据的读取呢?
 * readLine方法是字符流BufferedReader类中的方法
 * 而键盘录入时read方法是字节流InputStream的方法
 * 
 * 那么能不能将字节流转成字符流在使用字符流缓冲区的readLine方法?
 * 
 * 
 * 
 * 
 * 1.
 * 源:键盘录入
 * 目的:控制台
 * 2.想把键盘录入的数据存储到一个文件中
 * 源:键盘
 * 目的:文件
 * 3.想将一个文件的数据打印在控制台上
 * 源:文件
 * 目的:控制台
 * 
 * 流操作的基本规律:
 * 流对象多,不知道该用哪个?
 * 通过3个明确:
 * 1.明确源和目的
 * 源:输入流,InputStream Reader
 * 目的:输出流:OutputStream Writer
 * 2.操作的数据是否是纯文本
 * 是:字符流
 * 不是:字节流
 * 3.当体系明确后,在明确要使用哪个具体对象
 * 通过设备来具体区分:
 * 源设备:内存,硬盘,键盘
 * 目的设备:内存,硬盘,控制台
 * 
 * 示例:
 * 1,将一个文本文件中的数据存储到另一个文件中,复制文件
 * 源文件:因为是源,所以使用读取流 InputStream Reader
 * 是不是操作文本文件,
 * 是!这是就可以选择Reader
 * 这样体系就明确了。
 * 接下来明确要使用该体系中的那个对象
 * 明确设备:硬盘上的一个文件
 * Reader体系中可以操作文件的对象时FileReader
 * 
 * 是否需要提高效率:是!加入Reader体系中的缓冲区BufferedReader
 * 
 * FileReader fr = new FileReader("a.txt");
 * BufferedReader bufr = new BufferedReader(fr);
 * 
 * 目的:OutputStream Writer
 * 目的是否是纯文本 
 * 是! Writer
 * 明确设备:硬盘
 * Writer体系中可以操作文件的对象是FileWriter
 * 是否需要提高效率:是!加入Writer体系中的缓冲区BufferedWriter
 * 
 * FileWriter fw = new FileWriter("b.txt");
 * BufferedWriter bufw = new bufferedWriter(fw);
 * 
 * 练习:将一个图片文件中数据存储到另一个文件中,复制文件,要按照以上格式自己完成3个需求
 * 
 * 源文件:因为是源文件,所以用读取流是InputStream 和Reader;
 *是不是要操作文本?
 *不是!选择InputStream
 *体系明确,接下来就是明确对象
 *明确设备:
 *硬盘上的一个文件,InputStream体系中可以操作文件的对象是FileInputStream
 *是否要提高效率?是!加入InputStream体系中的缓冲区BufferedInputStream
 *FileInputStream fis =new FileInputStream("in.bmp");
 *BufferedInputStream bis = new BufferedInputStream(fis);
 *
 *目的:OutputStream Writer
 *是否是文本
 *不是OutputStream
 *明确设备:硬盘
 *OutputStream体系中可以操作文件的对象FileOutputStream
 *是否要提高效率?是! 加入OutputStream体系中的缓冲区BufferedOutputStream
 *FileOutputStram fos = new FileOutputStream("out.bmp");
 *BufferedOutputStream bos  =new BufferedOutputStream(fos);
 *
 *------------------------------------------------------------
 *2.将键盘录入的数据保存到一个文件中
 *这个需求中有源和目的都存在
 *
 *那么分别分析
 *源:InputStream Reader
 *是否是纯文本?是!Reader
 *
 *设备:键盘,对应的对象是System.in;
 *选择Reader,但是System.in对应的是字节流??
 *为了操作键盘的文本数据方便,转成字符流按照字符穿操作更方便
 *所以既然明确Reader ,那么就将System.in转换成Reader
 *用了Readert体系中的转换流,InputStreamReader
 *
 *InputStreamReader isr = new InputStreamReader(System.in);
 *
 *需要提高效率吗? 需要! BufferedReader
 *BufferedReader bufr = new Bufferedreader(isr);
 *
 * 目的:OutputStream Writer
 *是否是纯文本?是!Writer
 *设备:硬盘,一个文件。使用FileWriter
 *FileWriter fw = new FileWriter("c.txt");
 *需要提高效率吗? 需要。
 *BufferedWriter  bufw = new BufferedWriter(fw);
 *
 *
 *
 *
 *-----------------------------------------------------------------------------------------------
 *扩展一下,想要把录入的数据按照指定的编码表(utf-8),将数据存到文件中
 *
 * 目的:OutputStream Writer
 *是否是纯文本?是!Writer
 *设备:硬盘,一个文件。使用FileWriter
 *但是FileWriter是使用的默认编码表,GBK
 *
 *但是存储时,需要加入指定编码表utf-8。而指定的编码只有转换流可以指定
 *所以要使用的对象时OutputStreamWriter
 * 而该转换流对象要接受一个字节输出流,而且还可以操作的文件字节输出流FileOutputStream
 * OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");
 *需要提高效率吗? 需要。
 *BufferedWriter  bufw = new BufferedWriter(osw);
 *
 *所以:转换流什么时候使用:字符和字节之间的桥梁,通常涉及到字符编码转换时,需要用到转换流
 *
 *
 *-------------------------------------------------------------------------------------------------
 *练习:将一个文本数据打印在控制台上,要按照以上格式自己完成3个明确
 *
 *源文件:InputStream Reader
 *是不是文本?是!Reader
 *明确对象
 *FileReader
 *是否要提高效率?是
 *BufferedReader
 *FileReader fr = new FileReader("xwg.txt");
 *BufferedReader br = new BufferedReader(fr);
 *
 *目的文件:OutputStream Writer
 *是否是文本?是
 *Writer
 *明确设备  控制台
 *System.out
 *是否提高效率?是
 *BufferedWriter
 *OutputStream os = system.out;
 *BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os))
 *
 */


/*
 * 读取键盘录入
 * system.out:对应的是标准的输出设备,控制台
 * System.in:对应的标准输入设备:键盘
 *  
 
 
------- android培训java培训、期待与您交流! ----------