String
Java中""引起来的,都是这个类的实例,称为字符串
字符串定义后是一个常量,值不可更改。
像String str = "qwe",首先是在字符串常量池寻找是否存在qwe,如果不存在则创建一个qwe,然后将qwe地址值赋给str
可变字符串(StringBuilder类和StringBuffer类)
StringBuilder用于表示可变字符串的一个类,是非线程安全的,建议在单线程环境下使用,效率略高于StringBuffer。
StringBuffer用于表示可变字符串的一个类,是线程安全的,建议在多线程环境下使用,效率略低于StringBuilder。
可变字符串采用toString()方法转化为String,用于比较值是否相等
因为String类在创建对象时,值不可变。在频繁更新值时就是在内存中频繁创建对象,效率很低。这时就需要可变字符串
Date通常用于获取系统当前时间
Date date = new Date()
System.out.println(date)
//结果(系统时间)
//星期 月份 日期 时分秒 时区 年
Thu Jul 28 09:54:37 CST 2022
SimpleDateFormat是用于格式化日期时间
Date date = new Date();
//格式化日期模板
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sf.format(date));
Calendar用于处理日期细节的类,通过静态方法Calendar.getInstance()获取该类的实例
Calendar c = Calendar.getInstance();
异常在程序中以对象的形式存在。当代码执行时出现异常,虚拟机会自动创建一个相应的异常对象,如果没有对该异常进行处理,就会导致程序中断。
Exception异常分为运行时异常和非运行时异常:
常见运行时异常:
NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException、InputMismatchException等
常见非运行时异常:
IOException、SQLException、FileNotFoundException
异常的处理:
1.方式一:try-catch-finally语句
try{
//可能出现异常的代码
}catch(异常类 异常对象){
//如果出现异常对象,且与catch中的异常类匹配,则执行
}catch(异常类 异常对象){
//后续的catch中的异常类型只能与之前的异常类型同级或是父类 //如果出现异常对象,且与catch中的异常类匹配,则执行
}finally{
//无论程序是否会抛出异常,一定要执行的代码
}
2.方式二:throws关键字
这种方式,可以让非运行时异常通过编译,定义方法的时候,声明可能抛出的异常。
public class Test{
public void fun() throws InterruptException{
//在定义方法时,声明可能抛出的异常类型 //如果直接写这句话,会报错,因为sleep()方法会抛出一个非运行时异常,必须要处理
Thread.sleep(5000);
}
}

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文件
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");
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(套接字)对象,表示网络中的某个端点。
进程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能学习到更多的知识,巩固原本的基础