• java高级学习总结


    String与可变字符串

    String
    Java中""引起来的,都是这个类的实例,称为字符串
    字符串定义后是一个常量,值不可更改。
    String str = "qwe",首先是在字符串常量池寻找是否存在qwe,如果不存在则创建一个qwe,然后将qwe地址值赋给str

    可变字符串(StringBuilder类和StringBuffer类)

    StringBuilder用于表示可变字符串的一个类,是非线程安全的,建议在单线程环境下使用,效率略高于StringBuffer。
    StringBuffer用于表示可变字符串的一个类,是线程安全的,建议在多线程环境下使用,效率略低于StringBuilder。

    可变字符串采用toString()方法转化为String,用于比较值是否相等
    因为String类在创建对象时,值不可变。在频繁更新值时就是在内存中频繁创建对象,效率很低。这时就需要可变字符串

    Date类、SimpleDateFormat类、Calendar类

    Date通常用于获取系统当前时间

        Date date = new Date()
        System.out.println(date)
        //结果(系统时间)
        //星期 月份 日期 时分秒 时区 年
        Thu Jul 28 09:54:37 CST 2022
    
    • 1
    • 2
    • 3
    • 4
    • 5

    SimpleDateFormat是用于格式化日期时间

    Date date = new Date();
    //格式化日期模板
    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println(sf.format(date));
    
    • 1
    • 2
    • 3
    • 4

    Calendar用于处理日期细节的类,通过静态方法Calendar.getInstance()获取该类的实例

    Calendar c = Calendar.getInstance();
    
    • 1

    异常

    异常在程序中以对象的形式存在。当代码执行时出现异常,虚拟机会自动创建一个相应的异常对象,如果没有对该异常进行处理,就会导致程序中断。
    Exception异常分为运行时异常非运行时异常

    • 运行时异常:如果一个异常属于RuntimeException异常类的子类,称为运行时异常,可以通过编译,运行时可能抛出
      异常对象。
    • 非运行时异常:无法通过编译,必须要处理后才能编译运行。

    常见运行时异常:

    NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException、InputMismatchException等

    常见非运行时异常:

    IOException、SQLException、FileNotFoundException

    异常的处理:

    1.方式一:try-catch-finally语句

    try{
    //可能出现异常的代码 
    }catch(异常类 异常对象){ 
    //如果出现异常对象,且与catch中的异常类匹配,则执行 
    }catch(异常类 异常对象){
    //后续的catch中的异常类型只能与之前的异常类型同级或是父类 //如果出现异常对象,且与catch中的异常类匹配,则执行 
    }finally{ 
    //无论程序是否会抛出异常,一定要执行的代码 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.方式二:throws关键字

    这种方式,可以让非运行时异常通过编译,定义方法的时候,声明可能抛出的异常。

    public class Test{ 
    	public void fun() throws InterruptException{
    	//在定义方法时,声明可能抛出的异常类型 //如果直接写这句话,会报错,因为sleep()方法会抛出一个非运行时异常,必须要处理 		  
    	Thread.sleep(5000); 
    	} 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    集合

    在这里插入图片描述
    List接口(有序可重复的):ArrayList和LinkedList

    • ArrayList:采用数组实现的集合,可以通过索引访问元素、可以改变集合大小。如果要在其中插入或删除元素时,会影响其余元素。该集合查询效率高、增删中间元素效率低。该集合对象中保存的元素,都是引用类型(对象的内存地址)。即使保存了123,其实不是保存的int类型的123,而是Integer类型的123.

    • LinkedList:采用双向链表实现的集合,集合中保存的元素可以称为节点,每个节点保存了其前一个和后一个节点的地址
      在这里插入图片描述
      Set接口(无序不重复):HashSet和TreeSet

    • HashSet:采用哈希表实现元素不能重复,无序保存,允许保存null
      本质是一个HashMap对象,调用add()方法,实际调用的也是HashMap中的put()方法,参数作为put()方法的键,new Obejct()作为put()方法的值

    • TreeSet:特殊的Set实现类,数据可以有序保存,可以重复,不能添加null元素;采用红黑树(自平衡二叉树)实现的集合;只能添加同一种类型的对象且实现了Comparable接口的对象;添加的元素可以自动排序;compareTo方法的返回值决定了能否添加新元素和新元素的位置

    File文件、IO流

    File文件
    Java中可以将本地硬盘中的文件(文件和目录)以对象的形式表示。
    就能通过Java代码对本地文件进行读取或操作。

    //创建一个File对象 new File(String pathName); 
    File file1 = new File("d:/test"); 
    //创建一个File对象 new File(String parent,String child); 
    File file2 = new File("D:\\test","test.txt"); 
    //创建一个File对象 new File(File parent,String child); 
    File parent = new File("D:/test"); 
    File file3 = new File(parent, "test.txt");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    IO流

    InputStream字节输入流
    FileInputStream文件字节输入流 ObjectInputStream对象字节输入流(序列化)
    OutputStream字节输出流
    FileOutputStream文件字节输出流 ObjectOutputStream对象字节输出流(反序列化)
    Writer字符输出流
    FileWriter文件字符输出流 BufferedWriter缓冲字符输出流(包装流) OutputStreamWriter字节输出
    流转换为字符输出流(转换流)
    Reader字符输入流
    FileReader文件字符输入流 BuffedredReader缓冲字符输入流(包装流) InputStreamReader字节输入
    流转换为字符输入流(转换流)

    按方向分类
    输入流:InputStream、Reader
    作用:将硬盘中的数据读取到内存中
    输出流:OutputStream、Wrtiter
    作用:将内存中的数据写入到硬盘中
    按类型分
    字节流:InputStream、OutputStream
    作用:适用于非文本类型,如图片、文件等的读写
    常用构造方法 说明
    FileInputStream(String pathName) 根据文件名创建文件字节输入流对象
    FileInputStream(File file) 根据文件对象创建文件字节输入流对象
    常用方法 作用
    read() 读取一个字节。返回读取到的字节本身。
    read(byte[] b) 按字节数组读取。返回读取到的字节数量。读取到的内容保存在了字节数组中
    close() 关闭流对象
    字符流:Reader、Writer
    作用:适用于文本类型,尤值txt格式文件的读写
    如要将硬盘中某个txt文件中的字符读取到程序中,使用Reader
    如要将硬盘中的某个图片读取到程序中,使用InputStream

    网络编程

    InetAddress类:表示IP对象的一个类
    Socket类和ServerSocket类:都属于Socket(套接字)对象,表示网络中的某个端点。

    • ServerSocket指服务器端
    • Socket指普通端点

    进程和线程

    进程Process
    进程就是操作系统中执行的程序。一个进程就是一个执行的程序实体。
    每个运行中的进程,都有属于它独立的内存空间。各个进程之间互不影响。
    线程Thread
    线程是一个进程中的执行单元,一个进程中可以有多个线程。
    多线程之间,可以访问同一个进程中的资源。
    每个线程都有一个独立的栈空间。这些线程所在的栈空间位于同一个进程空间中。
    多线程
    如果一个进程中,同时在执行着多个线程,就称为多线程。

    并行和并发

    并行

    多个进程各自执行,称为并行。

    并发

    多个线程同时执行,称为并发。

    同步和异步

    同步

    所有的任务排队执行,称为同步执行。

    异步

    在执行任务A的同时,执行任务B,称为异步执行。

    线程的生命周期

    线程的初始化到终止的整个过程,称为线程的生命周期

    新生状态

    当线程对象被实例化后,就进入了新生状态。new Thread()

    就绪状态

    当某个线程对象调用了start()方法后,就进入了就绪状态。
    在该状态下,线程对象不会做任何事情,只是在等待CPU调用。

    运行状态

    当某个线程对象得到运行的机会后,则进入运行状态,开始执行run()方法。
    不会等待run()方法执行完毕,只要run()方法调用后,该线程就会再进入就绪状态。这时其他线程就有可能穿插其中。

    阻塞状态

    如果某个线程遇到了sleep()方法或wait()等方法时,就会进入阻塞状态。
    sleep()方法会在一段时间后自动让线程重新就绪。
    wait()方法只有在被调用notify()或notifyAll()方法唤醒后才能进入就绪状态。

    终止状态

    当某个线程的run()方法中所有内容都执行完,就会进入终止状态,意味着该线程的使命已经完成。

    总结

    java高级学习了2周,相比于前面2阶段的学习。java高级学习了很多知识,各种各样。原本在大二的时候java只是一门选修课,学习的就是java基础和面向对象。java高级基本没啥基础,对于我来说这些都是新知识,感觉需要掌握起来还是学要时间的。像在接触集合的时候,学习到了四种集合,每个集合各有各的特点,有属于自己的方法。想掌握还需要多多练习。在学习文件操作的时候,对于文件字节输入流和字节输出流,就出现了很多错误,经常把方向记错了。还有在多线程访问同一资源时,需要注意资源被异步处理,我们要让线程同步进行,防止程序结果出现错误,这里有个死锁面试题需要了解。java高级学习告一段落,希望后面html,css , js能学习到更多的知识,巩固原本的基础

  • 相关阅读:
    基于 KubeSphere 的分级管理实践
    Linux网络编程-网络基础1
    Linux知识点 -- HTTPS协议
    java计算机毕业设计vue校园菜鸟驿站管理系统MyBatis+系统+LW文档+源码+调试部署
    html:元素类型
    【原创】一切不谈考核的管理都是扯淡!
    Linux基础命令汇总
    【NODE.JS】多进程架构(一)——基本概念
    [开源精品] C#.NET im 聊天通讯架构设计 -- FreeIM 支持集群、职责分明、高性能
    第一章 网络基础知识
  • 原文地址:https://blog.csdn.net/qq_55691662/article/details/126170779