第二本书《java高级API总结》

本文详细总结了Java集合框架,包括Collection、List、Set、Map接口及其常见实现类,探讨了泛型、枚举、包装类的重要特性,并介绍了装箱拆箱、字符串转换等操作。还概述了输入输出流、字符流、数据流的概念和常用方法,涉及绝对路径、相对路径、文件读写等。此外,文章深入讲解了序列化与反序列化过程,以及进程、线程的概念,包括线程的创建、状态、调度和同步。最后,简述了Socket编程的基础知识,区分了TCP和UDP套接字,并展示了基于这两种协议的Socket编程基础。
摘要由CSDN通过智能技术生成

第一二章总结

1.适合集合框架

​ (a)Collection接口存储一组不唯一(可重复),无序的对象

​ (b)list接口存储一组不唯一(可重复),有序的对象

0 1 2 3 4 5
aaa bbb ccc ddd aaa bbb

​ (c)Set接口存储一组唯一,无序的对象

​ (4)Map接口存储一组键值对象,提供key到value的映射

2.list接口的实现类

  1. ArrayList实现了长度可变的数组,遍历元素和随机访问元素的效率高
package com.kgc.arraylist;

import java.util.ArrayList;

public class ArrayListDemo {
   

	public static void main(String[] args) {
   
		// 集合存储多条新闻标题
		NewsTitle title1 = new NewsTitle(1, "深圳终于入冬了1", "admin");
		NewsTitle title2 = new NewsTitle(2, "深圳终于入冬了2", "admin");
		NewsTitle title3 = new NewsTitle(3, "深圳终于入冬了3", "admin");
		NewsTitle title4 = new NewsTitle(4, "深圳终于入冬了4", "admin");
		NewsTitle title5 = new NewsTitle(5, "深圳终于入冬了5", "admin");

		ArrayList list = new ArrayList();
		list.add(title1);
		list.add(title2);
		list.add(title3);
		list.add(title4);
		list.add(1, title5);

		System.out.println("新闻的标题的总数:" + list.size());

		// 遍历list,取出每条新闻标题的题目
		for (int i = 0; i < list.size(); i++) {
   
			NewsTitle title = (NewsTitle) list.get(i);
			System.out.println(title.getTitle());

		}
		
		System.out.println("***********");
		
		for (Object obj : list) {
   
			NewsTitle title = (NewsTitle) obj;
			System.out.println(title.getTitle());
		}
			
		System.out.println("***********");
		System.out.println(list.contains(title1));
		list.remove(title1);
		System.out.println(list.contains(title1));
		System.out.println("***********");
		System.out.println(list.size());
		list.clear();//清除所有集合
		System.out.println(list.size());//打印有几个标题
		System.out.println(list.isEmpty());//判断是否为空,是则返回Ture
		
		
	}

}

​ 2.LinkedList采用链表存储方式,插入、删除元素是效率高

3.Map接口

(a)key:唯一,无序 (b)value:不唯一

4.泛型:将对象的类型作为参数,指定到其他类型或者方法上,从而保证类型转换的安全性和稳定性,本质是参数化类型

5.枚举

枚举由一组固定的常量组成的类型;特点为:安全,易于输入,代码清晰

package com.kgc.enmu.demo;

public enum Genders {
   ,;
}

package com.kgc.enmu.demo;

public class Student {
   
	public Genders sex;
	
	public static void main(String[] args) {
   
		Student stu=new Student();
		
		stu.sex=Genders.;
		System.out.println("我是"+stu.sex+"生");
	}
}

6.包装类

(1)包装类把基本类型数据转换为对象

​ (a)每个基本类型在java.lang包中都有一个相应的包装类

(2)包装类有何作用:

​ (a)提供了一系列有用的方法

​ (b)集合不允许存放基本数据类型数据,存放数字时,要用包装类型

7.包装类的构造方法

(1)基本类型变为包装类

​ (a)所有包装类都可以将与之对应的基本数据类型作为参数,来构造他们的实例

​ 如:Integer i=new Integer(1(传入一个该类型的数做参数即可));

​ Character c=new Character(‘6’);

​ (b)除Character类外,其他包装类可将一个字符串作为参数构造他们的实例

​ 如:Integer i=new Integer(“123”);

​ Double c=new Double(“9.8”);

注:

(c)Boolean类构造方法参数为String类型时,若该字符串内容为true(不考虑大小写)则该Boolean对象表示true,否则表示false

(d)当Number包装类构造方法参数为String类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型的数据,否则编译通过,运行时NumberFormatException异常

(2)包装类变为基本数据类型

​ 如:Integer i=new Integer(9);

​ int j=i.intValue();

​ Boolean b=new Boolean(true);

​ boolean b1=b.booleanValue();

(3)基本类型变为字符串

​ 如:int num=9;

​ String num2=Integer.toString(num);

​ String num3=num+" ";

(4)字符串变为基本类型(character除外)

​ 如:String s=“89”;

​ int num1=Integer.parseInt(s);

​ boolean num2=Boolean.parseboolean(“true”);

8.装箱和拆箱

(1)基本类型和包装类的自动转换

a:装箱:基本类型转换为包装类的对象

b:拆箱:包装了对象转换为基本类型的值

第三章总结

1.绝对路径:从盘符出发

2.相对路径:从当前位置出发(即不从盘符出发)

3.1个字符=2个字节 1个字节=8位 1个字符=16位

一、4.InputStream类常用方法(字节输入流,读,是抽象类)

a.Int   read():从输入流一个字节一个字节的读,返回的是该字节的整数表示形式,如果到了输入流的末尾,返回-1

​ b.int read(byte[ ] b):从输入流读取若干字节,把这些字节保存到数组b中,返回的是读取到的字节数,如果到了输入流的末尾,返回-1

​ c.int read(byte[ ] b,int off,int len):从输入流读取若干字节,把这些字节保存到数组b中,off指的是字节数组中开始保存数据的起始下标,len指读取的字节数目,返回的是读取到的字节数,如果到了输入流的末尾,返回-1

​ d.void close():

​ e.int available():可以从输入流中读取的字节数目

5.InputStream的子类FileInputStream常用的构造方法:

​ a.FileInputStream(File file):传文件

​ b.FileInputStream(String name):传路径

二、6.OutputStream类的常用方法(字节输出流,写,抽象类)

​ a.int write()

​ b.b.int write(byte[ ] b):

​ c.int writebyte[ ] b,int off,int len):

​ d.void close():

​ e.flush():强制将缓冲区清空

7.OutputStream类的子类FileOutputStream常用的构造方法

​ a.FileOutputStream(File file):传文件

​ b.FileOutputStream(String path):传路径

​ c.FileOutputStream(String path,boolean append):boolean append传入的是true则是在原文件上追加新内容

package cn.kgc.io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamDemo {
   

	public static void main(String[] args) {
   
		FileInputStream fis=null;
		try {
   
			//输入流FileInputStream
			fis = new FileInputStream("c:\\yangxichang\\test.txt");
			System.out.println("\n可以读到的字节数:"+fis.available());
			// 借助输入流的read()方法读文件
//			int data;
//			while ((data = fis.read()) != -1) {
   
//				System.out.print((char)data);
//			}
			// 借助输入流的read(byte[])方法读文件
			byte[] b=new byte[1024];
			int data;
			while ((data = fis.read(b)) != -1) {
   
				for(int i=0;i<data;i++) {
   
					System.out.print((char)b[i]);
				}
			}
			

		} catch (FileNotFoundException e) {
   
			e.printStackTrace();
		} catch (IOException e) {
   
			e.printStackTrace();
		}finally {
   
			//关闭输入流
			try {
   
				fis.close();
			} catch (IOException e) {
   
				e.printStackTrace();
			}
		}
	}
}
package cn.kgc.io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamDemo {
   
//使用字节输出流往文件中写内容
	public static void main(String[] args) {
   
		FileOutputStream fos=null;
		try {
   
			fos=new FileOutputStream("c:\\yangxichang\\hello.txt");
			String str="好好学习java";
			//将字符串打散为一个字节数组
			byte[] words =str.getBytes();
			fos.write(words, 0,words.length);
			System.out.println("hello文件已被更新!");
		} catch (FileNotFoundException e) {
   
			e.printStackTrace();
		} catch (IOException e) {
   
			e.printStackTrace();
		}finally {
   
			try {
   
				fos.close();
			} catch (IOException e) {
   
				e.printStackTrace();
			}
		}
		
		
	}

}
package cn.kgc.io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class InputAndOutputDemo {
   

	public static void main(String[] args) {
   
		FileInputStream fis = null;
		FileOutputStream fos = null;

		try {
   
			fis = new FileInputStream("c:\\yangxichang\\我的青春谁做主.txt");
			fos = new FileOutputStream("c:\\yangxichang\\hello.txt", true);

			byte[] words = new byte[1024];
			int len = -1;
			while ((len = fis.read(words)) != -1) {
   
				fos.write(words, 0, len);
			}

			// 常见错误:(1)少写了一个字节过来 (2)多写了很多空格过来
			// while((fis.read())!=-1){
   
			// fis.read(words); //读取文件
			// fos.write(words,0,words.length); //写入文件
			// }

			System.out.println("文件复制完成!");

		} catch (FileNotFoundException e) {
   
			e.printStackTrace();
		} catch (IOException e) {
   
			e.printStackTrace();
		} finally {
   
			try {
   
				fos.close();
			} catch (IOException e) {
   
				e.printStackTrace();
			}
			try {
   
				fis.close();
			} catch (IOException e) {
   
				e.printStackTrace();
			}
		}

	}

}

三、8.Reader类常用方法(字符输入流,读)

​ a.read()

​ b.read(char[ ])

​ c.read(char[ ],off,len)

​ d.close()

9.Reader类的子类FileReader常用的构造方法

​ a.FileReader(File file)

​ b.FileReader(String path)

10.InputStreamReader是Reader的子类,同时也是FileReader的父类,常用的构造方法有:

​ a.InputStreamReader(InputStream in)

​ b.InputStreamReader(InputStream ,String chatSetName):String chatSetName为指定编码格式,解决中文乱码格式

​ c.中文乱码的原因:文件编码格式和程序环境的编码格式不一致

​ 解决方案:字符类去读的时候,指定字符流的编码格式

​ d.打印自己Eclipse的默认编码格式的固定写法:System.out.println(System.getProperty(“file.encoding”));

11.字符缓冲流BufferedReader

​ a.Reader类的子类BufferedReader类带有缓冲区,按行读取内容的 readLine()方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值