自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java反射 快速入门

反射1. 类加载器1.1 类加载当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化者三个步骤来对类进行初始化。如果不出现意外情况,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或类初始化。类的加载:就是指将class文件读入内存,并为之创建一个java.lang.Class对象任何类被使用时,系统都会为之建立一个java.lang.Class对象类的连接验证阶段:用于检验被加载的类是否有正确的内部结构,并和其他类协调一致准备

2021-08-19 19:45:08 114

原创 Java中的注解

注解注解入门什么是注解Annotation是从JDK5.0开始引入的新技术Annotation的作用:不是程序本身,可以对程序做出解释(这一点和注释(comment)没什么区别)可以被其他程序(比如:编译器等)读取Annotation的格式:注解是以 @注释名 在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(values=“unchecked”)Annotation在哪里使用?可以附加在package,class,meth

2021-08-19 10:59:04 79

原创 Java进阶之网络编程 一篇文章带你入门网络编程

第一章 网络编程入门1.1 软件结构C/S结构:全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RLPwAh1x-1629281239132)(C:\Users\zhou\AppData\Roaming\Typora\typora-user-images\image-20210818095851485.png)]B/S结构:全称为BrowserServer结构,是指浏览器和

2021-08-18 18:08:10 133

原创 Java IO流之字符流

字符流为什么会出现字符流由于字节流操作中文不是特别方便,所以java就提供了字符流字符流 = 字节流 + 编码表FileInputStream fis = new FileInputStream("myCharStream\\a.txt");int by;while ((by = fis.read()) != -1) { System.out.println((char) by);}fis.close();/* 一个汉字存储: 如果是GBK编码,占用

2021-08-17 12:02:57 74

原创 Java IO流之字节流

IO流字节流IO流的概述和分类IO流概述:IO:输入/输出(Input/Output)流:是一种抽象概念,是对数据传输的总称,也就是说数据在设备间的传输称为流,流的本质是数据传输IO流就是用来处理设备间数据传输问题的​ 常见的应用:文件复制;文件上传;文件下载[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zyYRWWFj-1629101681830)(C:\Users\zhou\AppData\Roaming\Typora\typora-user

2021-08-16 16:15:04 102

原创 File类的创建和使用

File类File类概述和构造方法File: 它是文件和目录路径名的抽象表示文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径而已,它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的。构造方法:File(String pathname)File f1 = new File("F:\\itcast\\java.txt");System.out.println(f1); //F:\itcast

2021-08-16 10:15:15 425

原创 线程池的概念和使用

线程池线程池的相关概念背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。思路:提取创建好多个线程,放入线程池中,使用时直接获取,使用完放回线程池中。可以避免频繁的创建销毁、实现重复利用。类似生活中的公共交通工具好处:提高响应速度(减少了创建新线程的时间)降低资源消耗(重复利用线程池中线程,不需要每次都创建)便于线程管理corePoolSize: 核心池大小maximumPoolSize: 最大线程数keepActiveTime: 线程没有任务时最多保持

2021-08-14 17:23:05 68

原创 生产者消费者模式以及两种解决方式

线程协作线程通信应用场景:生产者和消费者问题假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费。如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止。如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止。线程通信—分析这是一个线程同步的问题,生产者和消费者共享同一个资源,并且生产者和消费者之间相互依赖,互为条件。对于生产者,没有生产产品之前,要通知消费者等待,而生产

2021-08-14 16:45:11 419 1

原创 线程同步与锁

线程同步并发并发:同一个对象被多个线程同时操作上万人同时抢100张票两个银行同时取钱线程同步处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象,这时候我们就需要线程同步,线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用。线程同步的形成条件:队列+锁由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突问题,为了保证数据在方法中被访问时的正确性,在访问时加入锁机制syn

2021-08-14 14:59:19 201

原创 Collection集合

Collection集合[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hqTXqRhM-1628820527155)(C:\Users\zhou\AppData\Roaming\Typora\typora-user-images\image-20210811092134485.png)]Collection集合Collection集合概述和使用Collection集合概述是单列集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素JDK不提供此

2021-08-13 10:09:42 122

原创 多线程之守护线程

守护线程线程分为用户线程(例如:main)和守护线程(例如:gc)虚拟机必须确保用户线程执行完毕,虚拟机不用等待守护线程执行完毕。如,后台记录操作日志,监控内存,垃圾回收等待…代码实现://测试守护线程public class TestDaemon { public static void main(String[] args) { God god = new God(); You you = new You(); Thread t

2021-08-12 17:02:48 54

原创 线程优先级

线程优先级Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。线程的优先级用数字表示,范围从1-10.Thread.MIN_PRIORITY = 1;Thread.MAX_PRIORITY = 10;Thread.NORM_PRIORITY = 5;使用以下方式改变或获取优先级:getPriority(), setPriority()代码实现://测试线程的优先级public class TestPriori

2021-08-12 16:49:06 94 1

原创 Java中的线程状态

线程状态线程有五个状态:创建状态,就绪状态,运行状态,阻塞状态,死亡状态。五种状态之间的关系如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bglli6Vo-1628757076537)(C:\Users\zhou\AppData\Roaming\Typora\typora-user-images\image-20210812150748866.png)]停止线程不推荐使用JDK提供的stop()、destroy()方法。【已废弃】推荐线程自己停止下来

2021-08-12 16:31:39 83

原创 Collections类的概述和使用

Collections类Collections概述和使用Collections类的概述是针对集合操作的工具类Collections类的常用方法Collections.sort(List list): 将指定的列表按升序排序Collections.reverse(List<?> list): 反转指定的列表中元素的顺序Collections.shuffle(List<?> list): 使用默认的随机源排列指定的列表//创建集合对象List<Integ

2021-08-12 14:59:27 202

原创 Java中的Map集合

Map集合Map集合的概述和使用Map集合概述Interface Map<K,V> K: 键的类型;V: 值的类型将键映射到值的对象;不能包含重复的键;每个键可以映射到最多一个值举例:学生的学号和姓名​ 1001 张三​ 1002 李四​ 1003 王五创建Map集合的对象多态的方式具体的实现类HashMap//创建集合对象Map<String, String> map = new HashMap<Stri

2021-08-12 14:31:15 106

原创 Java中的泛型

泛型泛型概述泛型:是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型。它的本质是参数化类型,所做操作的数据类型被指定为一个参数。泛型定义格式:<类型>:指定一种类型的格式,这里的类型可以看成是形参<类型1,类型2…>:指定多种类型的格式,多种类型之间用逗号隔开,这里的类型可以看成是形参将来具体调用时候给定的类型可以看成是实参,并且实参的类型只能是引用数据类型泛型的好处:把运行时期的问题提前到了编译期间避免了强制类型转换

2021-08-12 10:43:47 73

原创 Lambda表达式

Lambda表达式为什么要使用lambda表达式:避免匿名内部类过多可以让你的代码看起来很简洁去掉了一堆没有意义的代码,只留下了核心的逻辑其实质属于函数式编程的概念(params) -> expression[表达式](params) -> statement[语句](params) -> {statement}函数式接口的定义:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。

2021-08-11 17:41:41 54

原创 静态代理模式

静态代理你:真实角色婚庆公司:代理你,帮你处理结婚的事结婚:实现都实现接口即可演示:实现静态代理对比Threadpublic class StaticProxy { public static void main(String[] args) { You you = new You(); //你要结婚 WeddingCompany weddingCompany = new WeddingCompany(you); weddingC

2021-08-11 16:56:27 42

原创 多线程-线程创建的三种方式

线程的创建的三种方式1.继承Thread类(重点)实现方法:自定义线程类继承Thread类重写**run()**方法,编写线程执行体创建线程对象,调用**start()**方法启动线程//创建线程方式一:继承Thread类,重写run()方法,调用start开启线程public class TestThread1 extends Thread{ @Override public void run() { //run方法线程体 for (int

2021-08-11 16:30:36 96

原创 iterator并发修改异常以及解决方法

iterator并发修改异常并发修改异常​ 在用迭代器遍历容器的时候,试图去修改容器中的元素,可能会引起并发修改异常(遍历的时候,相当于一个指针从0索引开始移动,当试图修改某个数据时,系统无法去操作这个指针)// ConcurrentModificationException产生原因迭代器是依赖于集合而存在的,在判断成功之后,集合当中增加了新的元素,而迭代器却不知道,所以就报错了,这个就叫并发修改异常。import java.util.ArrayList;import ja

2021-08-10 14:49:06 943

原创 Java中的常用类

Math类// Math.abs():取绝对值System.out.println(Math.abs(-88)); //88// Math.random(): 取[0,1)之间的随机数System.out.println((int)( Math.random()*100) + 1);//Math.ceil(double a): 取大于此数的最小整数,返回值为double类型System.out.println(Math.ceil(85.5)); //86System.out.println(M

2021-08-09 17:58:08 57

原创 SpringBoot快速入门-HelloWorld

SpringBoot-快速入门回顾什么时SpringSpring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson 。Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。Spring是如何简化Java开发的为了降低Java开发的复杂性,Spring采用了以下4种关键策略:1、基于POJO的轻量级和最小侵入性编程,所有东西都是bean;2、通过IOC,依赖注入(DI)和面向接口实现松耦合;3、基于切面(AOP)和惯例进行声明式编程;4

2021-07-27 19:55:21 87

原创 Java中的异常

异常Error和Exception的区别Error和Exception的区别:Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些异常时, Java虚拟机(JVM一般会选择终止线程);Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。ErrorError类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。Java虚拟机运行错误(Virtual MachineError),当JVM不再继续执行操作所需的内存资源时,将出现

2021-07-27 15:15:28 26

原创 Java的内部类

内部类内部类的定义内部类就是在一个类的内部再定义一个类,比如A类中定义一个B类,那么B类相对于A类来说就称为内部类,而A类相对B类来说就是外部类了。内部类的分类成员内部类:可以获得外部类的私有属性,调用外部类的方法public class Outer { private int id = 10; public void out(){ System.out.println("这是外部类的方法"); } public class Inner{

2021-07-27 14:16:58 32

原创 Java中的多态

多态注意事项多态式方法的多态,属性没有多态父类和子类,有联系 (类型转换异常!)ClassCastException存在的条件:继承关系方法需要重写不能重写的方法:static方法属于类,不属于实例final常量private方法父类引用指向子类对象 father f1 = new Son();多态类型转换父类引用指向子类的对象把子类转换为父类,向上转型把父类转换为子类,向下转型方便方法的调用,减少重复的代码,简洁抽象:封装、

2021-07-27 13:56:16 40

原创 Java中的super关键字

super注意点super调用父类的构造方法,必须在构造方法的第一个super必须只能出现在子类的方法或者构造方法中super和this不能同时调用构造方法super VS this关键字代表的对象不同:this:本身调用的这个对象super:代表父类对象的应用前提:this:没有继承也可以使用super:只能在继承条件下可以使用构造方法:this(): 本类的构造super(): 父类的构造...

2021-07-27 13:55:41 40

原创 Java中的static关键字

static关键字静态变量 vs 非静态变量定义不同:private static int age; //静态变量 多线程private double score; //非静态变量获取方式不同静态变量:类名.变量名 or 变量名非静态变量:对象.变量名System.out.println(Student.age);System.out.println(s1.score);System.out.println(s1.age);静态方法 vs 非静态方法定义不同:

2021-07-27 13:55:07 40

原创 抽象类与抽象方法

抽象类与抽象方法抽象类与抽象方法的定义抽象类定义:abstract关键字修饰的类抽象方法:abstract关键字修饰的方法,抽象方法只有方法名字,没有方法的实现,抽象方法由抽象类的子类来实现。public abstract class Action { public abstract void doSomething(); public void hello(){ System.out.println("hello"); }}继承了抽象类的子类,必须要

2021-07-27 13:53:41 40

原创 基于SSM的图书管理系统(快速入门)

整合SSM环境要求环境:IDEAMysql 8.0.25Tomcat 9Maven 3.6要求:需要熟练掌握MySQL数据库,Spring, Java Web及Mybatis知识,简单的前端知识;数据库环境创建一个存放书籍数据的数据库表CREATE DATABASE `ssmbuild`;USE `ssmbuild`;DROP TABLE IF EXISTS `books`;CREATE TABLE `books` ( `bookID` INT(10) NOT NUL

2021-07-25 15:45:43 267

原创 稀疏数组的定义(含Java实现代码)

稀疏数组稀疏数组定义当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同的值。把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模。如下图:上边是原始数组,下边是稀疏数组。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pTcIzqSO-1627199002716)(C:\Users\zhou\AppData\Roaming\Typora\

2021-07-25 15:43:56 64

原创 Java中的Arrays类的介绍及使用

Arrays类数组的工具类java.util.Arrays由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作查看JDK帮助文档Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用“使用对象来调用(注意:是”不用“而不是”不能“)具有以下常用功能:给数组赋值:通过fill方法int[] a = {1,2,3,4,9090,5151,151,13

2021-07-25 14:59:30 106

原创 Java实现冒泡排序代码

冒泡排序import java.util.Arrays;public class ArrayDemo07 { public static void main(String[] args) { int[] a = {5,4,3,2,1}; int[] sort = sort(a); System.out.println(Arrays.toString(sort)); } //冒泡排序

2021-07-25 14:58:32 68

原创 Java中的方法

Java中的方法方法是什么Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成一个功能,这样利于我们后期的扩展。static修饰的方法,可以无需对象直接调用:public static void main(String[] args) { int sum = add(

2021-07-22 20:07:10 45

原创 Java面试题:==和equals的比较

==和equals比较==对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址equals: object中默认也是采用==比较,通常会重写Objectpublic boolean equals(Object obj){ return (this == obj);}Stringpublic boolean equals(Object anObject) { if (this == anObject) { return true; }

2021-07-20 21:54:47 132

原创 Java面试题:JDK、JRE、JVM的区别和联系

JDK JRE JVMJDK:Java Develpment Kit java开发工具,专门给Java开发人员提供。JRE:Java Runtime Environment java运行时环境,提供给需要运行Java程序的人使用。JVM:Java Virtuak Machine java 虚拟机1.bin文件夹就是JVM。2.bin目录(JVM)+lib(类库)实际上就是JRE。3.JDK是由JRE和java工具(javac、java、jconsole)组成的。4.JDK包含了

2021-07-20 21:36:47 187 1

原创 Java面试题:什么是面向对象?谈谈你对面向对象的理解

面向对象什么是面向对象?对比面向过程,是两种不同的处理问题的角度面向过程更注重事情的每一个步骤及顺序,面向对象更注重有哪些参与者(对象)、及各自需要做什么比如:洗衣机洗衣服面向过程会将任务拆解成一系列的步骤(函数),1、打开洗衣机----->2、放衣服---->3、放洗衣粉---->4、清洗---->5、烘干面向对象会拆出人和洗衣机两个对象:人:打开洗衣机 放衣服 放洗衣粉洗衣机:清洗 烘干从以上例子能看出,面向对象比较直接高校,而面向对象更易于复用、扩展和

2021-07-20 21:20:19 1266

原创 Java基础之Scanner的用法

用户交互Scannernext和nextLinenext():一定要读取到有效字符后才可以结束输入。对输入有效字符之前遇到的空白,next()方法会自动将其去掉。只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。next()不能得到带有空格的字符串。注意:凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉public static void main(String[] args) { //创建一个扫描器对象,用于接收键盘数据 Scanner

2021-07-20 17:30:39 89

原创 Java基础之逻辑运算符及常见面试题

逻辑运算符短路运算:public static void main(String[] args) { ///短路运算 int c = 5; boolean d = (c < 4)&&(c++<4); System.out.println(d); //false System.out.println(c); //5}位运算常见面试题:2*8=16 怎么运算效率最高?使用位运算。2的二进制表示位0000 0010,左移3位得到

2021-07-20 16:29:18 179

原创 Java变量、常量和作用域

变量作用域类变量: static实例变量: 从属于对象;如果不自行初始化,这个类型的默认值局部变量:必须声明和初始化值public class Variable{ static int allClicks = 0; //类变量 String str = "hello world"; //实例变量 public void method(){ int i = 0; //局部变量 }}实例变量的默认值:数值类型:0 0.0布尔

2021-07-19 22:04:17 42

原创 Java基础-数据类型转换时注意的问题

数据类型转换类型转换强制转换:(类型)变量名 高–低自动转换:低–高类型转换中需要注意的问题不能对布尔值进行转换(布尔值占1位)不能把对象类型转换位不相关的类型在把高容量转换到低容量的时候,强制转换转换的时候可能存在内存溢出,或者精度问题//内存溢出int i = 128;byte b = (byte) i; //内存溢出System.out.println(i);System.out.println(b); //-128//精度问题System.out.prin

2021-07-18 16:13:23 88

空空如也

空空如也

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

TA关注的人

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