JavaSE

JavaSE和JavaWeb基础

十三、Java集合

集合主要分为Set、List、Map,Set的实现类有hashSet、TreeSet,set集合主要表现为不重复且有序,List的实现类主要有ArrayList、LinkedList,List集合表现为可重复且无序,Map集合是映射类型,表现为键值对类型,一个键只能对应一个值,Map的实现类主要有HashMap、TreeMap。

1、集合的理解和好处

1.1数组

  • 长度开始时必须指定,而且一旦指定,不能更改
  • 保存的必须为同一类型的元素
  • 使用数组增加/删除元素比较麻烦

1.2集合

  • 可以动态保存任意多个对象
  • 提供了一系列方便操作对象的方法,例如add,remove,get,set等
  • 使用集合添加/删除元素更简单

十四、Java集合排序

1、Comparator和Comparable的区别

Comparator Comparable
位于java.util包 位于java.lang包
在要比较的类的外部实现该接口 在要比较的类上实现该接口
调用sort方法时,要指定Comparator的实现类 调用sort方法时,只需指定集合名即可

Comparator
第一步:实现要比较的类
第二步:实现Comparator接口
第三步:测试

Comparable
第一步:定义要比较的类,并实现Comparable接口
第二步:测试

十五、Java泛型

1、为什么使用泛型?

  • 不用进行强制类型转换
  • 避免运行时异常的安全隐患

2、泛型作为方法参数

public void sellGoods(List<? extends Goods> goods)
public void sellGoods(List<? super Goods> goods)

3、自定义泛型类

主要是熟悉泛型类的定义和方法的调用

4、自定义泛型方法

主要是泛型方法的参数的写法和方法的调用

十六、Java多线程

1、线程的概念

程序最小的调度单位,可以同时调用多个程序并行执行
线程常用方法:

  • setName:设置线程名称
  • getName:返回该线程的名称
  • start:使该线程开始执行
  • run:调用线程对象run方法
  • setPriority:设置线程的优先级
  • getPriority:获得线程的优先级
  • sleep:在指定的毫秒数内让正在执行的线程休眠(暂停执行)
  • interruot:中断线程
  • yield:线程的礼让,让出cpu,让其他线程优先执行,但礼让的时间不确定,所以也不一定礼让成功。
  • join:线程的插队,插队的线程一旦插队成功,则肯定先执行完插入的线程所有的任务

用户线程和守护线程

  • 用户线程:也叫工作线程,当线程的任务执行完或者通知方式结束
  • 守护线程:一般是为工作线程服务的,当所有的用户线程结束,守护线程自动结束
  • 常见的守护线程:垃圾回收机制

线程有七大状态

2、创建线程的两种方式

  • 通过继承Thread类创建线程(MyThread)

    class MyThread extends Thread{
    public MyThread(){
    
    }
    public void run(){
        for(int i=0;i<100;i++){
            System.out.ptintln(getName());
        }
    }
    }
  • 通过实现Runnable接口创建线程(MyRunnable)(更适用多线程)
    为什么要实现Runnable接口?
    1、Java不支持多线程
    2、不打算重写Thread类的其他方法

3、线程的状态和生命周期

  • 线程的状态:
    新建-可运行-运行-阻塞-终止

4、sleep()和hjoin()方法

sleep方法可以让线程进行睡眠,join方法可以让线程进行插队

5、线程的优先级

通过Thread.setPrority去设置线程的优先级,优先级高的线程优先执行

6、线程同步

在多线程编程,一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,最多有一个线程访问,以保证数据的完整性。

7、线程间通信

8、修饰符

  • synchronized 修饰符
    synchronized是Java中的关键字,是一种同步锁
    1、修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是{}括起来的代码,作用的对象是调用这个代码块的对象。
    2、修饰一个方法
    3、修饰一个静态方法
    4、修饰一个类

  • transient 修饰符

  • volatile 修饰符

十七、Java输入输出流

1、流的概念

2、File类的使用

public class FileInputDemo1 {

    public static void main(String[] args) {
        //创建一个FileInputStream对象
        try {
            FileInputStream fis=new FileInputStream("imooc.txt");
            //int n=fis.read();
            int n=0;
            //while(n!=-1){
                //System.out.print((char)n);
                //n=fis.read();
            //}
            while((n=fis.read())!=-1){
                System.out.print((char)n);
            }
            fis.close();
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch(IOException e){
            e.printStackTrace();
        }
    }

}

FileInputStream:
从文件系统中的某个文件中获得输入字节
用于读取诸如图像之类的原始字节流

public in read(); //从输入流中读取一个字节
public in read(byte[] b);//从输入流中将最多b.length个字节的数据读入到一个byte数组中
public in read(byte[] b,int off,int len);//从输入流中将最多len个字节的数据读入到一个byte数组中
public void close();//关闭流,释放资源

FileOutputStream:

public void write(int b);//将指定字节写入此文件输出流
public void write(byte[] b);//将b.length个字节从指定的数组在写入到此输出流
public void write(byte[] b,int off,int len);//将指定的byte数组中从偏移量off开始的len个字节写入到此输出流
public void close();//关闭流,释放资源
public class FileInputDemo2 {

    public static void main(String[] args) {
        // 创建一个FileInputStream对象
        try {
            FileInputStream fis = new FileInputStream("imooc.txt");
            byte[] b=new byte[100];
            fis.read(b,0,5);
            System.out.println(new String(b));
            fis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

3、字节流

缓冲流
BufferedInputStrem:缓冲输入流
BufferedOutputStrem:缓冲输出流

Demo

public class BufferedDemo {

    public static void main(String[] args) {
        try {
            FileOutputStream fos=new FileOutputStream("imooc.txt");
            BufferedOutputStream bos=new BufferedOutputStream(fos);
            FileInputStream fis=new FileInputStream("imooc.txt");
            BufferedInputStream bis=new BufferedInputStream(fis);
            long startTime=System.currentTimeMillis();
            bos.write(50);
            bos.write('a');
            bos.flush();
            System.out.println(bis.read());
            System.out.println((char)bis.read());
            long endTime=System.currentTimeMillis();
            System.out.println(endTime-startTime);
            fos.close();
            bos.close();
            fis.close();
            bis.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

4、字符流

5、对象的序列化和反序列化

页码: 1 2 3

留言