Java
elkluh
简单,容易,一看就会。
展开
-
Mybatis入门
快速入门程序。原创 2024-04-17 21:00:42 · 109 阅读 · 0 评论 -
【Java】解决线程安全问题:使用同步方法
解决线程安全问题:使用同步方法卖票案例出现了线程安全问题,卖出了不存在的票和重复的票,可以使用同步方法解决线程安全问题格式:修饰符 synchronized返回值类型方法名(参数列表){ 可能会出现线程安全问题的代码(访问共享数据的代码)}定义一个同步方法,同步方法也会把方法内部的代码锁住,只让一个线程执行。同步方法的锁对象是谁?就是实现类对象newRunnableImpl()也就是thispackage Synchroniz...原创 2020-06-19 20:30:57 · 225 阅读 · 0 评论 -
【Java】线程安全问题
线程的安全问题2.线程安全问题的代码实现会出现线程安全问题,买票出现了重复的票和不存在的票,因为两个线程在同时进行一个操作原创 2020-06-18 22:29:55 · 88 阅读 · 0 评论 -
【Java】解决线程安全问题 synchronized—同步代码块
解决线程安全问题synchronized—同步代码块买票案例出现了线程安全问题,卖出了不存在的票和重复的票解决线程安全问题的一种方案:使用同步代码块格式:synchronized(锁对象){可能会出现线程安全问题的代码(访问了共享数据的代码)}注意:1.通过代码块中的锁对象,可以使用任意的对象2.但是必须保证多个线程使用的锁对象是同一个3.锁对象作用:把同步代码块锁住,只让一个线程在同步代码块中执行package Synchroniz...原创 2020-06-18 22:24:18 · 151 阅读 · 0 评论 -
【Java】匿名内部类方式实现线程的创建
匿名内部类方式实现线程的创建:匿名:没有名字内部类:写在其他类内部的类匿名内部类作用:简化代码 把子类继承父类,重写父类的方法,创建子类对象集合一步完成 把实现类实现类接口,重写接口中的方法,创建实现类对象合成一步完成匿名内部类的最终产物:子类/实现类对象,而这个类没有名字格式: new父类/接口(){ 重复父类/接口中的方法};public class DemoInnerClassThr...原创 2020-06-18 18:59:30 · 196 阅读 · 0 评论 -
【Java】Thread和Runnable的区别
Thread和Runnable的区别1.避免了单继承的局限性 一个类只能继承一个类(一个人只能有一个亲爹),类继承了Thread类就不能继承其他的类 实现了Runnable接口,还可以继承其他的类,实现其他的接口2.增强了程序的扩展性,降低了程序的耦合性(解耦) 实现Runnable接口的方式,把设置线程任务和开启新线程进行了分离(解耦) 实现类中,重写了run方法,用来设置线程任务 创建Thread类对象,调用start方法,用来开启新线程publ...原创 2020-06-18 18:25:45 · 150 阅读 · 0 评论 -
【Java】Thread类的常用方法 获取线程的名称,设置线程名称,sleep()
Thread类的常用方法获取线程的名称:1.使用Thread类中的方法getName() String getName()返回该线程的名称2.可以先获取到当前正在执行的线程,使用线程中的方法getName()获取线程的名称 staticThreadcurrentThread()返回对当前正在执行的线程对象的引用public class DemoThread {public static void main(String[] args) {MyThre...原创 2020-06-18 12:00:48 · 1022 阅读 · 0 评论 -
【Java】创建多线程方法
创建多线程的第一种方式java.lang.Thread类:是描述线程的类,我们想要实现多线程程序,就必须继承Thread类实现步骤: 1.创建一个Thread类的子类 2.在Thread类的子类中重写Thread类的run方法,设置线程任务(开启线程要做什么) 3.创建Thread类的子类对象 4.调用Thread类中的方法start方法,开启新的线程,执行run方法 voidstart(...原创 2020-06-18 11:03:39 · 122 阅读 · 0 评论 -
【Java】多线程
多线程并发:指两个或或多个事件在同一个时间段内发生并行:指两个或多个时间在同一时刻发生(同时发生)进程:就是内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以运行多个进程,;进程也是程序的一次执行过程,是系统运行的基本单位;系统运行一个程序即是一个进程从创建到消亡的过程。线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程,一个进程是可以有多个线程的,这个线程也可以称之为多线程程序。简而言之,一个程序运行后至少有一个进程,一个进原创 2020-06-17 21:57:51 · 138 阅读 · 0 评论 -
【Java】自定义异常
自定义异常:java提供的异常类,不够我们使用,需要自己定义一些异常类格式: publicclassXXException extends Exception|RuntimeException{ 添加一个空参数的构造方法 添加一个带异常信息的构造方法}注意: 1.自定义异常类一般是以Exception结尾,说明该类是一个异常类 2.自定义异常类,必须继承Exception或者RuntimeExc...原创 2020-06-17 18:32:30 · 5242 阅读 · 2 评论 -
【Java】异常注意事项(子父类异常)
异常注意事项1.不要在finally里面写return,因为finally里面的语句一定会运行,一定返回finally里面的结果,这样不好2.子父类异常的注意事项原创 2020-06-17 16:11:10 · 134 阅读 · 0 评论 -
【Java】异常的注意事项: 多个异常的捕获处理?
异常的注意事项:多个异常的捕获处理?1.多个异常分别处理2.多个异常一次捕获,多次处理一个try多个catchcatch里面定义的异常变量,如果有父子关系,那么子类的异常变量必须写在上面,否则就会报错ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException3.多个异常一次捕获,一次处理1.2.注意:这里捕获可以捕获多个异常,但是在第一个arr异常之后try里面的arr...原创 2020-06-17 15:34:33 · 2025 阅读 · 0 评论 -
【Java】finally代码块
finally代码块格式: try{ 可能产生异常的代码 }catch(定义一个异常的变量,用来接收try中抛出的异常对象){ 异常的处理逻辑,异常对象之后,怎么处理异常对象 一般在工作中,会把异常的信息记录到一个日志中 }finally{ 无论是否出现异常都会执行 }注意:1.finally不能单独使用,必须和try一起使用 ...原创 2020-06-17 15:30:17 · 297 阅读 · 0 评论 -
【Java】Throwable类中3个异常处理的方法
Throwable类中3个异常处理的方法String getMessage() 返回此throwable的简短描述String toString()返回此throwable的详细消息字符串void printStackTrace() JVM打印对象,默认此方法,异常信息是最全面的public class DemoTryCatch {public static void main(String[] args) {try {readFile("c://a.tt");} ca..原创 2020-06-17 11:22:12 · 335 阅读 · 2 评论 -
【Java】try...catch异常处理的第二种方式
try...catch异常处理的第二种方式格式: try{ 可能产生异常的代码 }catch(定义一个异常的变量,用来接收try中抛出的异常对象){ 异常的处理逻辑,异常对象之后,怎么处理异常对象 一般在工作中,会把异常的信息记录到一个日志中 }注意: 1.try中可能会抛出多个异常对象,那么就可以使用多个catch来处理这些异常对象 2.如果try...原创 2020-06-16 21:36:15 · 167 阅读 · 0 评论 -
【Java】throws关键字-异常处理的第一种方式
throws关键字:异常处理的第一种方式,交给别人处理作用: 当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象 可以使用throws关键字处理异常对象,会把异常对象声明抛出给方法的调用者处理(自己不处理,给别人处理),最终交给JVM处理-->中断处理使用格式: 在方法声明时使用 修饰符返回值类型方法名(参数列表) throws AAAException,BBBException...{ th...原创 2020-06-16 21:04:23 · 271 阅读 · 0 评论 -
【Java】Objects中的requireNonNull方法
Objects类中的静态方法public static <T> T requireNonNull(T obj):查看指定地下是不是null源码: public static <T> T requiredNonNull(T obj){ if(obj == null) throw new NullPointerException(); return obj;}eg1:publi...原创 2020-06-16 19:36:08 · 2435 阅读 · 1 评论 -
【Java】异常概念&异常体系
异常概念java.lang.Throwable:类是Java语言中所有错误或异常的超类Exception:编译期异常,进行编译(写代码)java程序出现的问题 RuntimeException:运行期异常,java程序运行过程中出现的问题 异常就相当于程序得了一个小毛病(感冒,发烧),把异常处理掉,程序可以继续执行(吃点药,继续工作)Error:错误 错误就相当于得了一个无法治愈的毛病(非典,艾滋),必须修改源代码,程序才能继续...原创 2020-06-16 19:23:39 · 132 阅读 · 0 评论 -
【Java】斗地主综合案例
斗地主综合案例2public class DouDiZhu {public static void main(String[] args) {//1.准备牌//创建一个Map集合,存储牌的索引和组装好的牌Map<Integer,String> poker = new HashMap<>();//创建一个List集合,存储牌的索引List<Integer> pokerIndex = new ArrayList<>();.原创 2020-06-15 22:06:15 · 181 阅读 · 0 评论 -
【Java】java9的of方法
jdk9的新特性List接口,Set接口,Map接口:里面增加了一个静态的方法of,可以给集合一次性添加多个元素static <E> List<E> of (E...elements)使用前提: 当集合中存储的元素个数已经确定了,不再改变时使用。注意: 1.of方法只适用于List接口,Set接口,Map接口,不适用于接口的实现类 2.of方法的返回值是一个不能改变的集合,集合不能再使用add,put方法添加元素,会抛出...原创 2020-06-15 18:58:52 · 3294 阅读 · 0 评论 -
【Java】练习:计算一个字符串中每个字符出现的次数
练习:计算一个字符串中每个字符出现的次数package test;import java.util.*;public class DemoCalcu { public static void main(String[] args) { Map<Character,Integer> m1 = new HashMap<>(); System.out.println("请输入字符串:"); Scann...原创 2020-06-15 18:13:42 · 379 阅读 · 0 评论 -
【Java】HashTable
HashTablejava.util.HashTable<K,V>集合 implements Map<K,V>接口HashTable:底层也是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢HashMap:底层是一个哈希表,是一个线程不安全的集合HashMap(之前学的所有的集合):可以存储null值,null键HashTable集合,不能存储null值,null键HashTable和Vector集合一样,在jdk1.2版本之后被更先进...原创 2020-06-15 17:28:25 · 126 阅读 · 0 评论 -
【Java】LinkedHashMap有序哈希Map
LinkedHashMapjava.util.LinkedHashMap<K,V> entends HashMap<K,V>Map接口的哈希表和链表实现,具有可预知的迭代顺序底层原理: 哈希表+链表(记录元素的顺序)HashMap<String,String> map1 = new HashMap<>();map1.put("a","a");map1.put("c","c");map1.put("...原创 2020-06-15 12:08:39 · 157 阅读 · 0 评论 -
【Java】HashMap存储自定义类型键值
HashMap存储自定义类型键值Map集合保证key是唯一的: 作为key的元素,必须重写hashCode方法和equals方法,以保证key唯一 (如果没有重写,那么map里面的自定义类的键值对会重复,重写了就只有一个)在下面的例子中,如果没有重写hashCode方法和Equals方法,map里面会有四个元素。import java.util.HashMap;import java.util.Map;import java.util.Set;pu...原创 2020-06-15 11:53:24 · 446 阅读 · 0 评论 -
【Java】Entry键值对对象获取Map的键值对
Entry键值对对象Map.Entry<K,V>:在Map接口中有一个内部接口Entry作用:当Map集合一创建,那么就会在Map集合中创建一个Entry对象,用来记录键与值(键值对对象,键与值的映射关系)-“结婚证”Map.Entry:结婚证Map集合的第二种遍历方式:使用Entry对象遍历Map集合中的方法 Set<Map.Entry<K,V>> entrySet()返回此映射中包含的映射关系的Set视图...原创 2020-06-15 11:10:57 · 1039 阅读 · 0 评论 -
【Java】Map集合综述
Map集合综述java.util.Map<k,v>集合map集合的特点:(多线程)1.Map集合是一个双列集合,一个集合包含两个值(一个key,一个value)2.Map集合中的元素,key和value的数据类型可以相同,也可以不同3.Map集合中的元素,key是不允许重复的,value是可以重复的4.Map集合中的元素,key和value一一对应的Map集合常用实现类hashMap集合特点:1.HashMap集合底层是哈希表:查询的速度特别快jdk.原创 2020-06-15 11:09:01 · 126 阅读 · 0 评论 -
【Java】Collections集合工具类
Collections-java.utils.Collections是集合工具类,用来对集合进行操作。部分方法如下:-public static <T> boolean addAll(Collection<T> c,T...elements):往集合中添加一些元素-public static void shuffle(list<?> list)打乱顺序:打乱集合顺序-public static <T> void sort(List<T&g原创 2020-06-14 19:48:41 · 141 阅读 · 0 评论 -
【Java】可变参数
可变参数:是jdk1.5之后出现的新特性使用前提: 当方法的参数列表的数据已经确定,但是参数的格式不确定,就可以使用可变参数。使用格式:方法定义时使用 修饰符返回值类型方法名(数据类型...变量名){}可变参数的原理: 可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数 可传递的参数个数,可以是0个(不传递),1,2...多个*1.一个方法的参数列表,只能有一个可变参数。*2.如果方法的参数有多个...原创 2020-06-14 16:50:37 · 116 阅读 · 0 评论 -
【Java】LinkedHashSet集合
LinkedHashSet集合java.util.LinkedHashSet集合 extends HashSet集合LinkedHashSet集合特点:底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序public class DemoLinkedHashSet {public static void main(String[] args) {HashSet<String> set = new HashSet<>()原创 2020-06-14 16:08:39 · 143 阅读 · 0 评论 -
【Java】HashSet集合
Vector是单线程的,读取速度慢java.util.Set接口 extends Collection接口Set接口是一个哈希表结构,实际上是一个HashMap示例。它不保证set的迭代顺序,也不保证顺序的恒久不变1.不允许存储重复元素,2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历java.util.HashSet集合 implementsSet接口HashSet的特点1.不允许存储重复元素,2.没有索引,没有带索引的方法,也不能使用普通的...原创 2020-06-14 12:28:20 · 195 阅读 · 0 评论 -
【Java】LinkedList链表的用法
LinkedList :java.util.LinkedList集合 implements list接口是List接口的链表实现LinkedList集合的特点:1.底层是一个链表结构2.里面包含了大量操作首尾元素的方法*:使用LinkedList特有的方法,不能使用多态-public void addFirst(E e):将指定元素添加到此列表的开头。-public void addLast(E e):将指定元素添加到此列表的结尾-public void push(E..原创 2020-06-14 09:52:59 · 176 阅读 · 0 评论 -
【Java】List集合介绍+常用方法
List集合介绍&常用方法List特点:1.是有序的集合2.有索引3.元素可以重复List接口中带索引的方法(特有)-public void add(int index, E element):将指定的元素,添加到该集合的指定位置上。-public E get (int index):返回集合中指定位置的元素,返回的是被移除的元素-public E remove(int index):移除列表中指定位置的元素,返回的是被移除的元素。-public E set(.原创 2020-06-13 21:33:23 · 185 阅读 · 0 评论 -
【Java】斗地主综合案例
1.准备牌2.洗牌3.发牌4.看牌package 斗地主;import java.lang.reflect.Array;import java.util.ArrayList;import java.util.Collections;public class Doudizhu { public static void main(String[] args) { String[] pattern = {"♥","♣","♦","♠"}; St原创 2020-06-13 16:44:04 · 109 阅读 · 0 评论 -
【Java】泛型通配符
泛型通配符 ?不知道使用什么类型来接收的时候,此时可以使用? ?表示未知通配符此时只能接收数据,不能往该集合中存储数据使用方式:不能创建对象使用,只能作为方法的参数使用定义一个方法,能遍历所有类型的ArrayList集合这时候我们不知道ArrayList集合使用什么数据类型,可以用泛型的通配符?来接受类型package Generic;import java.util.ArrayList;public class Generic2 {public st...原创 2020-06-12 21:15:46 · 136 阅读 · 0 评论 -
【Java】定义和使用含有泛型的接口
定义和使用含有泛型的接口含有泛型的接口的第一种使用方式:定义接口的实现类,实现接口,指定接口的泛型publicinterface Interator<E>{ E next();}//Scanner类实现了Iterator接口,并指定接口的泛型为String,所以重写的next方法泛型默认就是Stringpublic final class Scanner implements Iterator<String>{...原创 2020-06-12 20:35:29 · 420 阅读 · 1 评论 -
【Java】泛型
泛型:是一种未知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型泛型也可以看成是一个变量,用来接收数据类型。Ee:Element元素T t:Type类型创建集合对象,使用泛型好处:1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型。2.把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候会报错)弊端:泛型是什么类型,只能存储什么类型的数据。集合不使用泛型好处:集合不使用泛型,默认的类型就是Object...原创 2020-06-12 19:49:22 · 140 阅读 · 0 评论 -
【Java】增强for循环
增强for循环也称为(for each)循环,是jdk1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。tips:新for循环必须有被遍历的目标。目标只能是Collection或者是数组。新式for仅仅作为遍历出现。public class DemoForEach {public static void main(String[] args) {demo01();..原创 2020-06-12 17:31:37 · 352 阅读 · 0 评论 -
【Java】Iterator迭代器
Iterator接口java.util.Iterator是Collection集合元素的通用获取方式,在取元素之前首先要判断集合中有没有元素Iterator接口的常用方法:public E next():返回迭代的下一个元素public boolean hasNext():如果仍有元素可以迭代,则返回trueIterator迭代器是一个接口,我们无法直接使用,需要使用Iterator的实现类对象,Collection中有一个方法,叫iterator()可以返...原创 2020-06-12 16:52:59 · 141 阅读 · 0 评论 -
【Java】Collection集合
Collection集合集合是一种容器,可以用来存储多个数据。集合和数组的区别: 数组的长度是固定的,集合的长度是可变的。 数组中存储的是同一类型的元素,可以存储基本数据类型值,集合存储的都是对象。而且对象的类型可以不一致。在开发中对象多的时候,用集合进行存储。 学习集合的目标1.会使用集合存储数据2.会遍历集合,把数据取出来3.掌握每种集合的特性List接口1.有序的集合(存储和取出元素顺序相同)2.允许存储重复的元素3.有索...原创 2020-06-12 16:51:31 · 104 阅读 · 0 评论 -
【Java】基本类型和字符串之间的转换
基本类型->字符串1.基本类型的值+""最简单的方法2.包装类的静态方法toString(参数),不是Object类的toString()重载static String toString(int i)返回一个表示指定整数的String对象3.String类的静态方法valueOf(参数)static String valueOf(int i)返回int参数的字符串表示形式字符串->基本类型1.使用包装类的静态方法parseXXX("数值类型的字符串")..原创 2020-06-12 11:55:11 · 90 阅读 · 0 评论