Java
文章平均质量分 84
_雨_
这个作者很懒,什么都没留下…
展开
-
springboot原理
Spring中的Bean对象管理指的是Spring容器对Bean对象的创建、依赖注入、生命周期管理等操作。Spring容器通过IOC(Inversion of Control)实现Bean对象的管理。Spring容器通过扫描指定的包或配置文件,将标注了特定注解(如@Component、@Service、@Repository等)的类实例化为Bean对象,并将其放入容器中统一管理。容器会自动处理Bean对象之间的依赖关系,并在需要时进行依赖注入。我们主要来学习以下的几方面。原创 2023-05-31 00:45:00 · 1174 阅读 · 2 评论 -
jdbc的入门
JDBC即Java DataBase Connectivity(Java数据库连接),是Java语言访问数据库的一种标准方法。JDBC提供了一组API,用于连接不同类型的数据库并执行SQL语句,以便与数据库进行交互。JDBC API包括两部分:一是JDBC驱动程序API,它提供了连接数据库、执行SQL查询和更新语句、处理结果集等功能;二是JDBC管理器API,它提供了管理驱动程序、连接池和数据源等功能。JDBC连接数据库的基本步骤如下:加载JDBC驱动程序。建立连接。创建Statement对象。原创 2023-05-30 01:00:00 · 750 阅读 · 0 评论 -
Java的反射机制(3)
反射机制是java实现动态语言的关键,也就是通过反射实现类动态加载。原创 2023-05-29 01:45:00 · 996 阅读 · 0 评论 -
Java的反射机制(2)
1.Class也是类,因此也继承Obiect类2.Class类对象不是new出来的,而是系统创建的3.对于某个类的Class类对象,在内存中只有一份,因为类只加载一次4.每个类的实例都会记得自己是由哪个 Class 实例所生成5.通过Class对象可以完整地得到一个类的完整结构,通过一系列API6.Class对象是存放在堆的7.类的字节码二进制数据,是放在方法区的,有的地方称为类的元数据(包括 方法代码变量名,方法名,访问权限等等)/*** 对Class类特点的梳理*/原创 2023-05-28 02:00:00 · 870 阅读 · 0 评论 -
Java的反射机制
Java的发射机制(Reflection)是指在运行时动态地获取类的信息并操作对象的能力。Java的发射机制允许程序在运行时检查和操作任意一个类、方法、属性等的信息,包括了类名、方法名、属性名、参数列表以及访问修饰符等。通过Java的发射机制,可以实现一些高级的功能,比如动态生成代理对象、动态生成类、动态配置对象等。同时,Java的一些框架也广泛应用了发射机制,比如Spring框架中大量使用了反射机制来实现依赖注入和AOP等功能。原创 2023-05-27 01:30:00 · 975 阅读 · 0 评论 -
Java网路编程-TCP
1.套接字(Socket)开发网络应用程序被广泛采用,以至于成为事实上的标准2.通信的两端都要有Socket,是两台机器间通信的端点3.网络通信其实就是Socket间的通信4.Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输5.一般主动发起通信的应用程序属客户端,等待通信请求的为服务端Netstat是一种命令行工具,在Windows、Linux和其他操作系统中都有,它用于显示网络连接、端口和协议统计信息。原创 2023-05-25 01:15:00 · 1326 阅读 · 0 评论 -
IO流的讲解(4)
Java中的Properties是一个可以保存键值对的类。它是Hashtable的子类,因此可以使用Hashtable的方法来查询和操作其中的元素。Properties类常用于读取和写入配置文件,例如数据库连接信息、应用程序设置等。Properties类中的键和值都是字符串类型。可以使用getProperty(String key)方法通过键获取对应的值。也可以使用setProperty(String key, String value)方法向Properties中添加新的键值对。原创 2023-05-24 11:05:13 · 613 阅读 · 0 评论 -
IO流的讲解(3)
BufferedInputStream类是为了提高读取效率而设计的。它在内部维护了一个缓冲区,每次从输入流中读取数据时,它会将数据读入到缓冲区中。然后,它将返回缓冲区中的数据而不是每次直接从输入流中读取数据。这可以大大减少访问底层输入流的次数,从而提高读取效率。BufferedOutputStream类也是为了提高写入效率而设计的。它在内部维护了一个缓冲区,每次进行写入操作时,它会将数据先写入到缓冲区中,然后再一次性将缓冲区中的数据写出到底层输出流中。原创 2023-05-23 23:11:29 · 580 阅读 · 0 评论 -
IO流的讲解(2)
1.节点流可以从一个特定的数据源读写数据,如FileReader、FileWriter [源码]2.处理流(也叫包装流)是“连接”在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,如BufferedReader、BufferedWriter [源码]原创 2023-05-22 19:39:04 · 376 阅读 · 0 评论 -
IO流的讲解(1)
IO流在我们的Java中使用还是非常重要的,那么在学习IO流之前。我们先来了解一些有关IO流相关的知识。我们IO流最后操作的还是我们磁盘中的文件,所以我们先了解一些文件相关的知识。原创 2023-05-21 21:52:21 · 526 阅读 · 0 评论 -
线程的基础(2)
我们先来看看一个日常生活中的售票,日常生活中有需要用到售票的地方,但是并没有那么简单,看一段模拟售票的代码代码演示:注意:下面这个模拟的售票系统,是会出现超卖的情况的,因为我们没有做线程同步的处理,因此就会发生票数超卖的情况,在现实生活中,很明显这样是不可以的,所以后面我们就会对该售票系统进行处理,处理超卖的情况。原创 2023-05-13 02:00:00 · 632 阅读 · 0 评论 -
线程的基础(1)
线程在开发中非常的重要,我们先来看看,线程相关的概念1.进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存空间。当我们使用迅雷,又启动了一个进程,操作系统将为迅雷分配新的内存空间。2.进程是程序的一次执行过程,或是正在运行的一个程序。是动态过程:有它自身的产生、存在和消亡的过程什么是线程1.线程由进程创建的,是进程的一个实体2.一个进程可以拥有多个线程1.单线程:同一个时刻,只允许执行一个线程2.多线程:同一个时刻,可以执行多个线程,比如:一个qq进程,可以同时打开多个聊原创 2023-05-12 01:00:00 · 497 阅读 · 0 评论 -
自定义泛型
class 类名{//...表示可以有多个泛型 成员interface接口名...修饰符返回类型 方法名(参数列表)代码演示:因为U没有声明,因此在编译的时候,会报错//10 会被自动装箱 Integer10, 输出Integer//Dogclass Apple {//自定义泛型类public void fly(E e) { //泛型方法//public void eat(U u) {}//错误,因为U没有声明。原创 2023-05-10 02:15:00 · 1139 阅读 · 0 评论 -
泛型的详解
理解:泛(广泛)型(类型)=> Integer,String,Dog1)泛型又称参数化类型,是Jdk5.0出现的新特性,解决数据类型的安全性问题2)在类声明或实例化时只要指定好需要的具体的类型即可。3)Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产ClassCastException异常。同时,代码更加简洁、健壮4)泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型。原创 2023-05-09 03:15:00 · 482 阅读 · 0 评论 -
集合练习(2)
因为我们的Person类没有实现Comparable接口,因此在底层的时候,会根据你传入进来的对象尝试将他转成Comparable这个类型,如果传入的对象没有实现改接口那么就报类型转换异常,//如果是一个链表 就依次循化遍历,期间如果发现相同的就直接break,如果没有发现相同的就直接加入到链表的最后一个位置。会先计算你的hash值,在转换成索引值,也就是在table表中的位置加入,如果当前位置为空。//如果已经有了会先进行判断,如果你的加入的对象的hash值和当前位置的hash值相同。原创 2023-05-08 02:15:00 · 528 阅读 · 0 评论 -
集合练习(1)
代码演示:思路分析:1.因为我们在打印的时候,是需要打印一个标题的信息即可,所以在使用构造器初始化的时候,只需要写一个带参数的构造器即可2.在进行倒叙遍历的时候,因为集合的下标是从0开始的,所以在i=arrayList,size()需要减一,否则会下标越界3.对于新闻字体的表示超过15个字的来说,就是对字符串一些方法的运用,并且需要用到向下转型,因为需要使用子类的属性和方法。原创 2023-05-07 02:15:00 · 373 阅读 · 0 评论 -
TreeMap源码分析,Collections工具类的使用
1)Collections是一个操作 Set、List和 Map等集合的工具类2)Collections中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作排序操作:(均为static方法)1.reverse(List):反转 List 中元素的顺序2.shuffle(List):对 List 集合元素进行随机排序3.sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序。原创 2023-05-06 03:15:00 · 465 阅读 · 0 评论 -
HashTable,Properties,TreeSet源码分析
1.Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存数据。2.他的使用特点和Hashtable类似3.Properties 还可以用于 从xxx.properties文件中,加载数据到Properties类对象,并进行读取和修改4.说明:工作后 xxx.properties文件通常作为配置文件,会在IO流的时候讲解//1. Properties 继承了 Hashtable。原创 2023-05-05 01:45:00 · 459 阅读 · 0 评论 -
HashMap底层结构和源码分析
1.(k,v)是一个Node实现了Map.Entry,查看 HashMap的源码可以看到2.jdk7.0的hashmap底层实现[数组+链表],jdk8.0底层[数组+链表+红黑树]原创 2023-05-04 02:45:00 · 724 阅读 · 0 评论 -
map接口的讲解
Map接口实现类的特点注意:这里是代码演示:注意在map接口中,是按照k-v的形式来存放数据的,即就是键值对,我们可以根据key找到对应的value。原创 2023-05-02 01:00:00 · 954 阅读 · 0 评论 -
LinkedHashSet源码分析
LinkedHashSet是HashSet的子类LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表LinkedHashSet 根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序(图),这使得元素看起来是以插入顺序保存的。LinkedHashSet不允许添重复元素。原创 2023-05-01 01:00:00 · 1100 阅读 · 0 评论 -
HashSet源码分析
源码分析:/*对HashSet 的源码解读1. 执行 HashSet()2. 执行 add()//这里的PRESENT 是一个空对象数组,起到占位符作用3.执行 put() , 该方法会执行 hash(key) 得到key对应的hash值 算法h = key.hashCode()) ^ (h >>> 16)根据我们传入进来的值,去计算hash值,在Table中存放的位置。原创 2023-04-29 02:30:00 · 1411 阅读 · 0 评论 -
LinkedList底层结构
1)LinkedList底层实现了双向链表和双端队列特点2)可以添加任意元素(元素可以重复),包括null3)线程不安全,没有实现同步。原创 2023-04-28 06:15:00 · 1026 阅读 · 0 评论 -
Vector底层结构和源码分析
1.Vector类的定义说明2)Vector底层也是一个对象数组,protected Objectl] elementData;3)Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized4)在开发中,需要线程同步安全时,考虑使用Vector通过上面的Vector类我们可以看到Vector实现了很多接口,实现了List接口,还实现了Serializable接口,就代表可串行化,数据可以在网络上传输。原创 2023-04-27 03:00:00 · 547 阅读 · 0 评论 -
ArrayList底层结构和源码分析
1.permits all elements, including null,ArrayList 可以加入null,并且多个2.ArrayList是由数组来实现数据存储的3.ArrayList 基本等同于Vector,除了ArrayList是线程不安全(执行效率高)看源码.在多线程情况下,不建议使用ArrayList。原创 2023-04-24 01:45:00 · 519 阅读 · 0 评论 -
Collection接口和List接口的讲解
1)Iterator对象称为迭代器,主要用于遍历Collection集合中的元素。2)所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了lterator接口的对象,即可以返回一个迭代器。3.lterator 的结构.4.Iterator 仅用于遍历集合,Iterator本身并不存放对象。原创 2023-04-23 03:00:00 · 457 阅读 · 0 评论 -
日期类的讲解与常用类习题
1.Date:精确到毫秒,代表特定的瞬间2.SimpleDateFormat:格式和解析日期的类SimpleDateFormat 格式化和解析日期的具体类。它允许进行格式化(日期->文本)、解析(文本->日期)和规范化.原创 2023-04-22 02:45:00 · 690 阅读 · 0 评论 -
Math类Arrays类System类
应用场景:1)BigInteger适合保存比较大的整型2)BigDecimal适合保存精度更高的浮点型(小数)原创 2023-04-21 03:15:00 · 622 阅读 · 0 评论 -
String类的讲解(2)
java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。很多方法与String相同,但StringBuffer是可变长度的。·StringBuffer是一个容器。/*** StringBuffer的基本介绍*///解读//1. StringBuffer 的直接父类 是 AbstractStringBuilder//2. StringBuffer 实现了 Serializable, 即StringBuffer的对象可以串行化。原创 2023-04-20 03:30:00 · 714 阅读 · 0 评论 -
包装类的详解
/1. 如果i 在 IntegerCache.low(-128)~IntegerCache.high(127),就直接从数组返回。我们看底层源码的时候,就知道,如果范围是在-128~ 127之间,那么值就是从catch数组中取的,1)jdk5前的手动装箱和拆箱方式,装箱:基本类型->包装类型,反之,拆箱。如果,不在这个范围当中,那么就是new 一个新的Integer。演示 包装类 和 基本数据类型的相互转换,2.有了类的特点,就可以调用类中的方法。4)其它包装类的用法类似,不一 一举例。原创 2023-04-18 03:45:00 · 237 阅读 · 0 评论 -
异常的讲解(2)
基本概念当程序中出现了某些“错误”,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息。1)定义类:自定义异常类名(程序员自己写)继承Exception或RuntimeException2)如果继承Exception,属于编译异常3)如果继承RuntimeException,属于运行异常(一般来说,继承RuntimeException)/*自定义异常当我们接收Person对象年龄时,要求范围在18-120之间,否则抛出一个。原创 2023-04-17 05:15:00 · 215 阅读 · 0 评论 -
第11章练习题(2)
2.因为默认遵守的是就近原则,如果直接输出name,那么会访问的都是B类中的属性,我们访问外部类中的属性,就需要使用类名.this.属性名去访问。2.在外部类中有一个属性是温度,并且是私有的属性,但是因为内部类最大的特点就是可以直接访问外部类中的私有属性,所以在内部类中写一个方法判断即可。3.因为外部其他类不可以直接访问内部类中的方法,因此我们要现在f1方法中创建好Air的对象,最后外部其他类创建外部类的对象,再去调用方法即可。1.使用了局部内部类,把内部类定义在方法中,VehiclesFactory类。原创 2023-04-15 02:30:00 · 524 阅读 · 0 评论 -
第11章习题(1)
这句话的时候,因为类的加载只会发生一次,所以在这里创建对象的时候,不会在加载类,因为我们通过构造器进行了赋值。2.因为Cat类和Dog类都继承了Animal,所以Animal是父类,因此父类可以指向子类的对象,父类的引用可以指向子类的对象,就是向上转型。所以,在Cat类和Dog类在继承Animal类的时候,都需要去实现抽象类中的抽象方法,否则会报错。因此在调用方法的show方法的时候,找到的是Cat类中的show方法。因此在调用方法的show方法的时候,找到的是Dog类中的show方法。原创 2023-04-14 02:30:00 · 176 阅读 · 0 评论 -
注解的使用
1)注解(Annotation)也被称为元数据(Metadata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。2)和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。3)在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替java EE旧版中所遗留的繁冗代码和XML配置等原创 2023-04-13 03:15:00 · 652 阅读 · 0 评论 -
枚举的使用
自定义类实现枚举1.不需要提供setXxx方法,因为枚举对象值通常为只读.2.对枚举对象/属性使用final+static共同修饰,实现底层优化.3.枚举对象名通常使用全部大写,常量的命名规范.4.枚举对象根据需要,也可以有多个属性/*** 演示自定义枚举的基本使用*///演示字定义枚举实现class Season {//类//描述//定义了四个对象, 固定.public static final Season SPRING = new Season("春天", "温暖")原创 2023-04-12 03:00:00 · 1111 阅读 · 0 评论 -
四种内部类的详解
说明:1.局部内部类是定义在外部类的局部位置,比如方法中,并且有类名。2.可以直接访问外部类的所有成员,包含私有的3.不能添加访问修饰符,因为它的地位就是一个局部变量。局部变量是不能使用修饰符的。但是可以使用final修饰,因为局部变量也可以使用final4.作用域:仅仅在定义它的方法或代码块中。5.局部内部类---访问---->外部类的成员[访问方式:直接访问]6.外部类---访问---->局部内部类的成员;原创 2023-04-11 03:00:00 · 413 阅读 · 0 评论 -
接口的使用
接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来。接口名{//属性//方法(1.抽象方法2默认实现方法3.静态方法)class 类名 implements 接口 { 自己属性;自己方法;必须实现的接口的抽象方法代码演示:注意:在jdk8后,可以有默认实现方法,需要使用default关键字修饰,接口中的方法默认都是抽象方法也就是说,方法不能有具体的实现,如果想要实现方法,那么需要使用default修饰,且jdk版本要在8后。原创 2023-04-10 03:15:00 · 1066 阅读 · 0 评论 -
抽象类的使用
1)用abstract关键字来修饰一个类时,这个类就叫抽象类访问修饰符 abstract 类名{2)用abstract关键字来修饰一个方法时,这个方法就是抽象方法访问修饰符 abstract 返回类型 方法名(参数列表);//没有方法体3)抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类()/*** 演示抽象类的基本使用*//*什么是抽象类。原创 2023-04-09 02:00:00 · 1215 阅读 · 0 评论 -
单例设计模式与final关键字
单例(单个的实例)1.所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某 个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法单例模式的两种方式:饿汉式实现步骤1. 将构造器私有化2. 在类的内部直接创建对象(该对象是static)3. 提供一个公共的static方法,返回 GirlFriend对象代码演示:饿汉式的缺点:饿汉式即使我们去使用类中的静态属性,也会导致类的加载,我们没有使用到这个对象,因为类的加载导致对象被创建,并且饿汉式,还有资源浪费的情况。原创 2023-04-08 03:00:00 · 401 阅读 · 0 评论 -
类方法与类变量与main方法语法
(1)static变量是同一个类所有对象共享(2)static类变量,在类加载的时候就已经生成了类方法也叫静态方法。形式如下:访问修饰符 static 数据返回类型 方法名【推荐】 static 访问修饰符 数据返回类型 方法名类方法的调用:类名.类方法名或者 对象名.类方法名前提是满足访问修饰符的访问权限和范围】/*** 演示静态方法的基本使用*///静态方法就不用创建对象实例,可以直接调用C.hi();C.say();class C {//类方法也叫静态方法。原创 2023-04-06 01:00:00 · 328 阅读 · 0 评论