<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);
}
}
}