Java
文章平均质量分 76
我是小水水啊
静
展开
-
Gradle基础
如果存在上面的4种方式的2种以上,gradle会按上面的1-4序号依次执行这些文件,如果给定目录下存在多个init脚本,会按拼音a-z顺序执行这些脚本,每个init脚本都存在一个对应的gradle实例,你在这个文件中调用的所有方法和属性,都会委托给这个gradle实例,每个init脚本都实现了Script接口。实际上有了 Gradle Wrapper 之后,我们本地是可以不配置 Gradle 的,下载Gradle 项目后,使用 gradle 项目自带的wrapper 操作也是可以的。原创 2023-10-11 13:54:48 · 104 阅读 · 0 评论 -
Gradle安装
Gradle官方用户手册:https://docs.gradle.org/current/userguide/userguide.html。`GRADLE_USER_HOME`` 相当于配置Gradle 本地仓库位置和 Gradle Wrapper 缓存目录。Gradle官方下载安装教程页面:https://gradle.org/install/然后在继续在path里面吧GREDLE_HOME下得bin目录加进去。Gradle官网:https://gradle.org/或者 1.8 版本以上。原创 2023-10-11 13:14:41 · 71 阅读 · 0 评论 -
maven基础
compile:通常使用的第三方框架的 jar 包这样在项目实际运行时真正要用到的 jar 包都是以 compile 范围进行依赖的。当 A 依赖 B,B 依赖 C 而且 C 可以传递到 A 的时候,A 不想要 C,需要在 A 里面把 C 排除掉。在 A 依赖 B,B 依赖 C 的前提下,C 是否能够传递到 A,取决于 B 依赖 C 时使用的依赖范围。A 依赖 B,B 依赖 C,那么在 A 没有配置对 C 的依赖的情况下,A 里面能不能直接使用 C?有了这些依赖,后面的子工程就不需要写版本号了。原创 2023-10-10 16:38:50 · 302 阅读 · 0 评论 -
Maven下载与文件配置
由于本地仓库的默认位置是在用户的家目录下,而家目录往往是在 C 盘,也就是系统盘。如果按照默认配置运行,Java 工程使用的默认 JDK 版本是 1.5,而我们熟悉和常用的是 JDK 1.8 版本。修改配置的方式是:将 profile 标签整个复制到 settings.xml 文件的 profiles 标签内。改成阿里云提供的镜像仓库,访问国内网站,可以让 Maven 下载 jar 包的时候速度更快。注意:D:\maven-repository 是我自己想放的位置,您可以改成你想放的位置。原创 2023-10-09 17:01:28 · 1736 阅读 · 0 评论 -
JDBC基础
他们的区别就在于statement,只能给字符串,可以形成SQL注入,而prepared可以给一个方法传入参数,则可以防止注入。BankService类(这里注册了驱动,建立了数据库的链接,然后用了try catch 保持事务的一致性,在关闭了资源)分割,在后面key=value&key=value形式传递参数。各个版本有各个的依赖包,想MySQL8.0 和MySQL5.0 应该下载对应的依赖包。获取链接的有三个参数的,两个参数的,一个参数的。String URL : 写法还是jdbc的三个参数的写法!原创 2023-08-25 03:13:44 · 257 阅读 · 0 评论 -
java密封类
不过这种要么可以继承,要么不能继承的机制不够灵活,有些时候我们可能想让某个类可以被某些类型继承,但是又不能随意继承,是做不到的。通过密封的类和接口来限制超类的使用,密封的类和接口限制其它可能继承或实现它们的其它类或接口。修饰的类的机制具有传递性,它的子类必须使用指定的关键字进行修饰,且只能是。在 Java 中如果想让一个类不能被继承和修改,这时我们应该使用。修饰的类可以指定子类。这样这个类就只能被指定的类继承。,可以将一个类声明为密封类。密封的类使用保留关键字。列出可以直接扩展(即extends)它的类。原创 2023-08-24 00:00:51 · 191 阅读 · 0 评论 -
java之record
他提到:开发人员想要创建纯数据载体类(plain data carriers)通常都必须编写大量低价值、重复的、容易出错的代码。如:构造函数、getter/setter、equals()、hashCode()以及toString()等。**实现一个简单的数据载体类,为了避免编写:构造函数,访问器,equals(),hashCode () ,toString ()等,Java 14推出record。还可以在record声明的类中定义静态字段、静态方法、构造器或实例方法。、构造器等结构,减少了代码编写量。原创 2023-08-24 00:01:10 · 153 阅读 · 0 评论 -
Java文本块
在Java中,通常需要使用String类型表达HTML,XML,SQL或JSON等格式的字符串,在进行字符串赋值时需要进行转义和连接操作,然后才能编译该代码,这种表达方式难以阅读并且难以维护。使用"""作为文本块的开始符和结束符,在其中就可以放置多行的字符串,不需要进行任何转义。因此,文本块将提高Java程序的可读性和可写性。如果字符串末尾不需要行终止符,则结束分隔符可以放在最后一行内容上。举例4:JSON字符串。举例2:HTML语句。原创 2023-08-24 00:01:25 · 193 阅读 · 0 评论 -
Java各个版本的switch表达式
JDK13中引入了yield语句,用于返回值。这意味着,switch表达式(返回值)应该使用yield,switch语句(不返回值)应该使用break。直接在 switch 上支持 Object 类型,这就等于同时支持多种类型,使用模式匹配得到具体类型,大大简化了语法量,这个功能很实用。yield和return的区别在于:return会直接跳出当前循环或者方法,而yield只会跳出当前switch块。switch 语句如果漏写了一个 break,那么逻辑往往就跑偏了,这种方式既繁琐,又容易出错。原创 2023-08-11 05:09:55 · 379 阅读 · 1 评论 -
instanceof的模式匹配(java)
instanceof 模式匹配通过提供更为简便的语法,来提高生产力。有了该功能,可以减少Java程序中显式强制转换的数量,实现更精确、简洁的类型安全的代码。原创 2023-08-11 05:02:20 · 251 阅读 · 1 评论 -
java 类型推断var
这不是JavaScript。var并不会改变 Java是一门静态类型语言的事实。编译器负责推断出类型,并把结果写入字节码文件,就好像是开发人员自己敲入类型一样。var不是一个关键字,而是一个类型名,将它作为变量的类型。不能使用var作为类名。原创 2023-08-11 04:59:49 · 104 阅读 · 0 评论 -
异常处理之try-catch资源关闭
都进行了改写,改写后资源类都实现了AutoCloseable或Closeable接口,并实现了close()方法。try的前面可以定义流对象,try后面的()中可以直接引用流对象的名称。在try的后面可以增加一个(),在括号中可以声明流对象并初始化。try中的代码执行完毕,会自动把流对象释放,就不用写finally了。1、在try()中声明的资源,无论是否发生异常,无论是否处理异常,都会自动关闭资源对象,不用手动关闭了。3、写到try()中的资源类的变量默认是final声明的,不能修改。原创 2023-08-11 04:58:06 · 458 阅读 · 0 评论 -
Java:Stream API
Stream 是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。Stream 和 Collection 集合的区别:**Collection 是一种静态的内存数据结构,讲的是数据,而 Stream 是有关计算的,讲的是计算。**前者是主要面向内存,存储在内存中,后者主要是面向 CPU,通过 CPU 实现计算。注意:①Stream 自己不会存储元素。②Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。③Stream 操作是延迟执行的。原创 2023-08-11 04:53:34 · 127 阅读 · 0 评论 -
java:方法引用与构造器引用
如果方法a的返回值类型与方法b的返回值类型相同,同时方法a的形参列表中有n个参数,方法b的形参列表有n-1个参数,且方法a的第1个参数作为方法b的调用者,且方法a的后n-1参数与方法b的n-1参数匹配(类型相同或满足多态场景也可以)如果方法a的形参列表、返回值类型与方法b的形参列表、返回值类型都相同,则我们可以使用方法b实现对方法a的重写、替换。如果方法a的形参列表、返回值类型与方法b的形参列表、返回值类型都相同,则我们可以使用方法b实现对方法a的重写、替换。类 :: 实例方法名。数组类型名::new。原创 2023-08-11 04:36:29 · 178 阅读 · 0 评论 -
Java:函数式(Functional)接口
只包含一个抽象方法(Single Abstract Method,简称SAM)的接口,称为函数式接口。当然该接口可以包含其他非抽象方法。你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明)。我们可以在一个接口上使用注解,这样做可以检查它是否是一个函数式接口。同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。在包下定义了Java 8 的丰富的函数式接口。原创 2023-08-11 04:24:05 · 2101 阅读 · 1 评论 -
Java:Lambda表达式
在语法格式三 Lambda 表达式中的参数类型都是由编译器推断得出的。Lambda 表达式中无需指定类型,程序依然可以编译,这是因为 javac 根据程序的上下文,在后台推断出了参数的类型。Lambda 表达式的类型依赖于上下文环境,是由编译器推断出来的。Lambda 表达式:在Java 8 语言中引入的一种新的语法元素和操作符。**语法格式三:**数据类型可以省略,因为可由编译器推断得出,称为“类型推断”Lambda 需要两个或以上的参数,多条执行语句,并且可以有返回值。Lambda 操作符。原创 2023-08-11 04:06:41 · 92 阅读 · 0 评论 -
Java反射机制
Reflection(反射)是被视为动态语言的关键,反射机制允许程序在运行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。原创 2023-08-11 02:43:26 · 86 阅读 · 0 评论 -
Java网络编程练习
需求:客户端连接服务器,连接成功后给服务发送“lalala”,服务器收到消息后,给客户端返回“欢迎登录”,客户端接收消息后,断开连接。原创 2023-08-11 00:40:59 · 134 阅读 · 0 评论 -
java_IO其它架包使用
Apahce软件基金会属于第三方,(Oracle公司第一方,我们自己第二方,其他都是第三方)我们要使用第三方开发好的工具,需要添加jar包。IO技术开发中,代码量很大,而且代码的重复率较高,为此Apache软件基金会,开发了IO技术的工具类。在导入commons-io-2.5.jar包之后,内部的API都可以使用。,大大简化了IO开发。IOUtils类的使用。原创 2023-08-06 17:49:38 · 157 阅读 · 0 评论 -
Java数据流、对象流
当JVM反序列化对象时,能找到class文件,但是class文件在序列化对象之后发生了修改,那么反序列化操作也会失败,抛出一个。如果需要让某个对象支持序列化机制,则必须让对象所属的类及其属性是可序列化的,为了让某个类是可序列化的,该类必须实现。对象流DataOutputStream中的方法:将上述的方法的read改为相应的write即可。说明:对象流的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。序列化的好处,在于可将任何实现了Serializable接口的对象转化为。原创 2023-08-06 17:46:36 · 545 阅读 · 0 评论 -
Java转换流
使用FileReader读取项目中的文本文件。由于IDEA设置中针对项目设置了UTF-8编码,当读取Windows系统中创建的文本文件时,如果Windows系统默认的是GBK编码,则读入内存中会出现乱码。那么如何读取GBK编码的文件呢?针对文本文件,现在使用一个字节流进行数据的读入,希望将数据显示在控制台上。此时针对包含中文的文本数据,可能会出现乱码。原创 2023-08-06 17:27:14 · 245 阅读 · 0 评论 -
java缓冲流
为了提高数据读写的速度,Java API提供了带缓冲功能的流类:缓冲流。字节缓冲流字符缓冲流缓冲流的基本原理:在创建流对象时,内部会创建一个缓冲区数组(缺省使用8192个字节(8Kb)的缓冲区),通过缓冲区读写,减少系统IO次数,从而提高读写的效率。原创 2023-08-06 17:13:27 · 123 阅读 · 0 评论 -
Java节点流:FileInputStream\FileOutputStream
抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。说明:close()方法,当完成流的操作时,必须调用此方法,释放系统资源。说明:close()方法,当完成流的操作时,必须调用此方法,释放系统资源。:创建文件输出流,写出由指定的 File对象表示的文件。: 创建文件输出流,指明是否在现有文件末尾追加内容。: 创建文件输出流,指定的名称为写出文件。类是文件输出流,用于将数据写出到文件。类是文件输入流,从文件中读取字节。原创 2023-08-06 16:42:41 · 167 阅读 · 0 评论 -
java.io.File类的使用
File类及本章下的各种流,都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),与平台无关。(体会万事万物皆对象)File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。File对象可以作为参数传递给流的构造器。想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。原创 2023-08-06 15:44:49 · 95 阅读 · 0 评论 -
Java泛型(Generic)
举例1:中药店,每个抽屉外面贴着标签举例2:超市购物架上很多瓶子,每个瓶子装的是什么,有标签Java中的泛型,就类似于上述场景中的标签。1、<类型>这种语法形式就叫泛型。<类型>的形式我们称为类型参数,这里的"类型"习惯上使用T表示,是Type的缩写。即:。:代表未知的数据类型,我们可以指定为,,等。类比方法的参数的概念,我们把,称为类型形参,将称为类型实参,有助于我们理解泛型这里的T,可以替换成K,V等任意字母。2、在哪里可以声明类型变量<T>原创 2023-08-03 18:45:34 · 236 阅读 · 0 评论 -
Collections工具类(java)
参考操作数组的工具类:Arrays,Collections 是一个操作 Set、List 和 Map 等集合的工具类。原创 2023-08-03 01:19:46 · 522 阅读 · 1 评论 -
Java之Map接口
HashMap是 Map 接口使用频率最高的实现类。HashMap是线程不安全的。允许添加 null 键和 null 值。存储数据采用的哈希表结构,底层使用一维数组单向链表红黑树进行key-value数据的存储。与HashSet一样,元素的存取顺序不能保证一致。HashMap判断两个key相等的标准是:两个 key 的hashCode值相等,通过 equals() 方法返回 true。HashMap判断两个value相等的标准是:两个 value 通过 equals() 方法返回 true。原创 2023-08-02 20:49:16 · 159 阅读 · 0 评论 -
java(Collection类)
Set接口是Collection的子接口,Set接口相较于Collection接口没有提供额外的方法Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败。Set集合支持的遍历方式和Collection集合一样:foreach和Iterator。Set的常用实现类有:HashSet、TreeSet、LinkedHashSet。TreeSet 是 SortedSet 接口的实现类,TreeSet 可以按照添加的元素的指定的属性的大小顺序进行遍历。原创 2023-08-02 19:57:49 · 336 阅读 · 0 评论 -
Java时间日期API
在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。UTC与格林尼治平均时(GMT, Greenwich Mean Time)一样,都与英国伦敦的本地时相同。中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8。:用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。类是一个抽象类,主用用于完成日期字段之间相互操作的功能。原创 2023-08-02 01:38:07 · 125 阅读 · 0 评论 -
java可变字符序列:StringBuffer、StringBuilder
因为String对象是不可变对象,虽然可以共享常量对象,但是对于频繁字符串的修改和拼接操作,效率极低,空间消耗也比较高。:在当前字符序列[fromIndex,最后]中查询str的最后一次出现下标。:在当前字符序列[fromIndex,最后]中查询str的第一次出现下标。:提供了很多的append()方法,用于进行字符串追加的方式拼接。:替换[start,end)范围的字符序列为str。:在当前字符序列中查询str的最后一次出现下标。:在当前字符序列中查询str的第一次出现下标。原创 2023-07-29 15:06:01 · 364 阅读 · 2 评论 -
java_String类常用方法
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。:返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。:返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。:返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。:返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。:测试此字符串从指定索引开始的子字符串是否以指定前缀开始。原创 2023-07-29 14:57:53 · 123 阅读 · 0 评论 -
java基础String类的特性
说明:实际上原来的“a”字符串对象已经丢弃了,现在在堆空间中产生了一个字符串s1+“b”(也就是"ab")。因此字符串的字符数组内容也不可变的,即String代表着不可变的字符序列。因为字符串对象设计为不可变,那么所以字符串有常量池来保存很多常量对象。String对象的字符内容是存储在一个字符数组value[]中的。说明:直接在字符串常量池中创建一个字面量为"ab"的字符串。说明:在字符串常量池中创建了一个字面量为"a"的字符串。说明:s3指向字符串常量池中已经创建的"ab"的字符串。原创 2023-07-29 14:26:22 · 190 阅读 · 0 评论 -
java生产者与消费者问题
生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品,店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;生产者与消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。原创 2023-07-28 03:07:53 · 285 阅读 · 0 评论 -
java线程安全问题及解决
锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象。注意:不能出现错票、重票。:synchronized 关键字直接修饰方法,表示同一时刻只有一个线程能进入这个方法,其他线程在外面等着。范围太大:因为一旦某个线程抢到锁,其他线程就只能等待,所以范围太大,效率会降低,不能合理利用CPU资源。对多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可以参与执行。此模式具有之前两个模式的优点,同时屏蔽了它们的缺点,是最好的单例模式。原创 2023-07-28 03:00:39 · 416 阅读 · 0 评论 -
Thread类的常用结构(java))
suspend()调用会导致线程暂停,但不会释放任何锁资源,导致其它线程都无法访问被它占用的锁,直到调用resume()。run()即刻停止,可能会导致一些清理性的工作得不到完成,如文件,数据库等的关闭。同时,会立即释放该线程所持有的所有的锁,导致数据得不到同步的处理,出现数据不一致的问题。每个线程都有一定的优先级,同优先级线程组成先进先出队列(先到先服务),使用分时调度策略。声明一个匿名内部类继承Thread类,重写run方法,实现打印[1,100]之间的偶数,要求每隔1秒打印1个偶数。原创 2023-07-28 02:07:45 · 116 阅读 · 0 评论 -
Java多线程
在核心类库中提供了Runnable接口,我们可以实现Runnable接口,重写run()方法,然后再通过Thread类的对象代理启动和执行我们的线程体run()方法。说明:Runnable对象仅仅作为Thread对象的target,Runnable实现类里包含的run()方法仅作为线程执行体。定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。而实际的线程对象依然是Thread实例,只是该Thread线程负责执行其target的run()方法。原创 2023-07-28 01:52:25 · 104 阅读 · 0 评论 -
java异常处理
在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美客户输入数据的格式问题读取文件是否存在网络是否始终保持通畅等等。异常:指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。异常指的并不是语法错误和逻辑错误。语法错了,编译不通过,不会产生字节码文件,根本不能运行。代码逻辑错误,只是没有得到想要的结果,例如:求a与b的和,你写成了a-b在编写程序时,经常要在可能出现错误的地方加上检测的代码,如进行x/y运算时,要检测分母为0数据为空输入的不是数据而是字符等。原创 2023-07-17 16:43:09 · 93 阅读 · 0 评论 -
Java包装类
int value;} }原创 2023-07-15 03:34:24 · 358 阅读 · 0 评论 -
java单元测试(调试)
JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个测试框架(regression testing framework),供Java开发人员编写单元测试之用。JUnit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。要使用JUnit,必须在项目的编译路径中引入JUnit的库,即相关的.class文件组成的jar包。原创 2023-07-15 03:00:24 · 407 阅读 · 0 评论 -
java注解(Annotation)
注解(Annotation)是从JDK5.0开始引入,以“@注解名”在代码中存在。Annotation 可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明。还可以添加一些参数值,这些信息被保存在 Annotation 的 “name=value” 对中。注解可以在类编译、运行时进行加载,体现不同的功能。一个完整的注解应该包含三个部分:(1)声明(2)使用(3)读取【元注解】【修饰符】 @interface 注解名 {【成员列表】 }原创 2023-07-15 02:50:26 · 159 阅读 · 0 评论