Java基础(一)

309 阅读10分钟

一、Java集合框架

1、集合框架
 (1)动态的数组,不指定长度的数组
 (2)jdk工具库提供的组件,位于java.util.*
2、集合框架的体系结构
 (1)Collection接口 存储无序的、不唯一的数据;其下有List和Set两大接口
 (2)子接口类List接口和Set接口
  1)List接口(存储有序的、不唯一的数据)的实现类(子类)
   ArrayList(可变数组集合)和LinkedList(链表集合)--有序集合 (加入到集合中的元素都会分配一个索引位置)
  2)Set接口(存储无序的、唯一的数据)的实现类(子类)
   HashSetTreeSet(带有排序功能)----无序集合(加入到集合中的元素无索引位置,对象元素是唯一的)
 (3)Map接口集合(由键值对构成的集合)
  1)实现类为HashMapTreeMap(排序功能)
  2)以键值对的方式存储数据,以键取值,键不能重复,但值可以重复
4、集合框架的工具类
  Collections和Arrays

二、有序集合List集合

1、List集合常用方法
(1)创建List集合对象
List<元素类型> list=new ArrayList<元素类型>();
<元素类型>:表示集合中只能放置指定类型的对象元素
 例如:

 List<String> ls=new ArrayList<String>();  
 List<Student> ls=new ArrayList<Student>();

(2)常用方法
 1)添加对象到集合 list.add(对象元素);
 2)设置指定索引位置的对象到集合
list.set(索引位置,对象元素);
 3)从集合移除指定索引位置的对象
list.remove(索引位置);
 4)获取索引位置的元素对象
元素类型 对象=list.get(索引位置);
 5)获取集合的长度(集合中元素的个数)
int size=list.size();
 6)判断集合中是否存在对象元素
boolean flag=list.isEmpty(); flag为真,表示无元素; flag为false,表示有元素

三、Set集合常用方法和使用方式

1、创建Set集合的方法
Set<元素类型> myset=new HashSet<元素类型>();

2、常用方法
 1)添加对象到集合 myset.add(对象元素);
 2)从集合移除指定的对象
myset.remove(对象元素);
 3)获取集合的长度(集合中元素的个数)
int size=myset.size();
 4)将Set集合转为对象数组
Object[] obs=myset.toArray();
 5)判断集合中是否存在对象元素
boolean flag=myset.isEmpty(); flag为真,表示无元素 flag为false,表示有元素
3、迭代器Iterator
(1)主要用于从集合容器中遍历对象元素
(2)从Set集合中获取迭代器对象
Iterator<元素类型> it=myset.iterator();
(3)Iterator常用的方法
1)判断集合中是否存在对象元素
boolean flag=it.hasNext();
2)获取对象元素的值
元素类型 对象=it.next();
注意:在使用Iterator变异集合元素时,不能对元素进行增、删、改的操作
4、泛型循环
(1)泛型
 特指特定的集合元素类型,限制集合的元素类型只能是特定的类型
(2)泛型循环的语法

 for(元素类型 对象:集合或者数组){
		......
      }

四、Map集合

1、由键值对构成的集合
2、Map集合常用的方法
 (1)创建Map集合的方法
Map<主键类型,值类型> map=new HashMap<主键类型,值类型>();
 (2)Map集合的常用方法
  1)添加和修改元素 map.put(主键,值对象);
  2)根据键移除对象 map.remove(主键);
  3)获取集合元素的个数
  int size=map.size();
  4)获取主键集合
Set<Object> keys=map.keySet();
  5)获取值集合
Collection<Object> collection=map.values();
  6)根据主键获取值对象
  值类型 对象=map.get(主键);

五、Collections类常用方法

Collections和Collection不同,前者是集合的操作类,后者是集合接口
Collections提供的常用静态方法
 sort():排序
 binarySearch():查找
 max()\min():查找最大\最小值

六、Java泛型集合

所谓泛型就是允许在定义类、接口时指定类型形参,这个类型形参将在声明变量、创建对象时确定
泛型的格式:通过<>来定义要操作的引用数据类型
典型泛型集合ArrayList<E>、HashMap<K,V>,<E>、<K,V>表示该泛型集合中的元素类型,除了指定了集合中的元素类型外,泛型集合和之前学习的集合的用法完全一样
使用泛型的好处:
1、将运行时期出现的ClassCastExcpetion ,转移到了编译时期。方便于程序员解决问题,让运行时期问题减少
2、避免了强制转换的麻烦

七、Java的包装类

1、Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类。 包装类把基本类型数据转换为对象,每个基本类型在java.lang包中都有一个相应的包装类

2、包装类的继承关系
3、基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
装箱:从基本类型转换为对应的包装类对象

拆箱:从包装类对象转换为对应的基本类型

八、其他实用类

1、Math类
java.lang.Math类提供了常用的数学运算方法和两个静态常量E(自然对数的底数)和PI(圆周率)
2、Random类
java.util.Random类生成随机数
3、String类
String类位于java.lang包中,具有大量的方法计算字符串的长度、比较字符串、连接字符串、提取字符串等等 (1)、String类提供了length( )方法,确定字符串的长度
(2)、String类提供了equals( )方法,比较存储在两个字符串对象的内容是否一致
 equals( ):检查组成字符串内容的字符是否完全一致
 ==:判断是否是同一个字符串对象,判断两个字符串在内存中的地址
(3)、字符串比较的其他方法:
 equalsIgnoreCase()方法、toLowerCase()方法、toUpperCase()方法
(4)、字符串常用提取方法:
public int indexOf(int ch)
public int indexOf(String value) //搜索第一个出现的字符ch(或字符串value),如果没有找到,返回-1
public int lastIndexOf(int ch)
public int lastIndexOf(String value) //搜索最后一个出现的字符ch(或字符串value),如果没有找到,返回-1
public String substring(int index) //提取从位置索引开始的字符串部分
public String substring(int beginindex, int endindex) //提取beginindex和endindex之间的字符串部分
public String trim() //返回一个前后不含任何空格的调用字符串的副本

九、Java日期类的使用

1、位于java.util包 ,使用时需导入java.util.*
2、日期类Date类
(1)创建日期类对象 Date date=new Date();
(2)日期类的常用方法
 1)获取当前本地化日期
String sdate=date.toLocaleString();
 2)获取年月日

   int year=date.getFullYear();
   int month=date.getMonth();
   int day=date.getDate();

3、将字符串转为日期类型
(1)使用java.text包中的SimpleDateFormat类进行格式转换
 1)创建日期格式化类对象,并指定日期格式
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd"); 转化1990-01-01这种格式的字符串日期
 2)常用方法
 a、将字符串转为日期
Date date=dateFormat.parse(日期格式的字符串);
 b、将日期转为指定的字符串格式
   String sdate=dateFormat.format(Date类型的对象);

十、输入输出流

1、流的定义
  内存中的数据按照指定的顺序和方向进行流动,称之为流
2、Java流的分类

3、输入流
 从磁盘文件向应用程序的内存流动的数据集称为输入流(读取磁盘文件的数据到内存)
4、输出流
 从应用程序的内存向磁盘文件流动的数据集称为输出流(将内存的数据保存到磁盘)
5、文件类File
(1)java.io包
(2)创建文件对象,并指定要操作的文件路径
File file=new File("文件的路径");
 例如:File file=new File("d:\\aa.txt");
(3)文件的常用方法
1)判断制定的文件路径是否存在
boolean flag=file.exists(); flag=true:表示存在,false表示不存在
2)判断是文件还是目录
boolean flag=file.isFile(); flag=true:表示是文件
flag=file.isDirectory(); flag=true:表示是目录(文件夹)
3)获取文件名称 String fname=file.getName();
4)获取文件所在的路径 String path=file.getPath();
5)获取文件所在的绝对路径(带盘符) String path=file.getAbsolutePath();
6)创建文件 file.createNewFile();
7)创建文件夹 file.mkdir();
8)删除文件 file.delete();
9)获取文件的长度 long size=file.length();

十一、字节流

A
1、字节输出流OutputStream(输出流的超类,写文本文件)
2、常用的字节输出流类
(1)文件字节输出流类FileOutputStream
(2)缓冲区字节输出流类BufferedOutputStream
(3)对象输出流类ObjectOutputStream

3、字节输出流的常用方法
(1)创建字节输出流对象
FileOutputStream fout=new FileOutputStream(File对象或者文件目标路径[,true]);//true表示增量写出(追加),false表示覆盖写出
(2)方法

 `fout.write(int类型的值或者变量);//逐个字节写出数据到文件`
  fout.write(byte[]);//写出字节数组数据到文件
  fout.flush();//清除缓冲区数据
  fout.close();//关闭输出流

B
1、字节输入流InputStream(输入流的超类,读文本文件)
2、常用的字节输入流类
(1)FileInputStream--文件字节数入流,读取指定位置的文件数据,向应用程序内存输入 (2)BufferedInputStream--缓冲区输入流类,加快输入流的读取速度
(3)ObjectInputStream--对象输入流类,从文件中读取存储的Java对象二进制数据,并转为Java对象
3、输入流的常用方法
创建输入流对象
FileInputStream fin=new FileInputStream(文件对象或者要读取的文件路径);
(1)获取输入流的大小
int leng=fin.available();
(2)读取输入流数据到字节数组中
fin.read(字节数组对象);
(3)逐个字节读取输入流中的数据
int b=fin.read();
(4)关闭输入流 fin.close();

十二、字符流

1、将流中的数据按照字符方式进行处理
2、字符流只能处理纯文本文档的数据(.txt、.html、.xml等能用记事本打开并能看懂的信息文档)
3、字符输入流Reader类(字符输入流类的超类)
(1)字符流的常用实现类
 1)文件字符输入流FileReader
 2)字符输入流缓冲区类BufferedReader
(2)常用方法
 1)创建文件输入流对象
FileReader fr=new FileReader(文件对象或者要读取的文件路径);
 2)常用方法

    int c=fr.read();//逐个字符读取
    fr.read(字符数组对象);//读取流中的数据到字符数组 
    fr.close();

4、字符输出流Writer类(字符输出流类的超类)
(1)常用的字符输出流实现类
FileWriter --文件字符输出流
BufferedWriter--缓冲区字符输出流
(2)常用方法
 1)创建输出流类
FileWriter fw=new FileWriter(文件对象或者文件路径[,true]);true表示增量写入
 2)常用方法

  fw.write(字符变量);//逐个字符写出到文件
  fw.write(字符数组对象);//将输出流的数据写出到字符数组保存到文件
  fw.write(字符串变量或者值);//写出字符串到文件存储
  fw.flush();//刷新缓冲区
  fw.close();//关闭

十三、字节流转字符流

1、将低8位的字节流转为高16位的字符流
2、字节输入流转为字符输入流并设置编码格式
InputStreamReader isr=new InputStreamReader(字节数入流对象,"编码格式");
这样就可以读取不同编码格式的字符数据

3、将字节输出流转为字符输出流
OutputStreamWriter osw=new OutputStreamWriter(字节输出流对象,"编码格式");
这样就可以写入不同编码格式的字符数据

十四、序列化与反序列化

1、序列化定义
 将Java对象转为二进制字节数据的过程,称为序列化
2、序列化得主要目的是为将Java对象保存到文件中进行存储
3、序列化的实现方式

public class 实体类 implements Serializable{
	    属性...
	    ...
      }

4、反序列化 将保存在文件中的二进制Java对象流数据,转换为Java对象本身的过程称为反序列化
5、使用ObjectInputStream转换二进制对象为Java实体对象