如是清欢
加油(ง •̀_•́)ง
展开
-
多线程之线程同步与三大不安全案例
线程同步 使用场景:出现并发,多个线程操作同一个资源。处理多线程问题时,多个线程访问同一个对象,并且某个线程还想修改这个对象,这个时候我们就需要线程同步。线程同步就是一种等待机制,多个需要同时访问此对象的线程进入对象的等待池,形成队列,等待前面线程使用完毕,下一个线程再使用。由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突的问题,为了保证数据在方法中被访问的正确性,在访问时加入锁机制(synchronized),当一个线程获得对象的排它锁,独占资源,其他线程原创 2021-06-30 22:29:58 · 173 阅读 · 2 评论 -
多线程之线程状态
## 线程状态五大状态1.创建状态:Thread thread = new Thread(); 线程对象一旦创建就进入了新生状态。2.就绪状态:当调用start()方法时,进入就绪状态,但不代表立即调度执行(等待cpu调度)。3.运行状态或同态:进入运行状态,线程才真正执行线程体的代码块。4. 阻塞状态:当调用sleep,wait或同步锁定时,线程进入阻塞状态,就是代码不往下执行,阻塞解除后进入就绪状态,等待cpu调度。5.死亡状态:线程中断或者结束,进入死亡状态,不能再次启动。停止线程原创 2021-06-24 10:09:48 · 2837 阅读 · 0 评论 -
多线程之Lambda表达式
Lambda表达式 Lambda表达式:避免匿名内部类定义过多,去掉一些没有意义的代码,去掉没有意义的代码,只留下核心的逻辑,其本质属于函数式编程的概念(jdk8新增!)。 new Thread (()->System.out.print(“Lamda表达式”)).start(); 使用lambda表达式必须是函数式接口。推导lambda表达式public class TestLambda01 { //静态内部类 static class Like2 i原创 2021-06-24 09:39:00 · 252 阅读 · 0 评论 -
多线程之静态代理模式
静态代理模式真实对象和代理对象都要去去实现同一个接口代理对象需代理真实角色。好处:代理对象可以做很多真实对象做不了的事情真实对象专注做自己的事情。示例代码:public class StaticProxy { public static void main(String[] args) { //多线程Thread底层使用了代理模式。 //You you = new You();//你要结婚 new Thread( ()->原创 2021-06-24 09:35:14 · 121 阅读 · 0 评论 -
多线程小练习----下载图片,买火车票,龟兔赛跑
练习thread实现多线程下载图片public class TestThread02 extends Thread{ private String url; private String name; public TestThread02(String url,String name){ this.url = url;//图片地址 this.name = name;//文件名 } //下载图片线程执行体 @Override原创 2021-06-24 09:24:22 · 50 阅读 · 0 评论 -
多线程概念以及线程创建的三种方式
多线程多任务,多线程Process进程1.在操作系统中运行的程序就是进程,一个进程可以有多个线程,如视频中听声音,看图像,看弹幕等。2.程序是指令和数据的有效集合,其本身没有任何运行的含义,是一个静态的概念。 而进程则是执行程序的一次执行过程,是一个动态的概念,是系统资源分配的单位。3.通常在一个进程中可以包含若干个线程,且至少有一个线程,不然没有存在的意义,线程是CPU调度和执行的单位。注意:很多多线程是模拟出来的,真正的多线程是值多个cpu,即多核,如服务器;如果是模拟出来的多线程,原创 2021-06-24 09:19:18 · 83 阅读 · 1 评论 -
缓冲流+对象流
文件流低级字节型 FileInputStream FileOutputStream字符型 FileReader FileWriter 字符集65279*缓冲字节型 BufferedInputStream BufferedOutputStream字符型 BufferedReader BufferedWriter数组流byte数组 ByteArrayInputStream ByteArrayOutputStreamchar数组 CharArrayReader Ch原创 2021-03-10 00:34:54 · 194 阅读 · 1 评论 -
练习一下:文件的复制
1.设计一个方法 文件的复制C://test//aaa.txt-------> D://某一个位置找到C盘中的源文件 内容读一遍去D盘中创建一个新文件 将内容写进去2.扩展设计一个方法 文件的加密/解密读取内容中间做一个小算法(加密) 可逆的写进去*3.扩展设计一个方法 文件夹的复制配合着递归配合着流示例代码:public class OperateFile { //设计一个方法 文件的复制// public void cop原创 2021-03-09 03:36:27 · 524 阅读 · 0 评论 -
字符型文件流
字符型文件流FileReader FileWriter只能操作纯文本文件(文件右键打开方式 记事本打开 能看懂) .txtFileReader 1.java.io包 2.继承 InputStreamReader Reader 3.构造方法 4.常用 read() read(char[])FileWriter 1.java.io包 2.继承 OutputStreamWriter Writer 3.构造方法 带file参数 带file,bo原创 2021-03-09 03:31:58 · 219 阅读 · 0 评论 -
字节型文件流
学习文件流—>顾名思义读取文件中的信息in将信息写入文件中out文件流按照读取或写入的单位(字节数)大小来区分字节型文件流(1字节)FileInputStream/FileOutputStream字符型文件流(2字节–1字符)FileReader/FileWriter字节型文件输入流FileInputStream:读取一个文件的内容1.包 java.io2.了解一下继承关系 InputStream类 字节型输入流的父类3.创建对象调用一个带File类型的原创 2021-03-09 03:25:27 · 276 阅读 · 0 评论 -
IO之文件夹遍历删除(递归)
1.文件夹的遍历----需要一个递归2.文件夹的删除----需要一个递归3.文件夹的路径(找父目录)现在还做不到 文件流来完成---->读取文件内容 将内容写入文件4.文件的复制5.文件的加密文件夹的复制示例代码:public class NewTestFile { //设计一个方法 用来展示(遍历)文件夹 // 参数-->file(代表文件或文件夹) /*public void showFile(File file){//D://tes.原创 2021-03-09 03:19:30 · 222 阅读 · 0 评论 -
IO之File类及常用方法
I/O相关输入/输出 流(数据流动)数据流动的方向 读数据(输入Input) 写数据(输出output)文件流 字符流 数据流(现在用处不大) 对象流 网络流…1.什么叫文件一种电脑的存储形式文件有不同的格式 .txt .doc .ppt .mp4 .jpg .rar …文件夹?----目录路径File----->与电脑上的文件或文件夹产生一一对应的映射关系File是一个类1.java.io包中2.文件或目录路径名的抽象表示形原创 2021-03-09 03:14:05 · 297 阅读 · 0 评论 -
集合的小练习:登录小流程
登录小流程能体会每一个不同集合的特点示例代码:public class LoginService { //设计一个方法 用来登录认证 一维数组// private String[] userBox = new String[]{"吴杨","吴上集团","Java"};// private int[] passwordBox = new int[]{123,666,888};// public String loingForArray(String name,Str原创 2021-03-09 03:06:55 · 144 阅读 · 0 评论 -
常用类之集合:HashMap+TreeMap
Map映射 通过某一个key可以直接定位到一个value值存储的方式以 键值对 存储 key-valuekey无序无重复 value无序可重复key无序还是一样,指的是存入顺序与取得顺序不一致key无重复当然指的是 元素不能一致1.map基本使用 HashMap TreeMap PropertiesHashMap1.包 java.util2.如何创建对象3.基本方法增删改查 增put(key,value) 存放一组映射关系 key-value 1原创 2021-03-09 03:04:34 · 118 阅读 · 0 评论 -
常用类之集合:HashSet+TreeSet
Collection以value形式存在Set 无序无重复1.具体的实现类HashSetTreeSet2.基本的使用3.无序 无重复无序:我们使用集合存放元素的顺序 集合内取出来的顺序不一致集合本身是有自己的算法排布顺序 hash算法HashSet---->(HashMap (数组+链表) 散列表 临接连表)1.java.util2.如何创建对象 无参数 有参数3.集合容器的基本使用增删改查 boolean = add(value) a原创 2021-03-09 02:58:55 · 130 阅读 · 0 评论 -
常用类之集合:Vector+Stack+Queue+LinkedList
ListVector类1.java.util包2.是ArrayList集合的早期版本 (StringBuffer早期 StringBuilder后来)Vector底层也是利用(动态)数组的形式存储Vector是线程同步的(synchronized) 安全性高 效率低3.扩容方式与ArrayList不同默认是扩容2倍 可以通过构造方法创建对象时修改这一机制4.构造方法5.常用方法Stack类 栈1.java.util包2.构造方法只有一个无参数3.除了继承自Vacton类原创 2021-03-09 02:04:40 · 156 阅读 · 0 评论 -
常用类之集合:ArrayList类
ArrayList类数组有一个缺点:一旦创建,程序运行期间长度不可以发生改变。但是ArrayList类出现解决了这一问题!数组的长度不可以发生改变。但是ArrayList集合的长度是可以随意变化的。对于ArrayList来说,有一个尖括号代表泛型。泛型:也就是装在集合当中的所有元素,全都是统一的什么类型。注意:泛型只能是引用类型,不能是基本类型。注意事项:对于ArrayList集合来说,直接打印得到的不是地址值,而是内容。如果内容是空,得到的是空的中括号:[]public class原创 2021-03-09 01:51:02 · 325 阅读 · 0 评论 -
常用类(工具类)之字符串相关
字符串相关String类所属的包java.lang 没有继承类 默认继承Object实现了三个接口 Serializable CharSequence Comparable<>String是一个非常特殊的引用数据类型,创建对象方式如下String str = “abc”; String str = new String(); String str = newString(“abc”); String str = new String(byte[] value)原创 2021-03-07 02:18:33 · 223 阅读 · 0 评论 -
常用类(工具类)之Scanner,包装类,数学类,日期类
Scanner包装类包装类(封装类) 1.5版本之后 自动拆装包byteByteshortShortintInteger 【特殊】longLongfloatFloatdoubleDoublecharCharacter 【特殊】booleanBoolean八个包装类都在同一个包下 java.lang包 不需要import导包直接使用八个包装类中有六个是与数字相关 都默认继承父类Number八个包装原创 2021-03-07 01:46:37 · 162 阅读 · 0 评论 -
捕获和抛出异常及自定义异常
捕获和抛出异常异常处理机制:异常处理的5个关键字:try、catch、finally、throw、throws捕获异常说到异常,我们当然会想到try catchfinally。当然如果用这个的话,被try块包围的代码说明这段代码可能会发生异常,一旦发生异常,异常便会被catch捕获到,然后需要在catch块中进行异常处理。try{//try监控区域 }catch(){//catch捕获异常 }finally{//处理善后工作,不是必须的,但假如IO流,资源原创 2021-03-05 05:29:19 · 1127 阅读 · 1 评论 -
异常(Exception)与错误(Error)
Error和Exception异常处理Error和Exception1.异常(Exception):指程序运行中出现的不期而至的各种状况,如文件找不到、网络连接失败、非法参数等。影响了正常的程序执行流程,但不至于程序崩溃检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的运行时异常:是可能被程序员避免的异常错误(Error):错误不是异常,而是脱离程序员控制的问题。例如当栈溢出时,一个错误就发生了3.异常体系结构:Java把异常当作对象来处理,并原创 2021-03-05 05:21:02 · 4269 阅读 · 3 评论 -
面向对象之内部类
内部类1.为什么使用内部类?使用内部类就是在前一个类的内部再定义一个类。比如,A类中定义了一个B类,则B类相对于A类来说称为内部类,A类相对于B类来说就是一个外部类。使用内部类的好处在于每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。1.1.使用内部类最大的优点就在于它能够非常好的解决多重继承的问题,使用内部类还能够为我们带来如下特性:1.内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独。2.原创 2021-03-05 02:35:06 · 140 阅读 · 1 评论 -
面向对象之接口
接口声明类的关键字是class,声明接口的关键字是interface普通类:只有具体实现抽象类:具体实现和规范(抽象方法)都有!接口:只有规范!自己无法写方法专业的约束!约束和实现分离:面向接口编程~接口就是规范,定义的是一组规则,体现了现实世界中“如果你…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏人;如果你是坏人,则必须欺负好人。接口的本质是契约,就像我们人间的法律一样。I 制定好后大家都遵守。00的精髓,是对对象的抽象,最能体原创 2021-03-05 02:24:11 · 182 阅读 · 1 评论 -
面向对象之抽象类
抽象类abstract 修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类抽象类,不能使用new关键字来创建对象,它是用来让子类继承的抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的子类继承抽象类,那么就必须实现抽象类中没有实现的抽象方法,否则该子类也要声明为抽象类//abstract 抽象类:类 extends:单继承 (接口可以多原创 2021-03-05 02:17:07 · 91 阅读 · 1 评论 -
static关键字详解
static关键字static 静态方法//static 静态方法 public class Student { private static int age;//静态的变量 多线程! private double score;//非静态的变量 public void run(){//非静态方法可以调用静态方法里的所有东西 go(); } public static void go(){//静态方法可以调用静态方法里的所有东西 }原创 2021-03-05 02:11:44 · 333 阅读 · 1 评论 -
instanceof与类型转换(引用类型)
instanceof与类型转换(引用类型)好好理解!!!public class Application { public static void main(String[] args) {//instanceof //Object > String //Object > Person > Teacher //Object > Person > Student Object object = new原创 2021-03-04 06:28:52 · 85 阅读 · 1 评论 -
面向对象之多态
多态动态编译:类型:可扩展性即同一方法可以根据发送对象的不同而采用多种不同的行为方式。一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)多态存在的条件有继承关系子类重写父类的方法父类引用指向子类对象注意:多态是方法的多态,属性没有多态性。instanceof (类型转换)引用类型注意事项:多态是方法的多态,属性没有多态父类和子类,有联系。类型转换异常!ClassCastException!多态存在的条件:继承关系,方法需要重写,父类引原创 2021-03-04 05:57:12 · 97 阅读 · 1 评论 -
方法的重写
方法重写重写:需要有继承关系,子类重写父类的方法!方法名必须相同 参数列表必须相同修饰符:范围可以扩大但不能缩小:public > Protected > Default > private抛出的异常:范围可以被缩小,但不能扩大;ClassNotFountException — Exception(大)重写,子类的方法和父类必须要一致,方法体不同!为什么需要重写?父类的功能,子类不一定需要,或者不一定满足!Alt + Insert ;重写overr原创 2021-03-04 05:43:45 · 83 阅读 · 1 评论 -
对super关键字的认识
supersuper注意点:super调用父类的构造方法,必须在构造方法的第一个super必须只能出现在子类的方法或者构造方法中!super和this不能同时调用构造方法!Vs this:代表的对象不同this:本身调用者这个对象super:代表父类对象的引用前提this:没有继承也可以使用super:只能在继承条件下才可以使用构造方法this():本类的构造super():父类的构造!//父类//在java中,所有的类,都默认直接或者间接继承Object//Per原创 2021-03-04 05:10:03 · 71 阅读 · 1 评论 -
面向对象之继承
继承继承是什么?继承的本质式对一批类的抽象,比如兔子类和羊类都属于食草动物类,那么它们就有一些通用的属性和方法,这些通用的属性和方法就可以抽象为食草动物类,而兔子类和山羊类作为食草动物类的子类,可以继承父类食草动物类的属性和方法,同时扩展各自特有的属性和方法,从而使得代码更加简洁,提高代码的复用性和可维护性。因此,继承是类与类之间的一种关系。除了继承以外,类与类之间的关系还有依赖、组合、聚合等等。继承关系的两个类,一个是父类,一个是子类,从意义上来讲两个类具有 “is a” 的关系。java原创 2021-03-04 04:57:35 · 123 阅读 · 1 评论 -
面向对象之封装
封装该露的露,该藏的藏我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。封装(数据的隐藏)通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。!!!!记住这句话就够了:属性私有,get/set封装的意义提高程序的安全性,保护数据隐藏代码的实现细节统一接口系统可维护性增加了public class Student { // 学生类//属性私有原创 2021-03-04 04:16:44 · 209 阅读 · 1 评论 -
面向对象之类与对象
什么是面向对象面向过程思想步骤清晰简单,第一步做什么,第二步做什么…面对过程适合处理一些较为简单的问题面向对象思想物以类聚,分类的思维模式,思考问题会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。面向对象适合处理复杂的问题,适合处理需要多人协作的问题!对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。面向对象编程(Object-Orie原创 2021-03-03 02:19:58 · 133 阅读 · 0 评论 -
数组的Arrays类,冒泡排序,稀疏数组
Arrays类数组的工具类java.util.Arrays由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作查看JDK帮助文档Arrays类中的方法都是static修饰的静态方法,在使用的时候来调用(注意:是“不用”而不是“不能”)具有以下常用功能:给数组赋值:通过fill方法对数组排序:通过sort方法,按升序比较数组:通过equals方法比较数组中元素值是否相等查找数组元素:通过binarySearch原创 2021-03-02 21:59:38 · 89 阅读 · 0 评论 -
个人对数组的总结与理解
数组什么是数组?前面在学习Java数据类型的时候曾经谈到,Java的数据类型分为基本类型和引用类型。基本类型包括整型、浮点型、字符类型、布尔类型四种。引用类型包括类、接口、数组等。数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素。数组定义是相同类型数据的集合描述的是相同类型的若干个数据,按照一定的先后顺序组合而成每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们声明原创 2021-02-27 09:55:50 · 277 阅读 · 0 评论 -
java实现简易计算器使用方法
简易计算器import java.util.Scanner;//简易计算器 用方法public class JiSuanQi { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("输入第一个数:"); int x=scanner.nextInt(); System.o原创 2021-02-26 18:46:37 · 468 阅读 · 0 评论 -
个人对方法的总结与理解
方法什么是方法?Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展 方法的命名规则:第一个单词首字母小写,后跟驼峰命名法(即之后的单词首字母都大写)对于之前常用的一条语句System.out.println(),有以下说明:println原创 2021-02-25 23:22:42 · 390 阅读 · 0 评论 -
break,continue及goto的用法
breakbreak在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)public class BreakDemo01 {//break break用于强行退出循环,不执行循环中剩余的语句。 public static void main(String[] args) { //,判断键盘输入星期几、 System.out.println(原创 2021-02-24 22:51:20 · 431 阅读 · 0 评论 -
java循环语句实现正三角,倒三角,正等腰三角形,倒等腰三角形,矩形的九九乘法表
九九乘法表//99乘法表public class ChenFaBiaoDemo01 { public static void main(String[] args) {//正三角 for (int i=1;i<=9;i++){ for (int j=1;j<=i;j++){ System.out.print(j+"*"+i+"="+(i*j)+"\t"); } Sy原创 2021-02-23 22:36:02 · 1575 阅读 · 0 评论 -
循环语句
顺序结构Java的基本结构就是顺序结构,除非特别指出,否则就按照顺序一句一句执行顺序结构是最简单的算法结构语句与语句之间,框与框之间是按照从上到下的顺序进行的, 它是由若干个依次执行的处理步骤组成的, 它是任何一个算法都离不开的一种基本算法结构选择结构if单选择结构语法:if(布尔表达式){//如果布尔表达式为true将执行的语句}if双选择结构实质就是if…else…语句:if(布尔表达式){//如果布尔表达式的值为true}else{//如果布尔表达式的值为false原创 2021-02-22 23:10:27 · 54 阅读 · 0 评论 -
Java用纯switch语句:输入某年某月某日,计算出这一天是这一年中的第几天
switch语句:输入某年某月某日,计算出这一天是这一年中的第几天?public class SwitchDemo03 { public static void main(String[] args) { //输入年份月份日期 Scanner scanner = new Scanner(System.in); System.out.println("请输入 year "); int year = scanner.nextInt();原创 2021-02-22 21:30:00 · 1605 阅读 · 1 评论