![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java学习
从新来过,根据廖老师的课程,记录学习笔记
_hello world
这个作者很懒,什么都没留下…
展开
-
15.1 Java之JDBC
Mysql在使用JDBC之前要先安装Mysql,这里不详说如何安装。安装配置完成之后,打开cmd,输入mysql -V,若有版本号则安装成功。JDBC基础导入jar包,Maven的pom.xml初始化驱动:Class.forName("com.mysql.jdbc.Driver");将该类加载到JVM中。建立连接:三个参数:数据库url,用户名,密码//数据库url:"jdbc:mysql://本地连接:端口号/数据库名称?数据格式" Connection connection原创 2020-07-16 09:51:50 · 113 阅读 · 0 评论 -
14.1 XML基础
XML简介XML(eXtensible Markup Language)可扩展标记语言。主要用于数据的存储和传输。特点: - 纯文本,使用UTF-8的编码模式 - 可嵌套,适合表示结构化数据。XML中有固定的格式,XML首行为:<?xml version="1.0"?>XML的格式分为两种: - 格式正确,是指格式是正确的元素需正确嵌套,如:`<isbn lang="CN">1234567</isbn>` - 合法,是指格式正确且可原创 2020-07-14 18:58:48 · 112 阅读 · 0 评论 -
13.1Java之网络编程
简介网络编程:是指编写运行在多个设备上的程序,这些设备通过网络连接。网络编程三要素:协议:TCP、UDP。这两个新协议最重要的区别是:TCP是可靠的,有连接的。UDP是不可靠的,无连接的。IP地址:分为IPV4和IPV6两种。本地IP为127.0.0.1或localhost端口号:用来标识设备中的进程(0~65535,1024之前的被系统分配因此不能使用)java.net包中包含了解决通信问题的类和接口,从而不用关注通信细节。TCP编程分为客户端和服务端:客户端:Java中提供了ja原创 2020-07-13 20:20:51 · 107 阅读 · 0 评论 -
12.1 Maven基础
Maven的作用相同的目录结构:Maven管理下的Java项目有相同的目录结构。统一的jar包:Maven下有专门管理jar包的仓库,需要时引用即可。Maven下载:(2020/7/13)下载Maven配置:解压到某个目录,复制D:\Maven\apache-maven-3.6.3-bin\apache-maven-3.6.3\bin此电脑→属性→高级系统设置→环境变量→系统变量→Path→最前边加上:D:\Maven\apache-maven-3.6.3-bin\apache-maven转载 2020-07-13 12:56:04 · 120 阅读 · 0 评论 -
11.10Java多线程之线程池
Java中虽然创建和销毁线程方便,但是特别浪费时间 ,因此出现了线程池。线程池内部维护了多个线程,当没有任务时就处于等待状态,出现新任务就分配一个空闲线程执行,执行完成继续等待下一次调用。若所有线程处于忙碌,则该任务要么等待,要么创建新的线程。Java中线程池的接口为:ExecutorService实现类为:FixedThreadPool:线程数固定的线程池;CachedThreadPool:线程数根据任务动态调整的线程池;SingleThreadExecutor:仅单线程执行的线程池。i原创 2020-07-11 15:37:30 · 80 阅读 · 0 评论 -
11.9Java多线程之ReentrantLock锁
ReentrantLock锁时Java5开始引入的java.util.concurrent.locks包中提供的一个锁。代替了synchronized加锁:public class Counter { private final Lock lock = new ReentrantLock(); private int count; public void add(int n) { lock.lock();//加 try {原创 2020-07-11 11:30:27 · 106 阅读 · 0 评论 -
11.8Java多线程之线程的等待和唤醒
Java中当一个任务队列为空时,线程无任务可执行,需要进入等待状态。class TaskQueue { Queue<String> queue = new LinkedList<>(); public synchronized void addTask(String s) { this.queue.add(s); this.notifyAll(); } public synchronized String getT原创 2020-07-11 11:23:55 · 171 阅读 · 0 评论 -
11.7Java多线程之可重入锁和死锁
可重入锁:public class Counter { private int count = 0; public synchronized void add(int n) { if (n < 0) { dec(-n); } else { count += n; } } public synchronized void dec(int n) { coun原创 2020-07-10 16:12:51 · 114 阅读 · 0 评论 -
11.6Java多线程之线程同步
Java中线程同步是利用了加锁解锁方式实现的。加锁解锁之间的代码块为临界区,任何时候临界区只能有一个线程执行。Java中使用了一个关键字对一个对象加锁:synchronized以下例子证明了锁的应用:package MyThread;public class MyLock { public static void main(String[] args) throws Exception { Thread add = new AddThread(); T原创 2020-07-10 15:25:28 · 87 阅读 · 0 评论 -
11.5Java多线程之守护线程
守护线程:为其他线程服务的线程。在JVM进程退出时,不必关心守护线程是否结束。创建守护线程Thread t = new MyThread();t.setDaemon(true);t.start()使用setDaemon()方法。守护线程不能持有需要关闭的资源。...原创 2020-07-10 11:35:58 · 84 阅读 · 0 评论 -
11.4Java多线程之中断线程
中断线程有两个方法:方法一:使用Thread实例的interrupt()方法。public class Main { public static void main(String[] args) throws InterruptedException { Thread t = new MyThread(); t.start(); Thread.sleep(1000); t.interrupt(); // 中断t线程原创 2020-07-10 11:26:45 · 93 阅读 · 0 评论 -
11.3Java多线程之线程的状态
线程有以下的状态:New:新创建的线程,尚未执行;Runnable:运行中的线程,正在执行run()方法的Java代码;Blocked:运行中的线程,因为某些操作被阻塞而挂起;Waiting:运行中的线程,因为某些操作在等待中;Timed Waiting:运行中的线程,因为执行sleep()方法正在计时等待;Terminated:线程已终止,因为run()方法执行完毕。线程终止的原因有三种:正常终止:run()方法执行完毕意外终止:run()方法执行捕获异常,被迫终止。强制终止:对原创 2020-07-10 10:43:44 · 80 阅读 · 0 评论 -
11.2Java多线程之新建线程
多线程的创建:方法一:public class Main { public static void main(String[] args) { Thread t = new MyThread(); t.start(); // 启动新线程 }}class MyThread extends Thread { @Override public void run() { System.out.println("start new原创 2020-07-10 10:17:40 · 68 阅读 · 0 评论 -
11.1Java多线程基础篇
进程:我们把一个任务称为一个进程。例如:浏览器、视频播放器、word等都是进程。线程:进程中分很多子任务,这些子任务就是线程。例如:word打字过程中,进行着拼写检查。进程线程关系:进程可以包含多个线程,但至少有一个线程。实现多任务的方式:多进程模式(每个进程只有一个线程)多线程模式(一个进程有多个线程)多进程+多线程模式(复杂度最高)在具体实现时,要考虑到进程和线程的特点。多进程的缺点:创建进程开销更大。进程间通信比线程慢,线程间通信是读写同一个变量。多进程的优点:稳定性高,原创 2020-07-10 09:47:49 · 69 阅读 · 0 评论 -
10.1Java之正则表达式
正则表达式:是用字符串描述的一个匹配规则,使用正则表达式可以快速判断给定的字符串是否符合匹配规则。(java.util.regex)使用str.matches(String re1),返回值为boolean类型。转义字符:正则表达式在Java中是一个字符串,因此,在表达“\”时,需要用到“\\”。在正则表达式中,表示一个特殊字符需要用到转义字符“\”。例“&”在正则表达式中为“&”。Java中的正则表达式为“\&”。匹配任意字符在Java中,正则表达式用“.”表示任意字符原创 2020-07-09 16:57:32 · 126 阅读 · 0 评论 -
9.1Java日期与时间
Epoch Time又称为时间戳,通常是用long表示的毫秒数long t = 1574208900123L;转换成北京时间就是2019-11-20T8:15:00.123。要获取当前时间戳可以使用System.currentTimeMillis()。Java新旧标准库一套定义在java.util这个包里面,主要包括Date、Calendar和TimeZone这几个类;一套新的API是在Java 8引入的,定义在java.time这个包里面,主要包括LocalDateTime、ZonDat原创 2020-07-09 10:10:34 · 173 阅读 · 0 评论 -
8.6JavaI/O流之Reader和Writer
ReaderReader和InputStream是同一个性质,InputStream是一个字节流,以byte为单位,而Reader是字符流,以char为单位。读取字符的方法也是int read(char[] c);需要注意的是Reader由于是字符流,因此可读性较高,需要更高的编码模式,在创建时需注明。FileReader:FileReader是Reader的一个子类,它可以打开文件获取Reader。public static void main(String[] args) throws IOE原创 2020-07-08 18:02:38 · 111 阅读 · 0 评论 -
8.5JavaI/O流之Zip
ZipInputStreamZipInputStream是一种FilterInputStream,它可以直接读取Zip包的内容。读取Zip包:try (ZipInputStream zip = new ZipInputStream(new FileInputStream(...))) { ZipEntry entry = null; while ((entry = zip.getNextEntry()) != null) { String name = entry.ge原创 2020-07-08 17:00:48 · 95 阅读 · 0 评论 -
8.4JavaI/O流之Filter模式
Filter(装饰者:Decorator)模式用InputStream做例子,该InputStream需要更多的功能,而更多的功能则需要新建一个InputStream的子类来继承inputStream,在此类上添加另一个功能,则需要继续继承新建,以此往复不断新建,会导致代码复杂度变大,子类太多,为解决这种问题,产生了Filter模式。InputStream file = new FileInputStream("test.gz");//确定数据源InputStream buffered = new B原创 2020-07-08 09:47:07 · 116 阅读 · 0 评论 -
8.3JavaI/O流之OutputStream
123原创 2020-07-08 08:32:10 · 94 阅读 · 0 评论 -
8.2javaI/O流之InputStream
输入流(InputStream)InputStream不是一个接口,而是一个抽象类,其中最重要的方法是int read();方法:这个方法会读取输入流的下一个字节,并返回字节表示的int值。若返回-1,则表示读到末尾。FileInputStream是InputStream的一个子类,其实现了readFile()方法。在操作InputStream和OutputStream的过程中,需要及时释放不需要的资源,调用Close方法。 在读取过程中如果出现错误,会导致无法运行close方法,因此,在做IO操原创 2020-07-07 19:28:08 · 128 阅读 · 0 评论 -
8.1JavaI/O流之File对象
文件操作:Java提供了File对象来操作文件:File f = new File("C:\\Windows\\notepad.exe");在传入文件路径时,可以传入的是绝对路径和相对路径绝对路径:是以根目录为开头的完整路径。(window使用\作为文件分隔符,java中使用需要\\。Linux平台需要使用/作为分隔符。)相对路径:是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。// 假设当前目录是C:\DocsFile f1 = new File("sub\\javac"原创 2020-07-07 16:43:50 · 111 阅读 · 0 评论 -
7.9java集合之Collections
Collections:是JDK提供的工具类,位于java.util包中。(注意不是Collection,多加了个s)Collections可以用作很多地方,Collections提供的方法都是静态的:创建空集合:创建空List:List emptyList()创建空Map:Map<K, V> emptyMap()创建空Set:Set emptySet()创建单元素:创建一个元素的List:List singletonList(T o)创建一个元素的Map:Map<K原创 2020-07-07 11:46:43 · 86 阅读 · 0 评论 -
7.9java集合之栈(Stack)
Stack(栈)栈的特点是:后进先出(LIFO:Last In First Out)我们知道队列的两端是敞开的,而栈的一端是封死的。因此栈才可以做到后进先出,只能不断地往Stack中压入(push)元素,最后进去的必须最早弹出(pop)来。Stack实现的方法:把元素压栈:push(E);把栈顶的元素“弹出”:pop(E);取栈顶元素但不弹出:peek(E)。在java中没有Stack的接口,是由于历史原因。因此我们可以将Deque作为Stack使用。在使用时,要使用Stack的方法,原创 2020-07-07 11:27:24 · 116 阅读 · 0 评论 -
7.8java集合之队列
Queue(队列)队列是一种常用的集合,实现了先进先出(FIFO:First In First Out)。和list区别在于,list可以实现任意位置添加删除,而队列只能在尾部添加,首部取出。java标准库中Queue定义了几个方法:int size():获取队列长度;boolean add(E)/boolean offer(E):添加元素到队尾;E remove()/E poll():获取队首元素并从队列中删除;E element()/E peek():获取队首元素但并不从队列中删除。原创 2020-07-07 10:55:06 · 278 阅读 · 0 评论 -
7.7Set集合
Set集合用于存储不重复的元素,且set集合为了满足不重复都特点,需要实现equals和hashCode方法。Set提供的方法:将元素添加进Set:boolean add(E e)将元素从Set删除:boolean remove(Object e)判断是否包含元素:boolean contains(Object e)例:public class Main { public static void main(String[] args) { Set<String&原创 2020-07-06 11:25:49 · 288 阅读 · 0 评论 -
7.6集合Map之EnumMap和TreeMap
EnumMapkey的对象类型是enum(枚举)类型,则java集合库提供了EnumMap。可以根据enum直接定位到内部数组的索引,不需要计算hashCode,效率最高且没有空间浪费。例:public class Main { public static void main(String[] args) { Map<DayOfWeek, String> map = new EnumMap<>(DayOfWeek.class); map原创 2020-07-06 10:53:16 · 158 阅读 · 0 评论 -
7.5覆写hashCode()方法
在Map中,key是通过计算得到索引值,再通过索引获取value的值。那么在Map中key值是如何计算的?Object类中有equals()方法和hashCode()方法,equals()方法是判断两个实例是否相等,而hashCode()是计算hash码。因此,想正确使用Map,需要覆写两个方法,equals()和hashCode()方法。hashCode()方法:自己编写的hashCode()int hashCode() { int h = 0; h = 31 *原创 2020-07-06 09:57:08 · 296 阅读 · 0 评论 -
7.4java集合之Map
Map集合:通过一个键去查询对应的值。一个key对应一个value。Map基本用法(HashMap为例):创建: Map<key, vlaue> map = new HashMap<>();传值:map.put(key,value);取值:map.get(key);//返回value的类型查询某个key值是否存在:boolean containsKey(K key)map不允许key值重复,但可以value值重复。遍历map:可以用Map.keySet(原创 2020-07-05 17:14:38 · 94 阅读 · 0 评论 -
7.3覆写equals()方法
List内部提供了contains()方法:该方法用来判断list内部是否包含某个指定元素。因此我们可以这样用:public class Main { public static void main(String[] args) { List<String> list = List.of("A", "B", "C"); System.out.println(list.contains(new String("C"))); // true or fals原创 2020-07-05 16:18:27 · 166 阅读 · 0 评论 -
7.2java集合之List
ListList是最基础的一种集合:它是一种有序列表List和数组相似,内部安装放入元素的先后顺序排列,可以通过索引获取到元素,索引从0开始。实现List接口的集合有两个:ArrayList:底层由数组实现,数组支持随机访问, 查询速度快, 增删元素慢LinkedList:底层由链表实现,链表支持顺序访问, 查询速度慢, 增删元素快List<E>接口的方法:void add(E e):在末尾添加元素void add(int index, E e):在指定索引添加元素int原创 2020-07-05 15:29:11 · 166 阅读 · 0 评论 -
7.1集合简介
概念:集合是由若干个确定的元素所构成的整体。如果一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合。在java中数组就是一个集合,但数组有其局限性:数组初始化后大小不可变。数组只能按照索引顺序存取。因此我们需要不同类型的集合来处理不同的数据。Collectionjava.util包提供了集合类:Collection,它是除Map外所有集合的根接口。java.util包主要提供了:List:一种有序列表的集合,例如,按索引排列的Stu原创 2020-07-05 10:49:58 · 88 阅读 · 0 评论 -
6.1java之泛型基本用法
什么是泛型:泛型就是编写模板代码来适应任意类型。下面做个简单的例子:java中一个ArrayList数组中能够存放object类型的数组,如果用其转存String类会有两个缺点:需要强转不方便易出错。Arraylist的代码public class ArrayList {//可以看到,在数组中存放的是Object类型,因此可以接收任意类型,但用String类型获取必须强转。 private Object[] array; private int size; publ原创 2020-07-05 08:39:43 · 99 阅读 · 0 评论 -
5.1java中的注解
分类由编译器使用的注解:此类注解不会进入.class文件,被编译后就被扔掉了(SOURCE)- @Override:让编译器检查该方法是否正确地实现了覆写;- @SuppressWarnings:告诉编译器忽略此处代码产生的警告。由工具处理.class文件使用的注解:这类注解一般不会自己处理,而是一些工具自动加载(CLASS)最常用的注解:在程序运行期间能够读取的注解,加载后存在在JVM中。(RUNTIME)根据以上分类,因此我们经常使用的将是RUNTIME类型的注,并且学习的也是。大部分原创 2020-07-05 07:41:30 · 102 阅读 · 0 评论 -
4.1java反射
反射的作用:反射是为了解决在运行期,对某个实例一无所知的情况下,如何调用其方法。反射的目的:获取一个class对应的Class实例。反射的实现:通过一个class的静态变量class获取:Class cls = String.class;若有实例变量,可用实例变量的.getClass()方法获取:String s = "Hello";Class cls = s.getClass();若知道class的完整类名,通过Class.forName()获取:Class cls = Class.原创 2020-07-04 16:25:08 · 74 阅读 · 0 评论 -
3.3java中的日志
java内置日志(JDK Logging)java中内置了日志包(java.util.logging),例:// loggingimport java.util.logging.Level;import java.util.logging.Logger;public class Hello { public static void main(String[] args) { Logger logger = Logger.getGlobal(); logger原创 2020-07-03 17:02:24 · 2676 阅读 · 0 评论 -
3.2异常中的其他情况
断言(Assertion)断言是程序调试的方式,java中使用assert关键字实现断言。要执行断言需要启动断言,给java虚拟机传递-enableassertions参数启用断言。例:public static void main(String[] args) { double x = Math.abs(-123.45); assert x >= 0; System.out.println(x);}当断言没有达到预期,则会抛出异错误AssertionError原创 2020-07-03 11:47:52 · 75 阅读 · 0 评论 -
3.1java的异常
前言:java程序运行中难免会有异常出现,一些由用户造成,一些由随机因素造成,为了处理这些异常,java内置了一套遗产机制。java中的异常是class借鉴图片:由图知其有两种异常:第一种是:Error,表示严重的错误,程序对此无能无力。第二种是:Exception,运行的错误,表示可以被捕获并处理。我们经常使用的异常处理就是ExceptionException分为两种:RuntimeException以及它的子类;非RuntimeException(包括IOException、Re原创 2020-07-03 09:06:28 · 96 阅读 · 0 评论 -
2.2.7BigInteger类和BigDecimal类
很小概率的情况,long类型可能会出现不够用,因此便诞生了BigInteger这个类,此类继承自Number。此类没有范围限制,但缺点是较long速度慢。定义和例子:BigInteger i1 = new BigInteger("1234567890");BigInteger i2 = new BigInteger("12345678901234567890");BigInteger sum = i1.add(i2); // 12345678902469135780BigInteger和其他的原创 2020-07-02 15:49:38 · 71 阅读 · 0 评论 -
2.2.6枚举类和记录类
枚举类什么是枚举?是列出某些有穷序列集的所有成员。举例:表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。java中的枚举:为了让编译器自动检查某个值是否在枚举的集合内,产生了枚举的定义,可以用enum来定义枚举。public class Main { public static void main(String[] args) { Weekday day = Weekday.SUN;原创 2020-07-02 15:36:37 · 106 阅读 · 0 评论