JAVA8

10 篇文章 0 订阅

1泛型方法

是在调用方法时指明泛型的具体类型

//语法:方法访问控制符 <T,E...> 返回类型 方法名(形参列表) {}
//注意:访问控制符和返回值类型中间的<T>非常重要,它表示此方法是泛型类型,但是泛型类中使用了泛型成员的方法并不是方法
public static <T,E,K> void printType(T t,E e,K k) {
    System.out.println(t+"\t"+t.getClass().getSimpleName());
    System.out.println(e+"\t"+e.getClass().getSimpleName());
    System.out.println(k+"\t"+k.getClass().getSimpleName());
}

可变参数的泛型方法

我们在定义方法的时候可以在方法形参出声名,

//格式:访问控制符 <泛型类型> 返回值类型 方法名(泛型标识... 变量名) {}
//该变量可以接受任意个数的该类型数值,封装在一个数组中
public static  <E> void print(E... e) {
    for (int i = 0; i < e.length; i++) {
        System.out.println(e[i]);
    }
}

注意:使用三个点标识可变参数,也就是随便多少参数

//注意:在泛型中没有继承的概念,如果定义一个泛型的引用指向任意该泛型类的对象,那么对象中的泛型类型需要使用通配符号 ?  表示。
ArrayList<String> strList = new ArrayList<>();
List<?> list = new ArrayList();
list = strList;

2 流(IO)

流的分类:
1.输入流和输出流
	输入还是输出我们拥有站在程序的角度去看待,写文件是输出,读文件是输入
2.字节流和字符流
	按照传输数据的最小单位划分
3.节点流和处理流
	按照功能分为节点流和处理流,节点流是一些基本的流,处理流是一些功能强大的流,它包在节点流外面
所有的流都继承自以下四个抽象类:
	InputStream	字节输入流
	OutputStream 字符输出流
	Reader	字符输入流
	Writer  字符输出流

节点流

2.1 FileInputStream
FileInputStream文件字节输入流,它用来以一个字节一个字节的方式来读文件
read()	读取文件中的一个字节,并返回int型的编码,若读到最后返回-1
close()	关闭输入流
不可以按照字节打印汉字
public class Test1 {
    public static void main(String[] args) {
        InputStream is = null;
        //这么写的目的在于扩大is的作用范围
        try {
            is = new FileInputStream("D:\\ClassFile\\Idea_File\\test0302\\src\\com\\iweb\\test\\Test1.java");
            int i = 0;
            while ((i=is.read())!=-1){
                System.out.print((char) i);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

2.2 File.separator
File.separator表示当前操作系统的文件分隔符
注意:在实际开发中同一使用 / ;因为windows会自动转成\
2.3 FileOutputStream
文件字节输出流,以一个字节一个字节写文件
write(int) 将某个字节写入文件,注意:如果文件不存在,会首先创建文件
close() 关闭该输出流
//复制的功能
public class Test2 {
    public static void main(String[] args) {
        InputStream is = null;
        OutputStream os = null;
        try {
            is = new FileInputStream("D:/ClassFile/Idea_File/test0302/src/com/iweb/test/Test2.java");
            os = new FileOutputStream("D:/test2.java");
            int i = 0;
            while ((i=is.read())!=-1) {
                os.write(i);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

2.4 NullPointException

空指针异常,当某个变量不指向任何对象时,使用该变量调用方法,就会抛这个异常,所以我们为了代码稳定性,通常会判断对象是否为空

2.5 FileReader
文件字符输入流,它用来以一个字符一个字符的方式读文件
read() 读取文件中的一个字符,并返回int型该字符编码,如果读到末尾返回-1
close() 关闭该输入流
注意:创建该对象时,可以传入2个参,第2个boolean型的参表示是否追加在后面
2.6 FileWriter
文件字符输出流,它用来以一个字符一个字符的方式写文件
write() 向文件中的写字符 //其中是字符unicode编码
close() 关闭该输入流

处理流

2.7 BufferedInputStream
缓冲字节输入流,它包着一个InputStream对象
read():它用来读取数据,一次性从数据源读取8k个字节存入缓冲区,然后从缓冲区中取一个字节返回,再从缓冲区读取一个字节,极大减少了对数据源的读取次数
is = new FileInputStream("D:/ClassFile/Idea_File/test0302/src/com/iweb/test/Test1.java");
bfs = new BufferedInputStream(is);
int i = 0;
while ((i=bfs.read())!=-1){
    System.out.print((char) i);//打印
}
2.8 BufferedReader
缓冲字符输入流,里面包着一个Reader对象
readline()	用来读取一行数据,同样也有缓冲区概念
2.9 BufferedWriter
缓冲字符输出流,里面包着一个Weiter对象
write() 一次性写入一个字符串
newLine() 另起一行
flush() 清空缓冲区
close() 关闭该输入流,同时会关闭里面的节点流
2.10 打印流(PrintWriter)
PrintWriter 打印字符流
它提供各种重载的print方法和println()方法来向目标资源打印数据

2.11 InputStreamReader
这是一个字节流转字符流的桥梁,将传入的字节数据转为字符数据
//InputStreamReader、PrintWriter、FileReader
public class Test8 {
    public static void main(String[] args) {
        String s = null;
        PrintWriter log = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        try {
            FileWriter fw = new FileWriter("d:log.txt",true);
            log = new PrintWriter(fw);
            while ((s=br.readLine())!=null) {
                if ("exit".equals(s)) {
                    break;
                }
                System.out.println(s);
                log.println("-------------");
                log.println(s);
                log.println("=="+(new Date()) +"==");
                log.flush();

            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. UTF-8

可变长度的unicode编码格式

4. ServerSocket、Socket

ServerSocket:服务器用来连接流的插座

Socket:客户端用来连接流的插座

5. DataInputStream、DataOutputStream

他们是连接服务器插座和客户端插座的数据流,他们都是处理流
他们是连接服务器插座和客户端插座的数据流,他们都是处理流

可以分别提供readUTF()和writerUTF()方法进行数据的输入和输出
可以分别提供readUTF()和WriterUTF()方法进行数据的输入和输出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值