![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java基础
学习使用。
六出_
这个作者很懒,什么都没留下…
展开
-
线程同步
1.问题的提出应用场景:多个用户同时操作一个银行账户。每次取款400元,取款前先检查余额是否足够。如果不够,放弃取款分析使用多线程解决开发一个取款线程类,每个用户对应一个线程对象因为多个线程共享同一个银行账户,使用Runnable方式解决思路创建银行账户类Account创建取款线程AccountRunnable创建测试类TestAccount,让两个用户同时取款【示例9】引入线程同步public class Account { private int balance=原创 2021-04-24 23:54:11 · 94 阅读 · 0 评论 -
线程控制
线程控制理解了线程生命周期的基础上,可以利用Java提供的线程控制命令对线程的生命周期进行干预。join()阻塞指定线程等到另一个线程完成以后再继续执行。sleep()使线程停止运行一段时间,让出CPU,将处于阻塞状态,如果调用了sleep方法之后,没有其他等待执行的线程,这个时候当前线程不会马上恢复执行!实际开发中经常使用Thread.sleep()来模拟线程切换,暴露线程安全问题。yield ()让当前正在执行线程暂停,不是阻塞线程,而是将线程转入就绪状态。如果调用了yield方法之后原创 2021-04-23 00:05:13 · 119 阅读 · 1 评论 -
线程的生命周期
新生状态:用new关键字建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start进入就绪状态。就绪状态:处于就绪状态线程具备了运行条件,但还没分配到CPU,处于线程就绪队列,等待系统为其分配CPU当系统选定一个等待执行的线程后,它就会从就绪状态进入执行状态,该动作称之为“cpu调度”。运行状态:在运行状态的线程执行自己的run方法中代码,直到等待某资源而阻塞或完成任务而死亡。如果在给定时间片内没执行结束,就会被系统给换下来回到等待执行状态原创 2021-04-22 17:35:29 · 67 阅读 · 0 评论 -
线程的定义和创建
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 · 104 阅读 · 0 评论 -
多线程---进程和线程
进程和线程程序 Program程序是一段静态的代码,它是应用程序执行的蓝本。进程 Process进程是指一种正在运行的程序,有自己的地址空间。进程的特点动态性独立性并发性并发和并行的区别并行:多个CPU同时执行任务并发:一个CPU(采用时间片)同时执行多个任务线程 Thread进程内部的一个执行单元,它是程序中一个单一的顺序控制流程。线程又被称为轻量级进程(lightweight process)。如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称原创 2021-04-21 16:00:56 · 49 阅读 · 0 评论 -
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 · 249 阅读 · 0 评论 -
IO流---其他流
其他流打印流:PrintStream和PrintWriter只有输出流,没有输入流。System.out、System.err是PrintStream的实例变量。转换流:InputStreamReader和OutputStreamWriter实现从字节流到字符流的转换,是适配器设计模式的应用。字节数组流ByteArrayInputStream和ByteArrayOutputStream是节点流,数据源是字节数组,可以实现各种基本和引用数据类型与字节数组之间的相互转换。Java IO流的设计使用原创 2021-04-21 14:14:02 · 43 阅读 · 0 评论 -
序列化和反序列化
1.什么是序列化和反序列化序列化:Serialization 将对象的状态信息转换成可以存储或传输的形式的过程。对象(内存)---->字节数组 字节序列(外存、网络)反序列化:Deserialization字节数组 字节序列(外存、网络)------>对象(内存)2.什么时候需要序列化和反序列化存储或传输。比如存储到外存(硬盘)中、传输到网络。3.如何实现序列化和反序列化相应的类要实现Serializable接口。 public class Student implemen原创 2021-04-16 18:47:06 · 58 阅读 · 0 评论 -
IO流--数据流和对象流
数据流和对象流数据流DataInputStream和DataOutputStream之前使用文件流、缓冲流读取文件只能按照字节、数组方式读取,最方便的也是按行读取,能否很方便的实现对各种基本类型和引用类型数据的读写,并保留其本身的类型。数据流DataInputStream和DataOutputStream和对象流ObjectInputStream和ObjectOutputStream可以解决这个问题,最大的优势就是提供了方便操作各种数据类型的方法,直接调用,简单方便。注意只有字节流,没有字符流原创 2021-04-15 12:56:57 · 386 阅读 · 0 评论 -
IO流--文件流和缓冲流
文件流文件字节流FileInputStream和FileOutputStreamFileInputStream和FileOutputStream是字节流,是节点流,数据源和目的地是文件。复制文件需要分别创建一个输入流和输出流进行文件读写。需要创建一个中转站,借助循环和中转站完成文件复制。流使用后一定要关闭,这和垃圾回收没有关系。【示例1】:复制文件public class TestCopy1 { public static void main(String[] args) thro原创 2021-04-15 09:25:48 · 239 阅读 · 0 评论 -
IO流概述
IO流概述在Java程序中,对于数据的输入/输出操作以“流” (stream) 方式进行;Java提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据。Java的流类型一般位于java.io包中。数据源data source,提供原始数据的原始媒介。常见的:数据库、文件、其他程序、内存、网络连接、IO设备。流是一个抽象、动态的概念,是一连串连续动态的数据集合。数据源就像水箱,流就像水管中流着的水流,程序就是我们最终的用户。 流是一个抽象、动态的概念,是一连串连续动态原创 2021-04-08 01:04:52 · 125 阅读 · 0 评论 -
泛型
泛型泛型的引入一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。在面向对象编程语言中,多态算是一种泛化机制。有时候,拘泥于单继承体系,也会使程序受限太多。如果方法的参数是一个接口,而不是一个类,这种限制就放松了许多。因为任何实现了该接口的类都能都满足该方法。可是有的时候,即便使用了接口,对程序的约束也还是太强了。因为一旦指明了接口,就要求你的代码必须使用特定的接口。而我们希望的是编写更通用的代码,要使代码原创 2021-04-08 00:46:44 · 54 阅读 · 0 评论 -
集合的其他内容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 · 90 阅读 · 0 评论 -
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 · 177 阅读 · 1 评论 -
哈希表的原理
哈希表的原理引入哈希表在无序数组中按照内容查找,效率低下,时间复杂度为O(n):在有序数组中按照内容查找,可以使用折半查找,时间复杂度O(log2n):在二叉平衡树中按照内容查找,时间复杂度O(log2n) :在数组中按照索引查找,不进行比较和计数,直接计算得到,效率最高,时间复杂度O(1) 问题:按照内容查找,能否也不进行比较,而是通过计算得到地址,实现类似数组按照索引查询的高效率呢O(1)有!!!哈希表来实现前面查找方法共同特点:通过将关键字值与给定值比较,来确定位置。效率取决比较次原创 2021-03-06 16:30:46 · 2087 阅读 · 0 评论 -
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 · 613 阅读 · 0 评论 -
集合的其他内容2
旧的集合类Vector实现原理和ArrayList相同,功能相同,都是长度可变的数组结构,很多情况下可以互用。两者的主要区别如下:1.Vector是早期JDK接口,ArrayList是替代Vector的新接口。2.Vector线程安全,效率低下;ArrayList重速度轻安全,线程非安全。3.长度需要增长时,Vector默认增长一倍,ArrayList增长50%。HashTable类实现原理和HashMap相同,功能相同,底层都是哈希表结构,查询速度快,很多情况下可以互用。两原创 2021-03-06 15:29:10 · 81 阅读 · 0 评论 -
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 · 68 阅读 · 0 评论 -
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 · 339 阅读 · 0 评论 -
集合引入和ArrayList
引入集合集合和数组的比较集合的使用场合:举例:新闻列表、就业喜报、就业明星、邮件列表、购物车;当我们需要将一些相同结构的个体整合在一起时,就可以考虑使用集合了 。为什么使用集合而不是数组?集合和数组的相似点:都可以存储多个对象,对外都作为一个整体存在。数组的缺点:长度必须在初始化时指定,且固定不变。数组采用连续存储空间,删除和添加效率低下。数组无法直接保存映射关系。数组缺乏封装,操作繁琐。集合框架Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util原创 2021-02-21 10:25:05 · 243 阅读 · 0 评论 -
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 · 109 阅读 · 0 评论 -
其他常用类
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 · 132 阅读 · 0 评论 -
常用类---日期类
在计算机世界,我们把1970 年 1 月 1 日 00:00:00定为基准时间,每个度量单位是毫秒(1秒的千分之一)。我们用long类型的变量来表示时间,从基准时间往前几亿年,往后几亿年都能表示。如果想获得现在时刻的“时刻数值”,可以使用:long now = System.currentTimeMillis();这个“时刻数值”是所有时间类的核心值,年月日都是根据这个“数值”计算出来的。我们工作学习涉及的时间相关类有如下这些:Date类在标准Java类库中包含一个Date类。它的对象表示一个原创 2021-02-01 13:23:41 · 279 阅读 · 0 评论 -
常用类---StringBuilder、StringBuffer
StringBuilder、StringBuffer类StringBuffer和StringBuilder非常类似,均代表可变的字符序列。这两个类都是抽象类AbstractStringBuilder的子类,方法几乎一模一样。两个类的区别主要是:StringBuffer JDK1.0提供的类,线程安全,做线程同步检查,效率较低。StringBuilder JDK1.5提供的类,线程不安全,不做线程同步检查,因此效率较高。 建议采用该类。使用StringBuilder类:package co原创 2021-01-31 15:52:16 · 58 阅读 · 0 评论 -
常用类---String类
String类String类、StringBuilder类、StringBuffer类是三个字符串相关类。String类是的对象代表不可变的字符序列,StringBuilder类和StringBuffer类代表可变字符序列。理解String类源码String类底层是一个字符数组value。各种方法的操作其实都是对该数组的操作。String类的equals()方法其实就是比较底层的字符数组的各个元素是否相同,只要发现一个字符不相同,就返回false。如果所有字符都相同,返回true。但是如果两原创 2021-01-31 15:00:04 · 71 阅读 · 0 评论 -
常用类---包装类
包装类String类StringBuffer和StringBuilder类Date类和DateFormat类Calendar类包装类Java是面向对象的语言,但并不是“纯面向对象”的,因为我们经常用的基本数据类型就不是对象。但我们在实际应用中经常需要将基本数据类型转化成对象以便于操作。为了解决这个不足,Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型相对应的类统称为包装类(Wrapper Class)。包装类均位于java.lang包。byte:B.原创 2021-01-29 21:10:38 · 85 阅读 · 0 评论 -
异常
Error和Exception简单分类:检查性异常:最具有代表性的检查型异常是用户错误或问题引起的异常,这是程序员无法预见的。运行时异常:运行时异常时可能被程序员避免的异常。与检查型异常相反,运行时异常可以在编译时被忽略。错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,他们在编译时也是检查不到的。ErrorError类对象由java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。Java虚拟机运行错误,当JVM不再有继续执行原创 2021-01-27 22:32:18 · 67 阅读 · 0 评论 -
内部类
内部类就是在一个类的内部再定义一个类,比如在A类中定义一个B类,那么B类相对A类来说就是内部类,而A类相对B类就是外部类。成员内部类静态内部类局部内部类匿名内部类原创 2021-01-27 01:39:11 · 83 阅读 · 0 评论 -
接口
普通类:只有具体实现。抽象类:具体实现和规范(抽象方法)都可以有。接口:只有规范,自己无法写方法,专业的约束,约束和实现分离,面向接口编程。接口的本质是契约,制定好以后大家遵守。OO的精髓,是对对象的抽象,最能体现这一点的就是接口。接口的作用:1.约束。2.定义一些方法,让不同的人实现。3.其中定义的方法,默认都是public abstract4.其中定义的常量,默认都是public static final5.接口不能被实例化,接口中没有构造方法6.implements可以实现多个接原创 2021-01-27 00:39:56 · 43 阅读 · 0 评论 -
抽象类
package com.oop.demo08;//abstract 抽象类//其本质还是类,就摆脱不了extends关键字,其局限性在于只能单继承,无法实现多继承//虽然java中没有多继承,但是接口可以多继承public abstract class Action { //约束 有人帮我们实现 //abstract,抽象方法,只有方法名字,没有方法的实现 public abstract void doSomething(); //1.不能new这个抽象类,只能靠子原创 2021-01-27 00:13:21 · 47 阅读 · 0 评论 -
static关键字详解
1.static关键字可以用来静态导入包:package com.oop.demo07;//静态导入包import static java.lang.Math.random;import static java.lang.Math.PI;public class Test { public static void main(String[] args) { System.out.println(random()); System.out.println(PI原创 2021-01-26 21:45:55 · 46 阅读 · 0 评论 -
封装、继承、多态
封装该露的露,该藏的藏我们程序设计时要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。封装(数据的隐藏)通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这成为信息隐藏。记住这句话:属性私有,get/set继承继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。关键字:extendsJava中类只有单继承,没有多继承继承是类与类之间的一种关系。除此之外,类和类之间的关原创 2021-01-26 21:28:03 · 83 阅读 · 0 评论 -
类与对象的关系
类与对象的关系类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。对象是抽象概念的具体实例。创建与初始化对象(构造器)使用new关键字创建对象使用new关键字创建的时候,除了分配内存空间以外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。类中的构造器也成为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:1.必须和类的名字相同2.必须没有返回类型,也不能写void作用:1.new本质是在调用构造原创 2021-01-26 13:47:32 · 111 阅读 · 0 评论 -
面向对象编程
面向过程&面向对象面向过程思想步骤清晰简单,第一步做什么,第二步做什么…面向过程适合处理一些较为简单的问题面向对象思想物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。面向对象适合处理复杂的问题,适合处理需要多人协作的问题!对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。什么是面向对象原创 2021-01-24 21:59:24 · 41 阅读 · 0 评论 -
数组
数组的定义数组是相同类型数据的集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。数组的声明和创建首先必须声明数组变量,才能在程序中使用数组。下面是声明数组的语法:dataType[] array;//首选方法或dataType array[];Java通过new操作符来创建数组,语法如下:dataType[] array=new dataType[arraySize];数组原创 2021-01-24 20:56:41 · 2357 阅读 · 0 评论 -
Java——方法
1. 何谓方法2. 方法的定义及调用3. 方法重载4. 命令行传参5. 可变参数6. 递归Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样有利于我们后期的拓展。方法的重载重载就是在一个类中,有相同的函数名称,但形参不同的函数。方法的重载的规则:原创 2021-01-23 16:01:28 · 65 阅读 · 0 评论 -
break和continue语句
break 在任何循环语句的主体部分,均可用break控制循环的流程。break 用于强行退出循环,不执行循环中的剩余的语句。(break语句也在switch语句中使用)continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。关于goto关键字:java中没有goto关键字,但将其作为保留字。...原创 2021-01-22 19:31:22 · 141 阅读 · 0 评论 -
增强for循环
Java5引入了主要用于数组和集合的增强型for循环。其语法格式如下:for(声明语句: 表达式){ //代码句子}声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。表达式:表达式是要访问的数组名,或者是返回值为数组的方法。...原创 2021-01-22 09:55:28 · 91 阅读 · 0 评论 -
运算符
详见原创 2021-01-21 13:29:26 · 70 阅读 · 0 评论 -
变量、常量的命名规范
Java基础—变量的命名规范变量的命名规范 所有变量、方法、类名:见名知意 类成员变量:首字母小写和驼峰原则:monthSalary 除了第一个单词以外,后面的单词首字母大写 局部变量:首字母小写和驼峰原则 常量:大写字母和下划线 MAX_VALUE 类名:首字母大写和驼峰原则 方法名:首字母小写和驼峰原则类变量用static声明实例变量从属于对象;如果不自行初始化,这个类型的默认值 0 0.0boolean布尔值:默认是false除了原创 2021-01-21 13:22:33 · 464 阅读 · 0 评论