1 Static静态变量,用类名来访问,不需要产生实例对象。类似于全局变量。
Class Chinese {
Static String country=”中国”;
}
Class TextChinese{
Public static void main(String[] args){
System.out.println(Chineese.country);
}
}
也可以使用对象名的方式来访问,所以有两种访问方式。典型的用法是可以测试这种类产生了多少个个对象。
Static 方法 同样也有两种访问方法。和static变量使用差不多。非静态方法不能被静态方法访问。
Static 代码块可以用来初始化,static { }
2 单态设计模式: 控制了只能产生一个对象
首先把构造方法设置为private的,所以外面就不能创建对象,内部在创建一个对象,为对象的应用提供一个外部可以访问的方法,此方法必须是static的,否则外部就不能访问。那是因为外面不能创建对象。
内部类:
外部类不能访问内部类,而内部类可以访问外部类;
创建内部类的方法public class Demon {
int i = 9;
public void show() {
System.out.println("外部类");
}
class demons {
int j = 8;
public void shows() {
System.out.println("内部类" + i);
}
}
public static void main(String[] args) {
Demon d = new Demon();
Demon.demons ss = d.new demons();
}
}
3 Reader与Writer类:是所有字符流类的抽象基类,用于简化对字符串输入输出编程,即用于读写文本数据。
二进制文件和文本文件的区别。
编程举例:用FileWriter类向文件中写入一个字符串,然后用FileReader读出写入的内容。
import java.io.*;
public class FileStreamText {
public static void main(String[] args) {
try{
FileWriter fos = new FileWriter("hello.txt");
fos.write("www.it315.org");
fos.close();
char[] buf = new char[1024];
File f = new File("helloWorld.txt");
FileReader fis = new FileReader(f);
int len = fis.read(buf);
System.out.println(new String(buf, 0, len));
fis.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
4 编程序,实现文件的复制:
package com.TextFile;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class TextFileInputStream {
/**
* @param args
*/
public static void main(String []args){
// TODO Auto-generated method stub
int tr=0;
FileInputStream in=null; //读文件
FileOutputStream out=null;//写入文件
try {
in =new FileInputStream("H://java//workspers//MyDemo//src//com//TextFile//TextFileInputStream.java");
out=new FileOutputStream("b.txt");
while((tr=in.read())!=-1){
out.write(tr); //文件的复制
}
in.close();
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5 重视IO程序代码的复用:System.in连接到键盘,是InputStream类型的实例对象。System.out是连接到显示器,是PrintStream类的实例对象。
编程举例:将键盘上输入的内容转变成大写字母后打印在屏幕上。
import java.io.*;
public class PrintTest {
public static void main(String[] args) {
String str = "abcdefg";
ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
transform(bis, bos);
byte [] buf = bos.toByteArray();
System.out.println(new String(buf));
System.out.println(System.in, System.out);
}
public static void transform(InputStream in, OutputStream out){
try {
int ch = 0;
while((ch = in.read()) != -1){
int upperCh = Character.toUpperCase((char)ch);
out.write(upperCh);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
6 字符编码:
计算机里只有数字,计算机软件里的一切都是用数字来表示的,屏幕上显示的 一个个字符也不例外。
ASCII(美国标准信息交换码)。最高bit位都为0,也就是说这写数字豆子0到 127之间。
GB2312(国标码)表示中文字符,用两个字节的数字来表示,中文字符的每 个字节的最高位bit都为1。在GB2312的基础上对更多的中文字符(包括繁体) 进行了编码,新的编码规则称为GBK。在中国大陆使用的计算机系统上,GBK和 GBK2312就被称为系统的本地字符集。
7 各种过滤流和包装类:
缓冲流为I/O流增加了内存缓冲区,增加缓冲区有两个基本目的:
允许Java程序一次不只操作一个字节,这样提高率程序的性能。
由于有了缓冲区,使得在流上执行skip、mark、和reset方法都成为可能。
BufferedInputStream和BufferedOutputStream类:是Java提供的两个缓冲区包装类,不管底层系统是否使用了缓冲区,这两个类在自己的实例对象中创建缓冲。
BufferedReader和BufferedWriter类:BufferedReader的readLine方法可以一次读取一行文本,BufferedWriter的newLine方法可以向字符流中写入不同操作系统下的换行符。
举例说明:InputStreamReader isr=new InputStreamReader(System.in);
//BufferedReader 对字符的读和写起到一个缓冲作用,一达到文件读写的最高效率
BufferedReader br=new BufferedReader(isr);
String s=null;
try {
s=br.readLine();
while(s!=null){
if(s.equals("quit")) break;
System.out.println(s.toUpperCase());
s=br.readLine();
}
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
8 字节流与字符流的转换
InputStreamReader和OutputStreamWriter,是用于将字节流转换成字符流来读写的两个类,InputStreamReader可以将一个字节流中的字节解码成字符后读取,OutputStreamWriter将字符编码成自节后写入到一个字节流中。
最好不要直接使用InputStreamReader和OutputStreamWriter类读写数据,应尽量使用BufferedWriter类包装OutputStreamWriter类,用BufferedReader类包装InputStreamReader。这样可以避免频繁地在字符和字节之间进行转换。
.
9 Java程序与其他进程的数据通信
在Java程序中可以用Proces类的实例对象来表示子进程,子进程的标准输入和输出不再连接到键盘和显示器,而是以管道流的形式连接到父进程的一个输出流和输入流对象上。
调用Proces类的getOutputStream和getInputStream方法可以获得连接到子进程的输出流和输入流对象。