------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
1:数据操作流(操作基本类型数据的流)
(1)可以操作基本类型的数据
(2)流对象名称 DataInputStream DataOutputStream
2:打印流
(1)字节打印流,字符打印流
(2)特点: A:只操作目的地,不操作数据源 B:可以操作任意类型的数据 C:如果启用了自动刷新,在调用println()方法的时候,能够换行并刷新
D:可以直接操作文件
(3)复制文本文件
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true);
String line = null;
while((line=br.readLine())!=null) {
pw.println(line);
}
pw.close();
br.close();
3:标准输入输出流
(1)System类下面有这样的两个字段 in 标准输入流 out 标准输出流
(2)三种键盘录入方式A:main方法的args接收参数
B:System.in通过BufferedReader进行包装BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
C:Scanner Scanner sc = new Scanner(System.in);(3)输出语句的原理和如何使用字符流输出数据
A:原理
System.out.println("helloworld");
PrintStream ps = System.out;
ps.println("helloworld");
B:把System.out用字符缓冲流包装一下使用
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
4:多线程
(1)多线程:一个应用程序有多条执行路径
(2)JVM的启动是多线程的,因为它最低有两个线程启动了,主线程和垃圾回收线程。
(3)多线程的实现方案
A:继承Thread类
public class MyThread extends Thread {
public MyThread() {
}
public MyThread(String name){
super(name);
}
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(getName() + ":" + x);
}
}
}
public class MyThreadDemo {
public static void main(String[] args) {
MyThread my1 = new MyThread();
MyThread my2 = new MyThread();
my1.setName(“张三");
my2.setName("李四");
my1.start();
my2.start();
//带参构造方法给线程起名字
// MyThread my1 = new MyThread("张三");
// MyThread my2 = new MyThread("李四");
// my1.start();
// my2.start();
System.out.println(Thread.currentThread().getName());
B:实现Runnable接口
public class MyRunnableDemo {
public static void main(String[] args) {
// 创建MyRunnable类的对象
MyRunnable my = new MyRunnable();
// Thread(Runnable target, String name)
Thread t1 = new Thread(my, "张三");
Thread t2 = new Thread(my, "李四");
t1.start();
t2.start();
}
}
public class MyRunnable implements Runnable {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
// 由于实现接口的方式就不能直接使用Thread类的方法了,但是可以间接的使用
System.out.println(Thread.currentThread().getName() + ":" + x);
}
}
}
(4)线程的调度和优先级问题
A:线程的调度 a:分时调度 b:抢占式调度 (Java采用的是该调度方式)
B:获取和设置线程优先级 a:默认是5 b:范围是1-10
(5)线程的控制 A:休眠线程 B:加入线程 C:礼让线程 D:后台线程 E:终止线程
(6)线程的生命周期 A:新建 B:就绪 C:运行 D:阻塞 E:死亡
(7)同步解决线程安全问题
A:同步代码块
synchronized(对象) {
需要被同步的代码;
}
这里的锁对象可以是任意对象。
B:同步方法 把同步加在方法上。 这里的锁对象是this