自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 收藏
  • 关注

原创 如何将项目作为模块导入idea已有项目中

将已有项目复制到已有项目所在的文件夹下在idea中打开项目,找到要添加的项目,此时是不能运行的,右键选择“从已有的模块创建资源”。

2021-10-30 10:37:26 1381

原创 线程同步

1.问题的提出应用场景:多个用户同时操作一个银行账户。每次取款400元,取款前先检查余额是否足够。如果不够,放弃取款分析使用多线程解决开发一个取款线程类,每个用户对应一个线程对象因为多个线程共享同一个银行账户,使用Runnable方式解决思路创建银行账户类Account创建取款线程AccountRunnable创建测试类TestAccount,让两个用户同时取款【示例9】引入线程同步public class Account { private int balance=

2021-04-24 23:54:11 100

原创 线程控制

线程控制理解了线程生命周期的基础上,可以利用Java提供的线程控制命令对线程的生命周期进行干预。join()阻塞指定线程等到另一个线程完成以后再继续执行。sleep()使线程停止运行一段时间,让出CPU,将处于阻塞状态,如果调用了sleep方法之后,没有其他等待执行的线程,这个时候当前线程不会马上恢复执行!实际开发中经常使用Thread.sleep()来模拟线程切换,暴露线程安全问题。yield ()让当前正在执行线程暂停,不是阻塞线程,而是将线程转入就绪状态。如果调用了yield方法之后

2021-04-23 00:05:13 125 1

原创 线程的生命周期

新生状态:用new关键字建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start进入就绪状态。就绪状态:处于就绪状态线程具备了运行条件,但还没分配到CPU,处于线程就绪队列,等待系统为其分配CPU当系统选定一个等待执行的线程后,它就会从就绪状态进入执行状态,该动作称之为“cpu调度”。运行状态:在运行状态的线程执行自己的run方法中代码,直到等待某资源而阻塞或完成任务而死亡。如果在给定时间片内没执行结束,就会被系统给换下来回到等待执行状态

2021-04-22 17:35:29 69

原创 线程的定义和创建

1.继承Thread类Thread类是Java提供的线程顶级类,继承Thread类可快速定义线程。【示例1】 使用多线程实现龟兔赛跑public class TortoiseThread extends Thread { /** * 线程体,线程要完成的任务,要执行的代码 */ @Override public void run() { while (true) { System.out.println("乌龟领先

2021-04-22 17:32:02 107

原创 多线程---进程和线程

进程和线程程序 Program程序是一段静态的代码,它是应用程序执行的蓝本。进程 Process进程是指一种正在运行的程序,有自己的地址空间。进程的特点动态性独立性并发性并发和并行的区别并行:多个CPU同时执行任务并发:一个CPU(采用时间片)同时执行多个任务线程 Thread进程内部的一个执行单元,它是程序中一个单一的顺序控制流程。线程又被称为轻量级进程(lightweight process)。如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称

2021-04-21 16:00:56 55

原创 IO流---复制文件夹

复制文件夹问题1:使用字节流还是字符流使用字节流 可能有图片、视频、音频…等二进制文件问题2:如何提高复制速度BufferedInputStream和BufferedOutputStreambyte [] buf = new byte[1024];问题3:涉及的技能点1.IO流 :文件的复制2.递归:各级文件夹和文件的递归复制3.File类:文件夹的定义和创建问题4:问题的迭代1.复制一个文件2.复制一个文件夹下所有的文件(不包括子文件夹)3.复制一个文件夹下所有的文件和子文件夹

2021-04-21 15:08:20 257

原创 IO流---其他流

其他流打印流:PrintStream和PrintWriter只有输出流,没有输入流。System.out、System.err是PrintStream的实例变量。转换流:InputStreamReader和OutputStreamWriter实现从字节流到字符流的转换,是适配器设计模式的应用。字节数组流ByteArrayInputStream和ByteArrayOutputStream是节点流,数据源是字节数组,可以实现各种基本和引用数据类型与字节数组之间的相互转换。Java IO流的设计使用

2021-04-21 14:14:02 51

原创 序列化和反序列化

1.什么是序列化和反序列化序列化:Serialization 将对象的状态信息转换成可以存储或传输的形式的过程。对象(内存)---->字节数组 字节序列(外存、网络)反序列化:Deserialization字节数组 字节序列(外存、网络)------>对象(内存)2.什么时候需要序列化和反序列化存储或传输。比如存储到外存(硬盘)中、传输到网络。3.如何实现序列化和反序列化相应的类要实现Serializable接口。 public class Student implemen

2021-04-16 18:47:06 62

原创 IO流--数据流和对象流

数据流和对象流数据流DataInputStream和DataOutputStream之前使用文件流、缓冲流读取文件只能按照字节、数组方式读取,最方便的也是按行读取,能否很方便的实现对各种基本类型和引用类型数据的读写,并保留其本身的类型。数据流DataInputStream和DataOutputStream和对象流ObjectInputStream和ObjectOutputStream可以解决这个问题,最大的优势就是提供了方便操作各种数据类型的方法,直接调用,简单方便。注意只有字节流,没有字符流

2021-04-15 12:56:57 391

原创 IO流--文件流和缓冲流

文件流文件字节流FileInputStream和FileOutputStreamFileInputStream和FileOutputStream是字节流,是节点流,数据源和目的地是文件。复制文件需要分别创建一个输入流和输出流进行文件读写。需要创建一个中转站,借助循环和中转站完成文件复制。流使用后一定要关闭,这和垃圾回收没有关系。【示例1】:复制文件public class TestCopy1 { public static void main(String[] args) thro

2021-04-15 09:25:48 246

原创 创建表和数据库

CREATE DATABASE IF NOT EXISTS school-- 注意点:使用英文(),表的名称和字段尽量使用‘ ’括起来-- atuo_increment 自增-- 字符串使用''括起来-- 所有的语句后面加逗号,最后一个不加-- primary key 主键,一般一个表只有一个唯一的主键CREATE TABLE IF NOT EXISTS ‘student‘(‘id‘ INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号', ‘name‘

2021-04-12 11:22:29 91

原创 基本的命令行操作

打开数据库:net start mysql关闭数据库:net stop mysql连接:mysql -u root -p+password查看所有数据库:show databases+;打开数据库:use+数据库名(Database changed)查看数据库中所有的表: show tables显示数据库中所有表的信息:describe +表名创建数据库:create database +数据库名退出:exit单行注释:- -多行注释:/**/...

2021-04-09 11:38:23 60

转载 SQLyog安装

添加链接描述

2021-04-09 11:19:57 162

原创 IO流概述

IO流概述在Java程序中,对于数据的输入/输出操作以“流” (stream) 方式进行;Java提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据。Java的流类型一般位于java.io包中。数据源data source,提供原始数据的原始媒介。常见的:数据库、文件、其他程序、内存、网络连接、IO设备。流是一个抽象、动态的概念,是一连串连续动态的数据集合。数据源就像水箱,流就像水管中流着的水流,程序就是我们最终的用户。 流是一个抽象、动态的概念,是一连串连续动态

2021-04-08 01:04:52 128

原创 泛型

泛型泛型的引入一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。在面向对象编程语言中,多态算是一种泛化机制。有时候,拘泥于单继承体系,也会使程序受限太多。如果方法的参数是一个接口,而不是一个类,这种限制就放松了许多。因为任何实现了该接口的类都能都满足该方法。可是有的时候,即便使用了接口,对程序的约束也还是太强了。因为一旦指明了接口,就要求你的代码必须使用特定的接口。而我们希望的是编写更通用的代码,要使代码

2021-04-08 00:46:44 58

原创 集合的其他内容1

IteratorIterator专门为遍历集合而生,集合没有提供专门遍历的方法。Iterator实际上是迭代器设计模式的实现。Iterator的常用方法:1.boolean hasNext():判断是否存在另一个可访问的元素。2.Object next():返回要访问的下一个元素。3.void remove():删除上次访问返回的对象。哪些集合可以使用Iterator遍历:1.层次1:Collection、List、Set可以,Map不可以。 2.层次2:提供iterator(

2021-03-09 01:03:41 100

原创 Map集合的使用

Map集合类型Map特点:存储的是键值对映射关系,根据key可以找到value。HashMap1.采用HashTable存储结构2.添加快、删除快、查询快3.缺点:key无序LinkedHashMap1.采用HashTable存储结构,同时采用链表维护次序2.key有序(添加顺序)TreeMap1.采用红黑树的存储结构2.优点:key有序,查询速度比List快(按照内容查询)3.缺点:查询速度没有HashSet快使用Map存储国家简称-国家名称映射package com.b

2021-03-07 09:09:49 180 1

原创 哈希表的原理

哈希表的原理引入哈希表在无序数组中按照内容查找,效率低下,时间复杂度为O(n):在有序数组中按照内容查找,可以使用折半查找,时间复杂度O(log2n):在二叉平衡树中按照内容查找,时间复杂度O(log2n) :在数组中按照索引查找,不进行比较和计数,直接计算得到,效率最高,时间复杂度O(1) 问题:按照内容查找,能否也不进行比较,而是通过计算得到地址,实现类似数组按照索引查询的高效率呢O(1)有!!!哈希表来实现前面查找方法共同特点:通过将关键字值与给定值比较,来确定位置。效率取决比较次

2021-03-06 16:30:46 2119

原创 Set集合的使用

Set集合的类型Set特点:唯一、无序HashSet1.采用HashTable哈希表存储结构。2.优点:添加快、删除快、查询快。3.缺点:无序LinkedHashSet1.采用哈希表存储结构,同时使用链表维护次序。2.有序(添加顺序)。TreeSet1.采用红黑树的存储结构。2.优点:有序(自然顺序)、查询速度比List快(按照内容查询)3.缺点:查询速度没有HashSet快使用Set集合存储课程名称public class TestSet1 { public

2021-03-06 16:12:51 616

原创 集合的其他内容2

旧的集合类Vector实现原理和ArrayList相同,功能相同,都是长度可变的数组结构,很多情况下可以互用。两者的主要区别如下:1.Vector是早期JDK接口,ArrayList是替代Vector的新接口。2.Vector线程安全,效率低下;ArrayList重速度轻安全,线程非安全。3.长度需要增长时,Vector默认增长一倍,ArrayList增长50%。HashTable类实现原理和HashMap相同,功能相同,底层都是哈希表结构,查询速度快,很多情况下可以互用。两

2021-03-06 15:29:10 84

原创 Java中的栈和队列

理解Java中栈和队列的接口和实现类package com.bjsxt.list2;import java.util.ArrayDeque;import java.util.Deque;import java.util.Queue;import java.util.Stack;public class TestStackQueue { public static void main(String[] args) { //栈 //public clas

2021-02-21 21:46:23 72

原创 LinkedList的使用

示例:使用LinkedList存储学生的分数package com.bjsxt.list2;import java.util.LinkedList;import java.util.List;/** * 功能:存储多个学生的分数 * 不变的是什么? *1.运算结果没有变 * 2.执行的功能代码没有变 * * 变化的什么? * 1.底层的结构变了 * ArrayList:数组 * LinkedList:双向链表 * 2.具体的执行过程变化了 list.add(2,99

2021-02-21 11:24:22 345

原创 集合引入和ArrayList

引入集合集合和数组的比较集合的使用场合:举例:新闻列表、就业喜报、就业明星、邮件列表、购物车;当我们需要将一些相同结构的个体整合在一起时,就可以考虑使用集合了 。为什么使用集合而不是数组?集合和数组的相似点:都可以存储多个对象,对外都作为一个整体存在。数组的缺点:长度必须在初始化时指定,且固定不变。数组采用连续存储空间,删除和添加效率低下。数组无法直接保存映射关系。数组缺乏封装,操作繁琐。集合框架Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util

2021-02-21 10:25:05 253

原创 直接插入排序

直接插入排序算法思想:1.从序列第一个元素开始,该元素可以认为已经被排好序。2. 取出下一个元素,设为待插入元素,在已经排序的元素序列中从后向前扫描,如果该元素(已排序)大于待插入元素,将该元素移到下一位置。3. 重复步骤2,直到找到已排序的元素小于或者等于待排序元素的位置,插入元素。4. 重复2,3步骤,完成排序。算法过程:算法实现:package com.bjsxt.sort;import java.util.Arrays;public class StraightInsert

2021-02-02 21:39:22 72

原创 选择排序

选择排序算法思想:整个数列分成两部分:前面是有序数列,后面是无序数列。初始状态下,整个数列都是无序的,有序数列是空。必须进行n-1趟循环才可以排好序。每一趟都会使一个元素位于其最终位置。每趟先假设无序数列的第1个元素(整个数列的第i个元素)是最小的,让当前的最小数,从第i+1个元素开始比较,一直比较到最后一个元素。如果发现更小的数,就假设当前数是最小数。一趟比较完后,将发现最小数和无序数列的第一个数交换(如果最小数不是无序数列的第一个数)算法过程:算法实现:package com.

2021-02-01 22:20:19 64

原创 排序

排序算法内部排序和外部排序:一类是整个排序过程在内存储器中进行,称为内部排序;另一类是由于待排序元素数量太大,以至于内存储器无法容纳全部数据,排序需要借助外部存储设备才能完成,这类排序称为外部排序。比较排序和非比较排序:大部分排序都是需要通过比较首先来判断大小,作为排序的依据的。但是也有例外的,比如计数排序、基数排序,不需要进行比较。效率可以做到更高,但是会有一些限制条件,也可能需要更多的空间。...

2021-02-01 20:09:57 112

原创 File类

File类的使用File类用来代表文件和文件夹。主要作用有两个:获取文件或者文件夹的属性; 实现对文件、文件夹的创建和删除。 文件夹:file folder 目录:directory使用File获取文件或文件夹属性:package com.bisxt.file;import java.io.File;import java.util.Date;/*功能一:获取文件或文件夹的属性 */public class TestFile1 { public static void mai

2021-02-01 17:28:38 115

原创 其他常用类

Math类package com.bisxt.math;//import static java.lang.Math.*;//静态导入,导入后可不写类名直接调用方法//Math类中所有方法都是静态的,可以直接调用public class TestMath { public static void main(String[] args) { System.out.println(Math.E); System.out.println(Math.PI);

2021-02-01 15:22:26 173

原创 常用类---日期类

在计算机世界,我们把1970 年 1 月 1 日 00:00:00定为基准时间,每个度量单位是毫秒(1秒的千分之一)。我们用long类型的变量来表示时间,从基准时间往前几亿年,往后几亿年都能表示。如果想获得现在时刻的“时刻数值”,可以使用:long now = System.currentTimeMillis();这个“时刻数值”是所有时间类的核心值,年月日都是根据这个“数值”计算出来的。我们工作学习涉及的时间相关类有如下这些:Date类在标准Java类库中包含一个Date类。它的对象表示一个

2021-02-01 13:23:41 286

原创 常用类---StringBuilder、StringBuffer

StringBuilder、StringBuffer类StringBuffer和StringBuilder非常类似,均代表可变的字符序列。这两个类都是抽象类AbstractStringBuilder的子类,方法几乎一模一样。两个类的区别主要是:StringBuffer JDK1.0提供的类,线程安全,做线程同步检查,效率较低。StringBuilder JDK1.5提供的类,线程不安全,不做线程同步检查,因此效率较高。 建议采用该类。使用StringBuilder类:package co

2021-01-31 15:52:16 60

原创 常用类---String类

String类String类、StringBuilder类、StringBuffer类是三个字符串相关类。String类是的对象代表不可变的字符序列,StringBuilder类和StringBuffer类代表可变字符序列。理解String类源码String类底层是一个字符数组value。各种方法的操作其实都是对该数组的操作。String类的equals()方法其实就是比较底层的字符数组的各个元素是否相同,只要发现一个字符不相同,就返回false。如果所有字符都相同,返回true。但是如果两

2021-01-31 15:00:04 74

原创 常用类---包装类

包装类String类StringBuffer和StringBuilder类Date类和DateFormat类Calendar类包装类Java是面向对象的语言,但并不是“纯面向对象”的,因为我们经常用的基本数据类型就不是对象。但我们在实际应用中经常需要将基本数据类型转化成对象以便于操作。为了解决这个不足,Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型相对应的类统称为包装类(Wrapper Class)。包装类均位于java.lang包。byte:B.

2021-01-29 21:10:38 88

原创 Formatter类

在Java中,所有新的格式化功能都由java.util.Formatter类处理。可以将Formatter看作一个翻译器,他将你的格式化字符串与数据翻译成需要的结果。当你创建一个Formatter对象的时候,需要向其构造器传递一些信息,告诉他最终的结果将向哪里输出:package com.tij;//TIJ P290import java.io.PrintStream;import java.util.Formatter;public class Turtle { private St

2021-01-29 17:59:03 316

原创 格式化输出

package com.tij;//格式化输出 TIJ P289public class SimpleFormat { public static void main(String[] args) { int x=5; double y=4.233423; //old way System.out.println("Row 1: ["+x+" "+y+ "]"); //new way System.

2021-01-29 14:25:12 66

原创 无意识的递归

package com.tij;//TIJ P287 无意识的递归import java.util.ArrayList;import java.util.List;public class InfiniteRecursion { public String toString(){// return "InfiniteRecuision address:"+this+"\n"; 这里发生了自动类型转换,由InfiniteRecursion类型转换成String类型。

2021-01-29 13:57:33 66

原创 异常

Error和Exception简单分类:检查性异常:最具有代表性的检查型异常是用户错误或问题引起的异常,这是程序员无法预见的。运行时异常:运行时异常时可能被程序员避免的异常。与检查型异常相反,运行时异常可以在编译时被忽略。错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,他们在编译时也是检查不到的。ErrorError类对象由java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。Java虚拟机运行错误,当JVM不再有继续执行

2021-01-27 22:32:18 70

原创 内部类

内部类就是在一个类的内部再定义一个类,比如在A类中定义一个B类,那么B类相对A类来说就是内部类,而A类相对B类就是外部类。成员内部类静态内部类局部内部类匿名内部类

2021-01-27 01:39:11 87

原创 接口

普通类:只有具体实现。抽象类:具体实现和规范(抽象方法)都可以有。接口:只有规范,自己无法写方法,专业的约束,约束和实现分离,面向接口编程。接口的本质是契约,制定好以后大家遵守。OO的精髓,是对对象的抽象,最能体现这一点的就是接口。接口的作用:1.约束。2.定义一些方法,让不同的人实现。3.其中定义的方法,默认都是public abstract4.其中定义的常量,默认都是public static final5.接口不能被实例化,接口中没有构造方法6.implements可以实现多个接

2021-01-27 00:39:56 45

原创 抽象类

package com.oop.demo08;//abstract 抽象类//其本质还是类,就摆脱不了extends关键字,其局限性在于只能单继承,无法实现多继承//虽然java中没有多继承,但是接口可以多继承public abstract class Action { //约束 有人帮我们实现 //abstract,抽象方法,只有方法名字,没有方法的实现 public abstract void doSomething(); //1.不能new这个抽象类,只能靠子

2021-01-27 00:13:21 51

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除