Java基础核心知识汇总(个人笔记)

Java基础篇

JDK与JRE的区别

JDK:Java开发工具包,也叫JavaSDK,包含JRE拥有的一切,还有编译器(javac),能够创建和编译Java程序
JRE:Java运行环境,主要包含一些Java类库以及JVM,能够运行Java程序

Java语言特点

“一次编译,到处运行”:并不是说Java语言跨平台,而是JVM可以安装在不同的操作系统上,本身JVM也存在JRE中,所以与其说Java语言跨平台,
倒不如说是JVM跨平台
Java语言有垃圾回收机制,不用开发人员手动回收,这是较其他语言一个明显的特征

equals与==的区别

对于基本数据类型来说,==比较的是值。对于引用数据类型来说,==比较的是对象的内存地址
因为 Java 只有值传递,所以,对于 ==来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只
是引用类型变量存的值是对象的地址。
equals() 作用不能用于判断基本数据类型的变量,只能用来判断两个对象是否相等。equals()方法存在于Object类中,而Object类是所有类的直接或间接父类。equals分为两种情况
1.equals未覆盖Object父类,统一使用父类的equals,比较的是两个对象的内存地址是否相等

public boolean equals(Object obj) {
        return (this == obj);
    }

2.equals覆盖Object父类,根据定义的equals实现

重载和重写的区别

同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理(方法名必须一致,参数不同,参数个数、顺序、类型等不同)
重写发生在运行期,是子类对父类的允许访问的方法的实现过程进行重新编写,子类对父类方法的重新改造,外部样子不能改变,内部逻辑可以改变(方法签名,返回类型必须与父类一致),比如常见的对equals()重写

Java集合框架

在这里插入图片描述
Java集合框架核心分为两大类:CollectionMap;其中Collection是单列集合,存储一个一个的对象,并继承Iterable接口。Map是双列集合,存储一对一对的数据(K-V)键值对。不过我们重点更关注它们的具体实现类,因为在开发中十分常用。

  • ArrayList
    线程不安全,效率高;底层使用Object[]数组存储数据
  • LinkeArrayList
    对于频繁插入,删除操作,效率比ArrayList高,底层使用双向链表存储
  • Vector
    Vector作为List最老的实现类(Jdk1.0出现),线程安全,效率低;底层使用Object[]数组存储数据

IO流以及原理

IO:Input/Output(输入/输出),数据的传输。常见的IO技术有:文件数据读取写入,网络通讯,Jdk直接提供IO抽象类位于java.io包下,核心为以下4个:InputStream/OutputStream(字节流),Reader/Writer(字符流),Java程序中操作文件流主要有以下几个步骤:
1.实例化File对象
2.根据File对象创建文件流
3.文件流的读写
4.关闭流

  • 字节流
    通常适用于处理图片,视频(jpg,avi,.mp3)等文件的数据操作
/**
     * 字节流图片读写
     */
    private static void testInputAndOutput() {
        FileInputStream fr=null;
        FileOutputStream fw=null;
        try {
            //1.实例化File对象
            File f1 = new File("E:\\code\\myjava\\java-collection\\aa.jpg");
            File f2 = new File("E:\\code\\myjava\\java-collection\\bb.jpg");

            //2.根据File对象创建文件流
            fr = new FileInputStream(f1);
            fw = new FileOutputStream(f2);

            //3.文件流的读写
            int len;
            byte[] buf = new byte[1024];
            while ((len = fr.read(buf)) != -1) {
                fw.write(buf, 0, len);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.关闭流
            try {
                fr.close();
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
  • 字符流
    通常适用于处理文本文件(.txt,.java,cpp)的数据读写
/**
     * 字符流文件读写
     */
    private static void testReaderAndWriter() {
        FileReader fr=null;
        FileWriter fw=null;
        try {
            //1.实例化File对象
            File f1 = new File("E:\\code\\myjava\\java-collection\\a.txt");
            File f2 = new File("E:\\code\\myjava\\java-collection\\a1.txt");

            //2.根据File对象创建文件流
            fr = new FileReader(f1);
            fw = new FileWriter(f2, true);

            //3.文件流的读写
            int len;
            char[] buf = new char[10];
            while ((len = fr.read(buf)) != -1) {
                fw.write(buf, 0, len);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.关闭流
            try {
                fr.close();
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
缓冲流的使用

本质也跟上面的字符流/字节流,提供文件的读写。主要是"包裹"在原有流上,能够提高读写效率,内部多维护了一个缓冲区。实际开发中推荐优先使用缓冲流,包括有:BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter。以BufferedInputStream为例,默认的缓冲区大小为8192字节:

	//构造BufferedInputStream
	public BufferedInputStream(InputStream in) {
        this(in, DEFAULT_BUFFER_SIZE);
    }
    //根据默认的缓冲区大小进行实例化
	public BufferedInputStream(InputStream in, int size) {
        super(in);
        if (size <= 0) {
            throw new IllegalArgumentException("Buffer size <= 0");
        }
        buf = new byte[size];
    }

缓冲流实现文件的拷贝


    /**
     * 缓冲字节流
     */
    public static void testBufferedInOut(){

        FileInputStream fr=null;
        FileOutputStream fw=null;

        BufferedInputStream bi=null;
        BufferedOutputStream bo=null;
        try {
            //1.实例化File对象
            File f1 = new File("E:\\code\\myjava\\java-collection\\aa.jpg");
            File f2 = new File("E:\\code\\myjava\\java-collection\\cc.jpg");

            //2.根据File对象创建文件流
            fr = new FileInputStream(f1);
            fw = new FileOutputStream(f2);

            bi=new BufferedInputStream(fr);
            bo=new BufferedOutputStream(fw);

            //3.文件流的读写
            int len;
            byte[] buf = new byte[1024];
            while ((len = bi.read(buf)) != -1) {
                bo.write(buf, 0, len);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.关闭流,使用缓冲流,关闭外层流即可
            try {
                    bi.close();
                    bo.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

更新中…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值