![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java高级程序设计
好想学习呀
我也想写出优质代码
展开
-
Java泛型我真的悟了
说起这个泛型在刚开始学习的时候就很模糊,对于这东西看着就怕。今天花了很久的时间琢磨,先贴上一个b站up讲解的链接 Java泛型链接 讲的非常好。通配符 ? ? 并不等同于Object 而是代表无穷的意思如下写法是报错的,原因是 ?是大于Object类型的。 (大范围的对象约束的泛型方法,是能往里面放任何类型的子类对象,如果如下能成立必然在编译器报错。) add方法是被泛型约束的方法,不是泛型方法协变 ? extends XX协变代表:将被匹配的值转为 XX的子类,只有 XX的子类才可以匹配原创 2022-05-02 22:17:02 · 735 阅读 · 0 评论 -
泛型方法,泛型类,泛型上下限,泛型擦除,泛型数组
泛型类泛型类的申明是: 类名 <T,R,E,...> {} ,泛型类申明之后可以在成员方法里面使用泛型.泛型方法泛型方法: 方法修饰符 <T,R,E> 返回值类型 方法名 (形参(形参可以使用泛型,但是不支持形参里面不支持多态))泛型上下限? 代表泛型通配符,可以接收任何类型,类似于Object. <? extends Integer> 代表里面只能传递Integer的子类和Interger. <? super Integer>代表里面必须传递Int原创 2021-11-24 21:15:37 · 143 阅读 · 0 评论 -
发现集合的一个小知识
记录下来,集合里面添加了一个对象之后,那个对象再做修改只要是同一个地址的对象,那么这个集合里面添加的对象还是会修改.(String 字符串例外)package com.atguigu.demo;import lombok.Data;import org.junit.Test;import java.util.ArrayList;import java.util.List;/** * @author ct_start * @create 2021 -08 -12 **/public原创 2021-08-12 22:09:38 · 122 阅读 · 0 评论 -
OpenFeign,Spring,Mybatis 里面动态代理的核心思想
之前我一直认为,动态代理一直需要接口的实现类,今天在看Openfeign 源码的时候,发现不是这样的. 动态代理不一定需要接口的实现类,单一接口也可以直接实现动态代理.< 有实现类的动态代理的写法public class B { public static void main(String[] args) throws ClassNotFoundException { MyInvocationHandler myInvocationHandler = new MyInvoc原创 2021-08-07 13:04:28 · 157 阅读 · 0 评论 -
Java 中传值和传引用,以及String类型的传递的真正区别
首先Java 中只有值传递,这是毋庸置疑的!!1> 基本数据类型属于值传递 : Byte short char int long float double boolean2> 引用数据类型 :接口 类 数组 String StringBulider其次,不管是值传递还是引用传递都是传递的变量副本.但是,String 传递给形参会改变这个这个地址值. 所以输出后对原来所指向的地址值并没有影响.package Transfer_Value;/** * @author ct_s原创 2021-07-19 20:45:08 · 239 阅读 · 1 评论 -
枚举类的写法(自定义枚举类,和使用 enum关键字)
public static final NanChang Spring= new NanChang("春天","春暖花开"); // 先定义枚举类的属性 private final String SeasonName ; private final String Season; // 构造器私有化 为属性赋值 private NanChang(String seasonName,String season){ this.Seas.原创 2021-07-18 22:40:25 · 278 阅读 · 0 评论 -
匿名内部类的使用
一: 为什么要有匿名内部类① 匿名内部类的出现是为了解决某个类只调用一次,就不再使用,可以使用匿名内部类的方式。② 匿名内部类其实就是一个新的类,只是这个类没有名称二: 匿名内部类的使用举例定义一个 Animal 类public class Animal<T>{ String name ; int id; Animal(){ }; Animal(String name,int id){ this.name=name;原创 2021-04-09 20:57:39 · 981 阅读 · 1 评论 -
不带泛型集合和带有泛型的集合遍历的方式
import java.util.HashMap;import java.util.Map;import java.util.Set;/** * @Author:CT * @Date:2021/4/8 * @Description:PACKAGE_NAME * @Version 1.0 */public class MapTest { public static void main(String[] args) { // 带有泛型的方式获取集合中的值原创 2021-04-08 18:34:44 · 315 阅读 · 2 评论 -
java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=testconection5], {ExactMatc
卧槽!!!找这个错误找了一个小时,出现这个问题就是没有加@Test注解这Eclipes 真的很不友好,每加注解也能点着运行,在Idea里没有注解就无法点击运行。原创 2021-03-07 00:39:02 · 260 阅读 · 1 评论 -
Java中的方法引用的使用场景
方法引用的使用:1.使用场景:当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!2. 方法引用本质上就是lambda 表达式,而Lambda式作为函数式接口的实例,所以方法引用也是函数式接口3.使用格式: 类(或对象) :: 方法名4. 具体分为如下的三种情况 对象::非静态(实例方法) 类:: 静态方法 类::非静态方法5.方法引用的使用要求: 接口中的抽象方法的形参列表和返回值类类型与方法引用的方法的形参列表和返回值类型 相同原创 2021-02-24 10:42:42 · 804 阅读 · 1 评论 -
如何理解静态代理与动态代理
前言: 动态代理就是通过反射,根据被代理类创建出代理类,再调用被代理类里的方法,体现反射的动态性静态代理举例:特点:代理类和被代理类在编译期间,就确定下来了静态代理模式:package DynamicAgent;/** * @Author:CT * @Date:2021/2/20 * @Description:StaticAgent * @Version 1.0 *//* 静态代理举例: 特点:代理类和被代理类在编译期间,就确定下来了 */ inter原创 2021-02-21 23:50:37 · 115 阅读 · 1 评论 -
通过反射获取运行时类的对象,属性,构造器,方法,注解
整理了一下反射中常用到的知识点:先创建一个测试类Persons,用反射来获取类中的结构package ReflectionUse02;/** * @Author:CT * @Date:2021/2/18 * @Description:ReflectionUse02 * @Version 1.0 */@MyAnnotation(value = "Hello")public class Persons extends Creature<String> implements Co原创 2021-02-20 10:52:20 · 251 阅读 · 0 评论 -
为什么判断数组为空需要判断两下
记录一下,今天在练习的时候碰到一个问题“如何判断一个数组是否为空,它加了两个判断条件去判断,写的真的是太精辟了。我就把它记录下来了”数组为空的方式一:int [] i=null;System.out.println(i.length)此时的输出结果为Java.lang.NullPointerException数组为空的方式二: int[] b=new int[]{}; System.out.println(b.length);此时的输出结果为0总结:我们在判断 一个数组是原创 2021-02-19 18:43:33 · 532 阅读 · 0 评论 -
Java网络编程 TCP建立连接和UDP建立连接方式的实现
TCP建立连接的方式< 点击运行时,需要先运行服务器,再运行客户端。(原因:TCP建立连接时会进行握手,如果没有回应则会连接失败)package NetWorkPrograming;import org.junit.Test;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java原创 2021-02-17 00:13:53 · 269 阅读 · 0 评论 -
速记IO流中常用的几种流
一:IO流可以分为如下几个基本类操作数据的单位:字节流,字符流数据的流向:输入流,输出流流的角色: 节点流,处理流 流的体系结构 抽象基类 字节流(或文件流) 处理流:缓冲流(属于处理流的一种) InputStream FileInputStream BufferedInputStream OutPutStream FileOutStream BufferedOutPutStream Reader原创 2021-02-14 21:52:28 · 252 阅读 · 1 评论 -
使用IO流复制图片 输出图片的字节以及复制图片
package IOStraem;import org.junit.Test;import java.io.*;/** * @Author:CT * @Date:2021/2/12 * @Description:IOStraem * @Version 1.0 *//* 字节流的使用: ① 相较于字符流 字节流可以处理图片 视频 等以字节形式存储的文件 ② 使用方法与字符流类似 */public class IOStreamUse02 { @Test原创 2021-02-12 22:27:48 · 472 阅读 · 1 评论 -
大年初一打个学习卡 使用IO流复制文本
思路:使用基本的IO流操作读入数据与写出数据 /* 练习 :复制文本的操作 */ public void test3(){ File file =new File("Hello1.txt"); FileReader fileReader=null; File file1=new File("Hel.txt"); FileWriter fileWriter=null; int read原创 2021-02-12 20:07:43 · 86 阅读 · 2 评论 -
元视图法操作集合
元视图操作方法① Set keySet(): 返回所有key构成的set集合② Collection values():返回所有value构成的Collection集合③ Set entrySet() : 返回所有key——value 对构成的Set集合@Test/* 元视图操作方法 ① Set keySet(): 返回所有key构成的set集合 ② Collection values():返回所有value构成的Collection集合 ③ Set entrySe原创 2021-02-09 18:45:59 · 213 阅读 · 0 评论 -
Map接口中常用的方法汇总
增:put()删:remove()查:get()插入:put()遍历:迭代器遍历/* 一:Map接口当中常用的方法(抽象方法) */public class MapMethod {@Test public void test(){ //1.添加数据 put Map map=new HashMap(); map.put("AA",123); map.put(45,123); map.put("BB",56); map.put("原创 2021-02-09 18:44:07 · 213 阅读 · 0 评论 -
底层源码分析HashMap的实现原理
HashMap的底层实现原理① 以Jdk7为例进行说明:HashMap map=new HashMap();在实例化以后底层创建了一个长度是16的一维数组 Entry[] table.在执行过很多次put之后...在调用map.put(key,value)首先调用key所在类的hashcode方法计算哈希值,此哈希值经过某种算法计算以后,得到Entry数值的存放位置,如果此位置为空,则直接添加。--->添加成功 情况一 如果此位置上的哈希值与key的哈希值不同,此时的key添加成功原创 2021-02-09 18:38:16 · 73 阅读 · 1 评论 -
Java面试 关于HashSet
关于HashSet中索引是如何进行的package HashSetInterview;import java.util.Objects;/** * @Author:CT * @Date:2021/2/8 * @Description:HashSetInterview * @Version 1.0 */public class Person { private String name; private int age; public Person() {原创 2021-02-08 00:27:17 · 102 阅读 · 0 评论 -
集合如何变为数组,数组如何变为集合
集合转变为数组调用toArray() 静态方法 Object[] objects = collection3.toArray(); for (int i = 0; i < objects.length; i++) { System.out.println(objects[i]); }数组变为集合调用Arrays 类的静态方法 asList() List strings = Arrays.asList(new String[]{"AA", "BB",原创 2021-02-07 21:18:26 · 284 阅读 · 0 评论 -
底层源码分析Java集合Collection中的方法以及Collection实现类的
一: Java集合框架的概述集合和数组都是对多个数据进行存储操作的容器,简称 Java 容器(此时的存储主要指的是内存层面的存储,不涉及到持久化存储(持久化存储:硬盘,服务器))二:集合与数组的比较1.1数组在存储多个数据方面的特点> 一旦初始化以后长度就确定了,不可以对长度进行修改> 定义数组的时候需要指定数组的元素类型,数组定义好以后,数组元素的类型也就确定了> 也会表现出多态性1.2 数组的缺点> 一旦初始化后长度不可修改> 数组中提供的方原创 2021-02-07 21:02:11 · 144 阅读 · 1 评论 -
同一个Iterator迭代器只能遍历一次
今天在学习的时候,碰到用迭代器去遍历集合的时候一直没有元素输出,琢磨了好久我才知道 “同一个迭代器只能遍历一次,如果写了两个遍历,则第二个遍历无法输出”我的问题原因"我想删掉集合中的一个元素然后再遍历输出,结果输出结果还是没有删除之前的"public void test5(){ /* 迭代器当中的 remove方法 */ Collection collection=new ArrayList(); collection.a原创 2021-02-05 23:17:52 · 2674 阅读 · 7 评论 -
将Eclipes中的项目导入Idea中作为Mudle出现
Java学习到后面的时候,突然就换了软件,从Eclipse换成Idea了,之前的一些练习项目也需要转移,下面讲一讲具体的操作方法。找到Eclipse中存放项目的文件目录(一般在workspace下)再将需要导入的项目赋值到Idea中存放文件的目录(此处我赋值Libary文件到JavaBase目录下)此时Idea的目录中已经出现导入的文件(此时的文件是不可运行的,还需要在Idea中导入)4.再在Idea中导入文件(点击第二列上面的 “+” 号) 5.选择importModule6.选中Li原创 2021-02-04 00:24:01 · 294 阅读 · 6 评论 -
比较自定义类中的对象大小
一:使用背景说明 Java 中的对象,正常情况下只能进行比较:== 或 != 不能使用 < 或者 > ,但是实际开发中我们需要比较对象的大小如何实现:使用两个接口中的一个 Comparable 或 Comparator。二: 使用方法(Compare方法重写规则)< 如果当前对象this大于形参obj,则返回正整数;< 如果当前对象this小于形参obj,则返回负数;< 相等则返回0;三:使用举例创建一个商品类,比较里面的属性package Javaco原创 2021-02-03 11:54:30 · 285 阅读 · 0 评论 -
Java 计算任意两天之间相隔的天数
在学习了Java中的Date类相关的方法之后,我试着自己写了小程序可以计算任意两天之间相隔的天数,挺好用的。设计思路:运用Date类中提供的getTime()方法,获取输入的日期与1990-01-01 之间的毫秒差将获取到的两个毫秒数相减,再把相减得来的差值化简成天,就是相差的天数了package SimpleDateFormate;import java.text.ParseException;import java.text.SimpleDateFormat;import java.原创 2021-02-01 22:40:19 · 1510 阅读 · 3 评论 -
String类型与其他类型之间转换所调用的方法
String类型转化为int 型String 与 char型数组之间的转换String 与 byte[] 之间的转换public class StringMethod04 { /* String 与其他类型之间的转换 */ @Test // String类型转化为int 型 public void test(){ String s="123"; int a=Integer.parseInt(s); Syst.原创 2021-01-30 21:07:47 · 163 阅读 · 1 评论 -
String类中常用的方法(三)
替换字符串中指定位置的字符判断指定字符串是否全部匹配正则表达式public class StringMethod03 { @Test public void test(){ String s="恰似人间惊鸿晏"; System.out.println(s.replace('人','在'));//指定字符替换指定字符串中的某字符 System.out.println(s.replace("人间","四月"));//指定字符串替换某字.原创 2021-01-30 20:58:48 · 81 阅读 · 1 评论 -
String类中常用的方法(二)
判断某字符串是否以指定字符结束判断某字符串是否以指定字符开始判断某字符串内是否存在指定字符串判断某字符串是否存在指定字符中,返回该字符出现的位置指定从某个位置开始找,找到了就返回从起始位置开始数的索引public class StringMethod02 { @Test public void test(){ String s="HelloWorld"; System.out.println(s.endsWith("d"));// 是否以.原创 2021-01-30 20:55:29 · 55 阅读 · 0 评论 -
String 类中常用的方法(一)
获取指定位置的字符判断数组是否为空转换大小写将字符串首位部的空白省略输出转换大小写比较大小截取指定位置的字符串package StringClassUse;import org.junit.Test;/** * @Author:CT * @Date:2021/1/29 * @Description:StringClassUse * @Version 1.0 */public class StringMethod { @Test public void t.原创 2021-01-30 20:50:09 · 113 阅读 · 3 评论 -
sleep()方法和 wait()方法的区别
相同点在调用这两种方法后多久造成线程的阻塞不同点使用的位置不同:“sleep()方法能使用在任意位置”,“wait () 方法只能使用在同代码块内和同步方法中”声明的位置不同:“sleep () 方法声明在Thread类中”,“wait () 方法声明在Object类中”是否会释放锁:“sleep () 方法结束后不会释放锁,会继续抢占CPU资源”,“wait () 方法会释放锁,把资源让给其他线程执行”...原创 2021-01-28 20:25:37 · 87 阅读 · 0 评论 -
Java多线程解决生产者消费者问题
线程通信的应用:经典例题: 生产者/消费者问题生产者将产品交给店员,而消费者从店员处取走产品,店员一次只能持有固定数量的产品,如果店员试图生产更多数量的产品,店员会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品了,店员会通知消费者让他等一下,等到店中有产品时再来取走分析:是否多线程的问题 ? 是,生产者线程,消费者问题是否有线程安全问题 ? 是,店员或者产品的数量public class ProducterAndConsumers { public s原创 2021-01-28 17:27:28 · 129 阅读 · 0 评论 -
Java中解决线程安全问题的两种方式
一:同步代码块的方式解决线程的安全问题(共享数据)< 若创建线程的方式是继承Thread类,使用同步代码块(锁)时为了确定锁的唯一性,需要将对象声明为Static类型。< 若创建线程的方式为实现 Runnable 接口的方式,可以直接将对象放入,通过实现的方式创建多线程,本身就是共享了同一个对象。<使用同步代码块包围操作共享数据的操作时,必须确定不能多包围也不能少包围。未加锁时的卖票程序(继承Thread类的方式创建的多线程)public class WindowTest {原创 2021-01-26 00:00:38 · 194 阅读 · 1 评论 -
Java面试 关于两种线程创建方式的比较
通过一个多个窗口同时卖100张票来说明两种方式的差异开发中优先选择实现Runnable接口的方式 因为“接口实现的方式没有类的继承局限性”实现的方法更适合来处理多个线程共享数据(可以多个对象共享一个变量)Thread类本身也继承了Runnable接口一:子类继承 Thread类子类继承Thread类,并且重写Thread类中的run()方法,再通过子类的对象调用 start()方法class Window extends Thread{ private static int ti原创 2021-01-22 22:34:44 · 61 阅读 · 1 评论