【黑马程序员】集合二

<pre class="java" name="code">package cn.itcast;
/*
 * 四大皆空:
 * 		第一空:变量根本就没有值   不能使用
 * 		第二空:变量有值,但是值为null常量    该变量可以调用方法     但是会产生空指针异常
 * 		第三空:变量有值,值是一个空字符串对象, 该变量可以调用方法,也不会产生空指针异常,但是该对象的值是空的
 * 		第四空:null常量不可以直接打印,返回值为void的方法调用后不可以直接打印
 */
public class Demo01_4null {

	public static void main(String[] args) {

		//第一空:变量可能根本就没有值  不能使用
//		String s;
//		
//		boolean b = true;
//		
//		if(b) {
//			s = "酷爱java!";
//		}
//		else {
//			s = "大爱java!";
//		}
		
//		System.out.println(s);
		
		//第二空:变量有值,但是值为null常量    该可以调用方法     但是会产生空指针异常
//		String s = null;
//		s.length();
		
		//第三空:变量有值,值是一个空字符串对象, 该变量可以调用方法,也不会产生空指针异常,但是该对象的值是空的
//		String s = "";
//		System.out.println(s.length());
//		System.out.println(s.isEmpty());
		
		//
//		String s = null;
//		System.out.println(s);
//		System.out.println(null);
		
		System.out.println(method());
//		System.out.println(method2());
	}
	
	public static int method() {
		return 10;
	}

	public static void method2() {
		return;
	}
}

package cn.itcast_01;import java.io.FileInputStream;import java.io.IOException;/* * 字节流读取中文可能出现的小问题: */public class FileInputStreamDemo {public static void main(String[] args) throws IOException {// 创建字节输入流对象FileInputStream fis = new FileInputStream("a.txt");// 读取数据// int by = 0;// while ((by = fis.read()) != -1) {// System.out.print((char) by);// }byte[] bys = new byte[1024];int len = 0;while ((len = fis.read(bys)) != -1) {System.out.print(new String(bys, 0, len));}// 释放资源fis.close();}}
 


 

</pre><p>递归(理解) (1)方法定义中调用方法本身的现象  举例:老和尚给小和尚讲故事,我们学编程 (2)递归的注意事项;  A:要有出口,否则就是死递归  B:次数不能过多,否则内存溢出  C:构造方法不能递归使用 (3)递归的案例:  A:递归求阶乘  B:兔子问题  C:递归输出指定目录下所有指定后缀名的文件绝对路径  D:递归删除带内容的目录(小心使用)   </p><p>:字符流(掌握) (1)字节流操作中文数据不是特别的方便,所以就出现了转换流。    转换流的作用就是把字节流转换字符流来使用。 (2)转换流其实是一个字符流  字符流 = 字节流 + 编码表 (3)编码表  A:就是由字符和对应的数值组成的一张表  B:常见的编码表   ASCII   ISO-8859-1   GB2312   GBK   GB18030   UTF-8  C:字符串中的编码问题   编码    String -- byte[]   解码    byte[] -- String (4)IO流中的编码问题  A:OutputStreamWriter   OutputStreamWriter(OutputStream os):默认编码,GBK   OutputStreamWriter(OutputStream os,String charsetName):指定编码。  B:InputStreamReader   InputStreamReader(InputStream is):默认编码,GBK   InputStreamReader(InputStream is,String charsetName):指定编码  C:编码问题其实很简单   编码只要一致即可 (5)字符流  Reader   |--InputStreamReader    |--FileReader   |--BufferedReader  Writer   |--OutputStreamWriter    |--FileWriter   |--BufferedWriter (6)复制文本文件(5种方式)</p><p>2:IO流小结(掌握) IO流  |--字节流   |--字节输入流    InputStream     int read():一次读取一个字节     int read(byte[] bys):一次读取一个字节数组         |--FileInputStream     |--BufferedInputStream   |--字节输出流    OutputStream     void write(int by):一次写一个字节     void write(byte[] bys,int index,int len):一次写一个字节数组的一部分          |--FileOutputStream     |--BufferedOutputStream  |--字符流   |--字符输入流    Reader     int read():一次读取一个字符     int read(char[] chs):一次读取一个字符数组          |--InputStreamReader      |--FileReader     |--BufferedReader      String readLine():一次读取一个字符串   |--字符输出流    Writer     void write(int ch):一次写一个字符     void write(char[] chs,int index,int len):一次写一个字符数组的一部分          |--OutputStreamWriter      |--FileWriter     |--BufferedWriter      void newLine():写一个换行符            void write(String line):一次写一个字符串。</p><p>1:打印流(掌握)PrintWriter /PrintStream (1)特点:  A:打印流可以输出任意类型数据。  B:如果启用了自动刷新,在调用println()方法的时候,可以自动刷新并换行。  C:可以直接操作文件。   哪些流对象可以直接操作文件呢?   看其构造方法,同时有File和String构造参数的。 (2)案例:  通过打印流改进文本文件的复制。</p><p>  BufferedReader br = new BufferedReader(new FileReader("a.txt"));  PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true);</p><p>  String line = null;  while((line=br.readLine())!=null) {   pw.println(line);  }</p><p>  pw.close();  br.close();</p><p>  printf(String fomat,Object... o);</p><p>2:Properties(理解) (1)是Hashtable的子类。内置了IO流的操作。 (2)特有功能:  A:添加   Object setProperty(String key, String value)   B:获取   String getProperty(String key)     String getProperty(String key, String defaultValue)     Set<String> stringPropertyNames() 相当于以前的keySet() (3)和IO流结合的功能:  A:list 把集合中的数据写到文本文件。只能使用打印流。  B:load 把文本文件中的数据加载到集合。  C:store 把集合中的数据写到文本文件。 (4)案例:  键:blood  值:1200</p><p>  键:magic  值:1000</p><p>3:序列化流(理解) (1)就是把对象按照流一样的操作。方便网络传输。 (2)序列化流和反序列化流  ObjectOutputStream   writeObject(Object obj)  ObjectInputStream   readObject() (3)什么是序列化?如何实现序列化?什么是反序列化? (4)实现序列化接口的类是可以被序列化流操作的。    在这里面可以给定一个序列化id值。这样做简单的操作对写过的数据没有影响。</p><p>4:其他流PPT简单回顾即可。</p><p> </p><pre class="java" name="code">


 


:字符流(掌握)
 (1)字节流操作中文数据不是特别的方便,所以就出现了转换流。
    转换流的作用就是把字节流转换字符流来使用。
 (2)转换流其实是一个字符流
  字符流 = 字节流 + 编码表
 (3)编码表
  A:就是由字符和对应的数值组成的一张表
  B:常见的编码表
   ASCII
   ISO-8859-1
   GB2312
   GBK
   GB18030
   UTF-8
  C:字符串中的编码问题
   编码
    String -- byte[]
   解码
    byte[] -- String
 (4)IO流中的编码问题
  A:OutputStreamWriter
   OutputStreamWriter(OutputStream os):默认编码,GBK
   OutputStreamWriter(OutputStream os,String charsetName):指定编码。
  B:InputStreamReader
   InputStreamReader(InputStream is):默认编码,GBK
   InputStreamReader(InputStream is,String charsetName):指定编码
  C:编码问题其实很简单
   编码只要一致即可
 (5)字符流
  Reader
   |--InputStreamReader
    |--FileReader
   |--BufferedReader
  Writer
   |--OutputStreamWriter
    |--FileWriter
   |--BufferedWriter
 (6)复制文本文件(5种方式)

2:IO流小结(掌握)
 IO流
  |--字节流
   |--字节输入流
    InputStream
     int read():一次读取一个字节
     int read(byte[] bys):一次读取一个字节数组
    
     |--FileInputStream
     |--BufferedInputStream
   |--字节输出流
    OutputStream
     void write(int by):一次写一个字节
     void write(byte[] bys,int index,int len):一次写一个字节数组的一部分
     
     |--FileOutputStream
     |--BufferedOutputStream
  |--字符流
   |--字符输入流
    Reader
     int read():一次读取一个字符
     int read(char[] chs):一次读取一个字符数组
     
     |--InputStreamReader
      |--FileReader
     |--BufferedReader
      String readLine():一次读取一个字符串
   |--字符输出流
    Writer
     void write(int ch):一次写一个字符
     void write(char[] chs,int index,int len):一次写一个字符数组的一部分
     
     |--OutputStreamWriter
      |--FileWriter
     |--BufferedWriter
      void newLine():写一个换行符
      
      void write(String line):一次写一个字符串

 

package cn.itcast_01;

/*
 * 递归:方法定义中调用方法本身的现象
 * 
 * 方法的嵌套调用,这不是递归。
 * Math.max(Math.max(a,b),c);
 * 
 * public void show(int n) {
 * 		if(n <= 0) {
 * 			System.exit(0);
 * 		}
 * 		System.out.println(n);
 * 		show(--n);
 * }
 * 
 * 注意事项:
 * 		A:递归一定要有出口,否则就是死递归
 * 		B:递归的次数不能太多,否则就内存溢出
 * 		C:构造方法不能递归使用
 * 
 * 举例:
 * 		A:从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
 * 			从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
 * 				从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
 * 					从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚在给小和尚讲故事,故事是:
 * 						...
 * 					庙挂了,或者山崩了
 * 		B:学编程  -- 高薪就业 -- 挣钱 -- 娶媳妇 -- 生娃娃 -- 放羊 -- 挣学费
 * 			 学编程  -- 高薪就业 -- 挣钱 -- 娶媳妇 -- 生娃娃 -- 放羊 -- 挣学费
 * 				学编程  -- 高薪就业 -- 挣钱 -- 娶媳妇 -- 生娃娃 -- 放羊 -- 挣学费
 * 					学编程  -- 高薪就业 -- 挣钱 -- 娶媳妇 -- 生娃娃 -- 放羊 -- 挣学费
 * 						...
 * 					娶不到媳妇或者生不了娃娃	
 */
public class DiGuiDemo {
	// public DiGuiDemo() {
	// DiGuiDemo();
	// }
}

package cn.itcast_02;

/*
 * 需求:请用代码实现求5的阶乘。
 * 下面的知识要知道:
 * 		5! = 1*2*3*4*5
 * 		5! = 5*4!
 * 
 * 有几种方案实现呢?
 * 		A:循环实现
 * 		B:递归实现
 * 			a:做递归要写一个方法
 * 			b:出口条件
 * 			c:规律
 */
public class DiGuiDemo {
	public static void main(String[] args) {
		int jc = 1;
		for (int x = 2; x <= 5; x++) {
			jc *= x;
		}
		System.out.println("5的阶乘是:" + jc);
		
		System.out.println("5的阶乘是:"+jieCheng(5));
	}
	
	/*
	 * 做递归要写一个方法:
	 * 		返回值类型:int
	 * 		参数列表:int n
	 * 出口条件:
	 * 		if(n == 1) {return 1;}
	 * 规律:
	 * 		if(n != 1) {return n*方法名(n-1);}
	 */
	public static int jieCheng(int n){
		if(n==1){
			return 1;
		}else {
			return n*jieCheng(n-1);
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值