
java
文章平均质量分 79
分享学习java时的一些理解,笔记
一纸春秋
张鼎元的博客。
展开
-
解决时间戳转为日期格式总是为1970年的问题(currentTimeMillis()与数据集里面的数据戳)
原本需要时间戳转日期的时候,都是System.currentTimeMillis();获取当前时间戳,然后转换为日期格式但是最近处理一份数据集的时候,发现用菜鸟教程上面的代码转换而来的日期时间全部都是1970年将时间戳在线转换一下发现是正常的2017年,2016年,说明是代码需要调整一下int timeStamp = 1509418483;SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String sd = sd原创 2021-11-24 22:15:09 · 7681 阅读 · 0 评论 -
SpringBoot笔记 —— 利用redis数据库和mysql数据库查询获取数据
在之前写的SpringBoot项目中SpringBoot笔记 —— 使用MVC和三层架构模拟网站用户登录检查SpringBoot笔记 —— 数据库连接池使用数据库连接池,解决了多次创建连接的问题。现在又要开始思考一个新的问题,那就是如何提高查询效率。在上面的博客里面,我都是通过查询mysql数据库来获取相应的数据,但是当要查询的表里面的数据非常多的时候,比如数十万的数据,查询效率就会很低,往往要消耗两三秒的时间才能查询到一条数据。而在学习redis数据库之后,我们可以通过这个基于内存的数据库来提升原创 2021-11-16 22:37:10 · 4579 阅读 · 0 评论 -
Java笔记 —— 动态代理
先来看一段代码,模拟一下数据库的增删改查功能定义一个接口,这个接口是数据库的功能列表package test.dynamicagent;public interface User { public abstract void add(); //增 public abstract void delete(); //删 public abstract void update(); //改 public abstract void select(); //查}实现原创 2021-11-03 23:02:40 · 207 阅读 · 0 评论 -
Java笔记 —— 创建对象的过程(类加载,具体的初始化赋值过程)
package test1.demo;class Person{ String name; int age; static String nationality; public Person(){} public Person(String name,int age){ this.name = name; this.age = age; } public Person(String name,int age,Strin原创 2021-10-31 11:54:04 · 3435 阅读 · 2 评论 -
Java笔记 —— 设计模式(简单工厂模式,单例模式)
简单工厂模式简单工厂模式:定义一个工厂类,这个类可以根据传入的参数不同,而返回不同类型的实例对象。通常这些实例对象有着共同的抽象父类或者实现了相同的接口。这里相当于将不同类创建对象的功能,都放到了一个工厂类里面,然后通过这个工厂类来创建对象。我们需要做的是传入一个参数,而这个参数对应的对象具体是怎么创建的,这个对象又要求什么参数都不用考虑。假设这里有一家食品制作工厂,这家工厂可以生产各种口味的事物。当我们去购买食物的时候,我们会直接说一份很甜的食物,一份很辣的食物。而不会去具体的描述这个食物应该怎么被原创 2021-10-30 20:46:14 · 490 阅读 · 0 评论 -
Java笔记 —— 反射的两个实例
实例一通过配置文件获取文件名字和方法名字,并且借助配置文件的信息,用反射来调用对应的类的变量和方法configure.txt 配置文件的内容className = test.reflexDemo.PropertyDemo.StudentmethodName = function学生类package test.reflexDemo.PropertyDemo;public class Student { private String name; private int age;原创 2021-10-28 22:36:50 · 329 阅读 · 0 评论 -
Java笔记 —— 反射(概念,方法,实例)
动态语言(比如JavaScript等)在运行时可以改变自身结构,增加新的函数或者对象。动态语言的在编写的时候不必指定变量的类型静态语言(比如Java等)在运行时不能改变自身的结构,在编译期就要指定变量的类型。但是反射机制,让Java获得类似动态语言的特性,具有一定的动态性。.java是源程序,是我们编写的代码,.class是编译后的程序,本质上是一个二进制文件。类加载机制:当程序需要用到某个类的时候,如果这个类还没有加载到内存中,那么Java虚拟机就会将这个类加载到内存中进行初始化。具体初始化的步原创 2021-10-26 23:36:40 · 287 阅读 · 0 评论 -
Java 多线程 —— 定时器
定时器是一个线程工具,可以用于调度多个定时任务以后台线程的方式运行。比如说,在开发中,我们需要做一些周期性的操作,比如每隔三分钟就清空一次文件夹,用定闹钟的方式人为的清空肯定是不合适的。这时就可以通过Timer和TimerTask类来实现,定时完成具体任务的功能。这里需要注意的是,Timer和TimerTask都是线程,Timer是一个计时器,每个Timer对象都是单个后台线程,会依次执行每个任务。Timer() 创建一个新的计时器:void schedule(TimerTask task, lo原创 2021-10-25 20:46:55 · 2198 阅读 · 1 评论 -
Java 多线程 —— 生产者消费者问题
生产者消费者模型,是通过一个容器来解决生产者和消费者的强耦合问题。假设一个生活场景,我们去商店的货架上购买商品,如果这个商品有货,那么就拿走商品。而商店看到货架上的商品被拿走了,就及时补货,放上去新的商品。这里将这一过程抽象为一个资源类,一个消费者线程,一个生产者线程package test.MyThread.ProductDemo;public class Student { public String name; public int age; public boole原创 2021-10-24 11:05:39 · 2390 阅读 · 0 评论 -
Java 多线程 —— 同步代码块(解决线程安全问题)
目录火车站抢票问题同步代码块同步方法(this锁)同步方法,在public的后面加上synchronized关键字this锁静态同步方法火车站抢票问题由于现实中买票也不会是零延迟的,为了真实性加入了延迟机制,也就是线程休眠语句package test.MyThread.ticketDemo;public class RunnableThread implements Runnable{ private int ticket = 100; @Override public v原创 2021-10-23 21:53:08 · 13397 阅读 · 9 评论 -
Java笔记 —— 多线程
进程与线程进程:正在运行的程序,是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源线程:是进程中的单个顺序控制流,或者说就是一个单独执行路径一个进程如果只有一条执行路径,称之为单线程程序。一个进程如果有多条执行路径,称之为多线程程序。线程是包含在进程中的。并行与并发并行应该是物理上可以同时发生,两个或多个事件在同一时刻发生。比喻是电话来了,放下筷子打电话,打完电话再吃饭。因为只有一个人只有一张嘴,无法同时打电话和吃饭,所以需要两张嘴才能做到同时打电话和吃饭。强原创 2021-10-22 23:34:55 · 197 阅读 · 0 评论 -
Java笔记 IO —— 序列化和反序列化(local class incompatible异常解决)
序列化是指把一个Java对象变成二进制内容,本质上是一个byte[]数组。序列化的作用是把java对象按照byte[]数组的形式存储到文件里(也就是持久化到硬盘中,通常是保存在某一个文件中),或者通过网络传输出去(比如服务器之间的数据通信)反序列化就是把一串二进制数据(也就是byte[]数组)再转换回java对象序列化流:把对象按照流一样的方式存到文本文件或者数据库或者网络中传输等对象 – 流数据 :ObjectOutputStream反序列化:把文本文件中的流对象数据或者网络中的流数据给还原创 2021-10-22 20:23:22 · 3786 阅读 · 0 评论 -
Java笔记 —— IO(概念,方法,实例)
目录IO的相关概念什么时候使用字节流,什么时候使用字符流?字节输入流FileInputStream读取方式:字节输出流 FileOutputStream写入方式实现数据的追加字节缓冲输入流 BufferedInputStream字节缓冲输出流 BufferedOutputStream转换流字符输出流 OutputStreamWriter(字符转换流)字符输入流 InputStreamReader字符转换流的简便写法字符缓冲输入流 BufferedReader字符缓冲输出流 BufferedWriter特殊方原创 2021-10-21 23:17:19 · 548 阅读 · 0 评论 -
Java笔记 —— 递归
目录递归与嵌套的区别递归实例一实例二实例三实例四实例五递归与嵌套的区别递归: 方法定义本身调用方法本身的现象叫递归方法嵌套:Math.max(Math.max(a,b),c); 这仅仅是方法的嵌套使用递归的注意点:递归一定要有一个出口,也就是结束条件,否则就是死循环。可以用System.exit(0);退出递归调用递归的次数不能太多,否则就会发生内存溢出。因为每次递归都会占用一定的栈内存构造方法不能递归使用递归的思路:第一件事,需要明确递归方法的功能。比如说这个方法是要计算一个数的原创 2021-10-19 22:38:42 · 1069 阅读 · 0 评论 -
Java笔记 IO —— File
Java中用File类来抽象的表示硬盘上的各种文件,File是文件和目录(文件夹)路径名的抽象表现形式File类File类的构造方法:File类的创造功能删除功能重命名功能:判断功能获取功能一获取功能二例子方法一、遍历File数组方法二、文件名称过滤器File类的构造方法:File(String pathname)File(String parent,String child)File(File parent,String child)import java.io.File;public原创 2021-10-19 20:56:03 · 151 阅读 · 0 评论 -
Java笔记 —— 异常(实例详解)
Java中的异常Throwable分为三种情况Error:严重的错误,是我们无法处理的问题,比如OOM,内存溢出问题运行时异常RuntimeException:编译器不会检查的异常,可以处理也可以不处理。但这个异常我们通常不处理,因为运行时异常一般都是我们写的程序代码出了问题。与其抛出解决异常,不如直接把代码修改正确就行。比如数组下标越界,访问null指针,类型转换错误等。编译时异常: 除了RuntimeException运行时异常以外的异常都是编译时异常。这种异常必须要处理,如果不处理程序就无法.原创 2021-10-18 22:18:38 · 766 阅读 · 0 评论 -
Java笔记 —— 网络编程
目录计算机网络的定义网络通信协议的分类:网络编程的目的:IP端口号TCP与UDPTCP的三次握手(建立连接)TCP的四次挥手(断开连接)TCP实例实例一、传输字符串实例二、传输文件UDP实例计算机网络的定义计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。网络通信协议的分类:网络通信协议,可以比喻成大家都说普通话,所以我们可以正常的交流。但如果我们每个人都说一种方原创 2021-10-17 22:17:31 · 345 阅读 · 0 评论 -
Java笔记 —— lambda
用普通的方法来完成集合的筛选用这种测试类的方法来测试代码@Test public void show1(){ List<Student> list1 = filterStudentAge(list); for(Student s:list1){ System.out.println(s); } System.out.println("==================");原创 2021-10-16 23:03:03 · 295 阅读 · 0 评论 -
Java集合 —— Map集合
Collection接口包含List接口与Set接口——List 元素有序(存储顺序和取出顺序一致),元素可以重复实现List接口的三个具体类有 ArrayList,vector,LinkedList——Set 元素唯一,且元素无序(存储顺序和取出顺序不一致)实现Set接口的两个具体类有: HashSet,TreeSetMap集合Map接口和Collection接口的不同:Map集合的特点:Map集合的功能:这里使用的具体实现类是HashMap类,其特点是map集合的遍历方式一、根据键找值,借助S原创 2021-10-16 16:20:09 · 7685 阅读 · 2 评论 -
Java笔记 —— Set集合的排序原理(源码分析)
TreeSet: 元素唯一,且元素的顺序可以按照某种规则进行排序排序的方式有两种:自然排序:传入的数据类型的类实现了Comparable接口比较器排序:在创建集合的时候,调用带参数的构造方法,这个参数是实现了Comparator接口的子类对象TreeSet的特点:有序,不可重复,底层使用红黑树算法自然排序TreeSet集合举例1.传入的元素为Integer类型时创建TreeSet集合对象时,会构造一个新的,空的树组,根据其元素的自然排序进行排序无参构造内部元素默认是自然排序impor原创 2021-10-15 23:08:57 · 1328 阅读 · 0 评论 -
Java笔记 —— Set集合的去重原理(源码分析)
Set集合去重原理Set集合举例1. 集合添加的元素是String类型时2. 集合添加的元素是自定义对象时查看相关的源码自定义类重写equals与hashcode方法LinkedHashSet存储字符串元素的原理图Set集合举例1. 集合添加的元素是String类型时import java.util.HashSet;public class demo1 { public static void main(String[] args) { HashSet<String&原创 2021-10-15 21:17:14 · 2132 阅读 · 0 评论 -
Java笔记 —— 泛型
泛型的引入List集合中是可以加入不同类型的元素的,比如下面这样public class demo1 { public static void main(String[] args) { List list = new ArrayList(); list.add("hello"); list.add("java"); list.add(12); Iterator iterator = list.iterator()原创 2021-10-14 22:14:39 · 427 阅读 · 0 评论 -
Java笔记——XML入门
xml指的是,可扩展性标记语言(eXtensible Markup Language)xml被发明的目的是传输和存储数据xml的功能是规范数据格式,让数据具有结构性,容易阅读和处理<root> <bookname>java</bookname> <bookprice>15</bookprice></root>这段有一个根元素(也可以叫根节点) < root >。还有两个子节点,< bookname &g原创 2021-10-13 15:21:48 · 161 阅读 · 0 评论 -
ConcurrentModificationException集合的并发修改异常(问题解决)
ConcurrentModificationException:并发修改异常当方法检测到对象并发修改的时候,但是不允许这种修改就抛出此异常迭代器是依赖与集合而存在的,在遍历迭代器中元素的时候,如果往集合中添加元素,迭代器又不知道你往集合中添加了元素,这时候就会报错。所以在迭代器遍历的时候,不能去通过集合去修改元素举例,在集合的java字符串后面添加hello字符串这是错误代码package review.ListDemo1;import java.util.ArrayList;import原创 2021-10-12 22:11:36 · 240 阅读 · 0 评论 -
java集合笔记二 —— List集合(概念方法,list集合去重,模拟栈结构,list排序)
方式一、利用一个新集合去重package review.ListDemo1;import java.util.ArrayList;import java.util.List;public class demo7 { public static void main(String[] args) { List list1 = new ArrayList(); list1.add("hadoop"); list1.add("hive");原创 2021-10-12 20:39:01 · 295 阅读 · 0 评论 -
Java集合笔记一 —— Collection
当我们想用一个容器来存放学生对象的时候,我们可以选择对象数组package review.ListDemo1;public class demo1 { public static void main(String[] args) { //创建学生对象数组,长度为3 Student[] arr = new Student[3]; //创建3个学生对象,并赋值 Student s1 = new Student("feng", 18)原创 2021-10-11 23:19:34 · 159 阅读 · 0 评论 -
正则表达式的贪婪匹配和非贪婪匹配
正则表达式默认是贪婪匹配,即每个规则都尽可能多的匹配非贪婪匹配的每个规则具体匹配到哪里,可以总结为尽可能少的匹配匹配到下一个规则为止来看例子package RegularExpression;import java.util.regex.Matcher;import java.util.regex.Pattern;public class demo5 { public static void main(String[] args) { //正则表达式的贪婪匹配原创 2021-10-11 20:07:55 · 2691 阅读 · 0 评论 -
Java学习笔记——正则表达式
正则表达式元字符重复匹配匹配开头和结尾范围匹配元字符package RegularExpression;public class demo3 { public static void main(String[] args) { //字符精准匹配 String s1 = "abc"; System.out.println("abc".matches(s1)); //true System.out.println("xyz".ma原创 2021-10-10 22:55:48 · 149 阅读 · 0 评论 -
Java学习笔记——单元测试(JUnit框架)
在进行单元测试之前需要安装JUnit框架,这里可以看一下我之前的博客记录一下安装JUnit框架时遇到的问题以及解决办法安装好之后,就可以来写单元测试的代码了什么是单元测试呢?单元测试就是针对最小的功能单元编写测试代码。Java程序最小的功能单元是方法,因此,对Java程序进行单元测试就是针对单个Java方法的测试。首先来写一个方法这是项目的结构图上面的mathDemo是编写的需要测试的类下面的mathDemoTest是用来测试mathDemo的测试类通常我们都在类名的后面加上Test原创 2021-10-10 15:51:16 · 321 阅读 · 0 评论 -
记录一下安装JUnit框架时遇到的问题以及解决办法
单元测试需要在idea中安装插件Junit,这里可以看这篇博客来安装JUnit4IDEA中使用JUnit4(单元测试框架)超详细!我在这里顺带说一下我遇到的问题首先是找不到插件的问题这里我也尝试了网上说方法,包括且不限于修改idea配置,使用手机热点,重启等等,最后我是点了这里,在一段时间的更新重装后,就可以正常找到各种插件了接着是第二件事,安装JUnit框架后,写代码的时候发现缺失jar包,这里还需要下载导入jar包。这里需要说的是,导入jar包有两种方式,一种是本地自己导入,一种是利用原创 2021-10-10 14:32:05 · 691 阅读 · 0 评论 -
Java笔记——String类各种方法的使用总结(附带实例)
String类的各种方法String类的判断方法String类的获取方法String类的转化方法字符串的替换方法去除字符串两边的空格按字典顺序比较两个字符串练习用的题目String类的判断方法String类实现判断功能的方法有boolean equals(Object obj) ——比较字符串内容是否相同boolean equalsIgnoreCase(String str) —— 比较字符串内容是否相同,并且忽略大小写boolean contains(String str) —— 是否包含指定原创 2021-10-09 22:04:41 · 1061 阅读 · 0 评论 -
Java学习笔记——String(字符串的创建,字符串值不能更改的理解,String s = ““与String s = new String()的区别,常量相加与变量相加的区别)
字符串的简单理解,就是由多个字符组成的一串数据叫字符串, 也可以看作一个字符数组Java中所有的字符串文字(例如"abc")都被实现为此类的实例(对象)。1、字符串字面值"abc"也可以被成为一个字符串对象2、字符串是常量,一旦被赋值,就不能被改变构造方法: public String() public String(byte[] bytes) public String(byte[] bytes,int offset,int原创 2021-10-09 12:53:15 · 1881 阅读 · 0 评论 -
Java学习笔记——内部类(成员类,局部类,匿名类)
内部类:把类定义在其他类的内部,这个类就被称为内部类举例:在类A中定义一个类B,类B就被成为内部类内部类的访问特点:1、内部类可以直接访问外部类的成员,包括私有。2、外部类要访问内部类的成员,必须创建对象。内部类举例package review.InnerDemo;class Outer{ int num = 20; class Inner{ int num = 10; public void show(){ Syst原创 2021-10-08 22:16:08 · 399 阅读 · 0 评论 -
Java学习笔记——多态(实例详解)
多态是某一事物,在不同时刻体现出来的不同的状态就比如猫,狗,狼都是动物,我们可以说猫是动物,说狗是动物但我们不能说动物是猫,动物是狼。也不能说猫是狗,或者狗是狼。上面这几点都会在多态中体现出来多态的前提:类之间要有继承的关系子类要有对父类方法的重写(不重写也不会报错,但这样体现不出来多态的意义)父类的引用变量指向子类对象下面看一个多态的简单例子package test.DuoTaiDemo;class Animal{ public void eat(){ S原创 2021-09-28 21:03:19 · 10270 阅读 · 4 评论 -
继承里面的重写问题(父类与子类方法重名时,调用的优先级问题)
class Person2{ public void show(){ System.out.println("父类Person2的show方法"); show1(); } public void show1(){ System.out.println("父类Person2的show1方法"); }}class Student2 extends Person2{ public void show(){原创 2021-09-28 19:54:02 · 8906 阅读 · 1 评论 -
super与this在成员变量,成员方法,构造方法方面的作用(改变调用顺序)
1、当父类与子类的成员变量不一样的时候,根据变量名进行访问2、当父类与子类的成员变量的名字一样的时候子类中查找变量的顺序:1)现在子类方法局部范围内找,找到就返回2)子类中成员范围内去找,找到就返回3)在父类的成员范围内去找,找到就返回4)如果在父类中都没有找到该变量,报错package extendsDemo;class Person{ int num = 10; public void show2(){ int num3 = 50; }}c原创 2021-09-27 22:04:44 · 1157 阅读 · 1 评论 -
Java笔记 —— 局部代码块,构造代码块,静态代码块
这篇博客是把之前上课时的笔记整理一下,加上我个人的理解和注释,还有一些例子发出来局部代码块,构造代码块,静态代码块局部代码块构造代码块静态代码块首先在Java中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块局部代码块局部代码块:在方法中出现;作用:限定变量的生命周期,及早释放,提高内存利用率在同一个类出现的时候,多个局部代码块的执行顺序是自上而下的。public class Demo1 { public static原创 2021-09-27 19:43:15 · 711 阅读 · 0 评论 -
利用Set集合去重
直接来看一道例题,题目来源于廖雪峰老师的网站,这里是对这道题目给出两种解答方式方法一//在类里面实现Comparable接口,来解决TreeSet里面的元素是类的对象的情况/* 在聊天软件中,发送方发送消息时,遇到网络超时后就会自动重发, 因此,接收方可能会收到重复的消息,在显示给用户看的时候,需要首先去重。 请练习使用Set去除重复的消息 */import java.util.*;public class SetDemo3 { public static voi原创 2021-09-27 16:36:22 · 5844 阅读 · 0 评论 -
集合List和Map——重写equals和hashCode方法(集合元素是类的对象)
本文的重点是List重写equals方法来使用contains与indexOf方法Map,相同内容的不同对象,应该返回相同的value值解决了当List集合里面的元素是类的对象,而不是String,Integer等类型时,怎么使用contains方法和indexOf方法解决了map的key值是类的对象时,怎么用具有相同内容的不同对象,获取相同的value值List重写equals方法来使用contains与indexOf方法equals方法用于contains与indexOf方法中,equals可以原创 2021-09-26 16:56:02 · 1719 阅读 · 0 评论 -
Map的value值是类的实例化对象时的处理方法与遍历
处理方法package test.MapDemo;import java.util.*;public class MapDemo4 { public static void main(String[] args) { Student s = new Student(12,"zhang"); Student s1 = new Student(15,"zhao"); Map<Integer,Student> stu = new HashM原创 2021-09-25 22:09:19 · 1476 阅读 · 0 评论