Java
文章平均质量分 90
大桔骑士v
微软程序员,B站账号:大桔骑士v
展开
-
【Java学习笔记】70:借助Redis实现分布式锁
这节学习Java用Redis做分布式锁,来做秒杀场景卖货减库存的案例。最原始的减库存写法这里库存也存Redis里面,调减库存接口的时候判断一下大于0(还有库存)就拿出来减1。这里StringRedisTemplate是Spring Boot对Redis的封装,27行和30行的写法就等同于注释里面的用Jedis的写法,就是去调Redis的GET和SET命令。这样的代码中存在并发问题,在高并发的场景下,只要多个线程都执行读库存的操作,那么读出来的库存数目就是一样多的。比如三个线程都读出来200,然后都原创 2021-05-28 13:25:53 · 376 阅读 · 0 评论 -
【Java学习笔记】69:认识深拷贝,浅拷贝,clone()方法/序列化-反序列化实现深拷贝
拷贝就是将一个对象的全部属性copy到另一个同类对象中。即使得某个对象以一个同类对象为原型,通过拷贝其全部属性来实现对象的拷贝。同一个对象注意!只要是拷贝,就一定是两个不同的对象。两个相同的对象引用相同,表示如下: 这不是拷贝,只是对同一个对象引用起了不同的变量名,绝不可将同一个对象视为拷贝。浅拷贝简述浅拷贝就是只拷贝了对象的内容值,这个内容值包括基本类型值和引用值,...原创 2018-08-11 11:49:48 · 942 阅读 · 1 评论 -
【Java学习笔记】68:通过反射访问静态成员,越过泛型检查
访问静态成员静态成员的获取和普通的成员获取方法一致,但静态成员不需要在对象上执行(在反射中这样表述更合乎语法一些),所以不需要传入承载的对象,也就不需要获得类的对象。package testReflect;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;impor...原创 2018-04-15 16:46:56 · 1362 阅读 · 0 评论 -
【Java学习笔记】67:通过反射获取构造器以创建对象,越过权限检查使用成员
获得类的构造器通过反射获得类的Class对象,然后就要获得其构造器,才能去创建对象。package testReflect;import java.lang.reflect.Constructor;//自定的一个类class MyClass { private int a1;// 私有成员1 private double a2;// 私有成员2 //...原创 2018-04-15 11:18:58 · 303 阅读 · 0 评论 -
【Java学习笔记】66:认识Java中的Reflection(反射)机制,获取类的属性和方法
反射部分一直欠着,现在学框架和Servlet必须要学一下了。最近学习Struts2框架和Servlet时候,很多地方直接给出类名就可以去使用了,如在web.xml中配置Filter时:<filter> <filter-name>Filter1</filter-name> <filter-class>myFilter.Filte...原创 2018-04-15 09:45:27 · 398 阅读 · 0 评论 -
【Java学习笔记】65:认识Filter(过滤器),FilterChain(过滤链)及其实现
Filter和Servlet、Listener一同作为Java web开发的三大组件。runoob中将Filter归为Servlet,实际上Filter组件和Servlet组件是两回事,但Filter接口等确实是在javax.servlet.*中,大概可以认为它也属于servlet技术。Filter的成员方法Filter可以对web服务器上的web资源(如JSP页面、HTML页面等)进行拦...原创 2018-04-08 20:53:08 · 5969 阅读 · 0 评论 -
【Java学习笔记】64:实现Servlet,认识其核心方法
上篇通过课本上的实例学习了Servelt怎么使用,从这篇开始详细的学习其中的细节。实现Servlet实现一个自己的Servlet类,可以通过直接去实现Servlet接口,也可以去继承实现了Servlet接口的GenericServlet类,也可以去继承间接实现了Servlet接口的HttpServlet类,它们的关系如下: Servlet的核心方法建立一个继承了Servl...原创 2018-04-03 13:26:02 · 709 阅读 · 0 评论 -
【Java学习笔记】63:从一个使用Model2模式的例子认识Servlet
还是跟着课本学习, 昨天一天都在配CentOS,我的Deepin又崩了,我再也不用32位的Deepin了。简述Model1模式下采用的是JSP+JavaBean+JDBC,其中JSP既负责向用户展示页面样式,又要负责和JavaBean交互。从MVC的视角来看,JavaBean在做模型的功能,JSP负责视图和控制器这两方面的功能。 而在Model2模式下,采用JSP+Servlet...原创 2018-04-03 10:46:51 · 550 阅读 · 0 评论 -
【Java学习笔记】62:使用MyEclipse做Java Web开发的配置和流程
Eclipse-jee还是不如MyEclipse好用,还是跟着课本用MyEclipse吧。JDK的配置不再赘述。集成Tomcat在Window-Preferences-MyEclipse-Servers-Tomcat-Tomcat8.x下激活Tomcat8.x并提供安装路径: 展开Tomcat8.x,在JDK项中选择之前配置的额外下载安装的JDK: 集成好后,可以在此处运行测试: ...原创 2018-03-29 10:28:09 · 512 阅读 · 0 评论 -
【Java学习笔记】61:Linux下集成Eclipse-jee和Tomcat与常见问题
之前在Windows下安装过Tomcat,课本上也是以Windows下MyEclipse作为IDE集成Tomcat的,目前用Deepin系统下的Eclipse-jee,记录一下集成过程。安装Tomcat下载在Tomcat官网选择需要的版本(如8.5)下的download,选择Core下的.tar.gz包下载绿色版Tomcat。解压Tomcat的tar包解压开就是一个...原创 2018-03-24 11:45:08 · 395 阅读 · 0 评论 -
【Java学习笔记】60:客户端PC-后端程序服务器-数据库服务器之间的通信demo
简述经过不懈的努力,终于能把这三方的交互在不同电脑上实现了,学习完这个就可以着手做课程项目了。客户端向后端程序服务器发送请求,由后端程序去查询另一台服务器上的数据库,将查询结果返回给客户端。使用的数据库中的表是我的Java学习笔记55中最终的数据库表。程序基本按照课本上的例子敲,课本上有一处错误:服务器用来判断结果集是否为空的boolean值boo没有初始化为false。新...原创 2018-02-14 16:18:42 · 1097 阅读 · 0 评论 -
【Java学习笔记】59:DatagramPack和DatagramSocket做UDP通信
DatagramPack和DatagramSocketSocket是基于TCP协议的,先建立连接再进行通信的,还可以基于UDP用户数据报协议不建立连接直接发消息。DatagramPack类用于建立Java的UDP数据报对象,其中包含了数据的字节数组,目标主机ip地址和端口号,发送方和接收方的端口号需要一致。DatagramSocket类所创建的对象用于发送或接收前面的数据报对象,当使用...原创 2018-02-13 23:57:12 · 684 阅读 · 0 评论 -
【Java学习笔记】58:多线程Socket通信的demo
多线程Socket通信对于服务端来说,可能有多个客户端连接进来,从平衡上考虑就应当为每个客户端的连接单独开启一个线程,并且在main进程中继续用accept()等待其它用户连接。对于客户端来说,虽然不涉及多个服务端问题,但是数据输入流的readXxx()方法会引起阻塞,所以可以单独放到子线程中,不影响主线程的执行。书上的例子,改了改,这个例子有挺多细节值得考虑的。服务端Thread...原创 2018-02-13 20:19:17 · 314 阅读 · 0 评论 -
【Java学习笔记】57:认识网络编程
URL对象URL统一资源标识符,在Java中通常放在URL对象中使用。URL对象通常需要包含:①协议②地址③资源。import java.io.IOException;import java.io.InputStream;import java.net.MalformedURLException;import java.net.URL;import java.util.Scan...原创 2018-02-13 16:14:31 · 283 阅读 · 0 评论 -
【Java学习笔记】56:多线程基础回顾
图示多线程并发的情况,交替占用CPU资源。 实现多线程的方式继承Thread类public class Main { public static void main(String[] args) { MyThread mt = new MyThread();// 子线程处于新建状态 System.out.println("轮到主线程执行"...原创 2018-02-11 18:07:40 · 259 阅读 · 0 评论 -
【Java学习笔记】55:JDBC-MySQL基本使用,游标控制,CONCUR_UPDATABLE,更新/添加/删除
配置了这么久终于可以学习JDBC了,在这之前,给刚刚的表多插入一些表项:mysql> USE newDB;Database changedmysql> INSERT INTO NewUsr -> (id,name,age) -> VALUES -> (1,'lzh',20), -> (3,'sb',17), -...原创 2018-02-10 19:33:21 · 2796 阅读 · 0 评论 -
【Java学习笔记】54:CentOS下安装MySQL的JDBC驱动并尝试连接
准备工作打开MySQL服务[root@hostlzh lzh]# mysqld_safe &[1] 21768[root@hostlzh lzh]# 180209 12:55:11 mysqld_safe Logging to '/var/log/mysqld.log'.180209 12:55:11 mysqld_safe Starting mysqld daemon ...原创 2018-02-09 14:31:47 · 4860 阅读 · 0 评论 -
【Java学习笔记】53:JTree的使用(新选中事件和结点双击事件)
JTree是Swing里的一种树形结构,感觉有些场合能起到意想不到的作用。树结点新选中的事件说是”新选中”而不是”选中”或”单击”,因为监听器实际上是在看选中者的某个值有没有改变,连续的选中不会触发这件事,单击也仅仅是”选中”的一条不必要的途径,这些都不会产生TreeSelectionEvent对象。简述选中事件的监听比较方便,不能对每个结点注册监听器,只能对整棵树注册一个原创 2018-02-06 15:26:12 · 5213 阅读 · 0 评论 -
【Java学习笔记】52:MouseEvent事件的处理
简述不止一个接口用于处理MouseEvent事件:如果要处理在任何组件上都可以发生的按住、释放、移入组件、移出组件、单击触发的MouseEvent事件,应让监听器实现MouseListener接口。如果要处理任何组件上都可以发生的拖动鼠标和移动鼠标时候触发的MouseEvent事件,应让监听器实现MouseMotionListener接口。MouseListener接口的例子读取鼠标发生某些事件的位原创 2018-01-15 20:52:50 · 7401 阅读 · 3 评论 -
【Java学习笔记】51:FocusEvent,KeyEvent,WindowEvent事件的处理
简述FocusEvent当组件获得焦点、失去焦点时,都会触发FocusEvent事件。组件可以使用requestFocusInWindow()方法获取焦点,可以使用transferFocus()向下一组件传递焦点。要成为FocusEvent事件的监听器,需要实现FocusListener接口,即实现其中获得焦点时和失去焦点时的处理方法。KeyEvent当按住、释放、原创 2018-01-15 13:43:00 · 4326 阅读 · 0 评论 -
【Java学习笔记】50:DocumentEvent事件的处理
简述注意,不是文本区JTextArea能触发DocumentEvent事件,而是文本区的文档,即文本区使用getDocument()方法返回的文本对象,才是DocumentEvent事件的事件源。一个类作为DocumentEvent事件的监听器类,需要实现DocumentListener接口,需要覆写其中的changedUpdate,removeUpdate和insertUpdate三个抽原创 2018-01-14 12:18:47 · 3390 阅读 · 1 评论 -
【Java学习笔记】49:ItemEvent事件的处理
简述刚刚的文本框获得焦点时回车和按钮单击,都属于ActionEvent事件,也就是说文本框和按钮可以作为ActionEvent事件的事件源。而选择框的选中,和下拉列表的选中,都是在触发ItemEvent事件。不同类型的事件的监听器要实现的接口不同,对于ActionEvent事件,这个接口是ActionListener,实现其中的actionPerformed方法,方法传入的也是ActionEvent原创 2018-01-13 17:43:56 · 6393 阅读 · 0 评论 -
【Java学习笔记】48:盒内组件的支撑和ActionEvent事件处理
还是跟着课本敲代码。盒内组件的支撑用添加水平支撑和添加垂直支撑的方式,控制行式盒容器和列式盒容器中组件之间的距离。Main.javapublic class Main { public static void main(String[] args) { WindowBoxLayout wbl=new WindowBoxLayout();原创 2018-01-13 16:17:04 · 1322 阅读 · 0 评论 -
【Java学习笔记】47:菜单栏,菜单,菜单项,下拉列表,选项卡
对着书上敲。JFrame的内容面板import java.awt.Color;import java.awt.Container;import javax.swing.JFrame;public class exmp1 { public static void main(String[] args) { JFrame jf1=new JFrame("第1个窗口");原创 2018-01-12 19:50:47 · 10444 阅读 · 2 评论 -
【Java学习笔记】46:鼠标监听做动态分区分配的FF/BF/WF算法演示
操作系统课的上机题,用JFrame做了一个可视化的演示程序,这次新用到了鼠标监听的知识。Main.java//主类public class Main { static int MAXN=20;//一共20大小的内存 static int k=0;//1:FF/2:BF/3:WF选择算法 static String sf=null;//用来拼接给JFrame的标题 pu原创 2017-12-24 17:52:23 · 1082 阅读 · 0 评论 -
【Java学习笔记】45:优先级队列PriorityQueue和比较器Comparator
模拟进程调度时的优先数法和简单时间片轮转法,前者可以为进程设定以优先数PRIORITY为优先级,为了更好地并发,每次获得处理机后优先数减少3而重新选取。 在简单轮转法中则仅仅是一个普通队列,按照FIFO的方式出队获得处理机。如果要使用比较器Comparator给优先级队列,在创建时就应作为参数传入进去。Comparator通过覆写返回int值的正负来做判断,常使用匿名内部类。原创 2017-12-14 00:45:06 · 4477 阅读 · 0 评论 -
【Java学习笔记】44:JFrame布局管理
布局概览布局是指组建在容器中的排列方式,有: 布局方式 中文名 FlowLayout 流式布局 BorderLayout 边界布局 GridLayout 网格布局 CardLayout 卡片布局 BoxLayout 盒式布局 GridBagLayout 网格包布局 null 空布局(不使用布局)各个容器即便有嵌套,还是可以使用不同的布局原创 2017-10-22 14:59:45 · 5002 阅读 · 1 评论 -
【Java学习笔记】43:UDP一对一聊天
算是对之前写的那个Socket编程的改进,加了GUI,而且这次用的是UDP协议。*Server.javaimport java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import java.net.Datag原创 2017-10-10 21:25:37 · 726 阅读 · 0 评论 -
【Java学习笔记】42:改进JFrame可视化棋盘覆盖
*Main.javaimport javax.swing.JOptionPane;public class Main{ static int k=0;//规模的指数 static int[] ar= {1,2,4,8,16,32,64,128,256,512,1024};//查表快 static int[][] ju=null; static int tile=0;原创 2017-10-09 23:46:12 · 1397 阅读 · 0 评论 -
【Java学习笔记】41:学习用JFrame制作界面(两个界面空壳)
顶层容器Container是由JFrame直接获取的,然后JPanel是最重要的中间容器,其它容器往往直接嵌套给它。有些容器之间也会存在嵌套的关系,比如JRadioButton单选按钮要嵌套给ButtonGroup按钮组才能实现单选的功能。下面这个例子要特别注意setIcon(ImageIcon...)方法可以设置某些容器外观图片化,里面传递的是一个ImageIcon对象。如果不做别的事,那么这个ImageIco原创 2017-10-01 22:25:08 · 2512 阅读 · 0 评论 -
【Java学习笔记】40:棋盘覆盖问题的可视化(基于JFrame)
import java.awt.Color;import javax.swing.JFrame;public class Main{ static int[][] a=new int[16][16];//0表示没有,1表示填充,2表示原来的特殊方格 static public int colormask=1; private MyPanel mp=null;//自己定义的绘原创 2017-09-30 00:20:40 · 2133 阅读 · 0 评论 -
【Java学习笔记】39:简易Socket编程(基于java.net下的Socket和ServerSocket)
注释部分是我不能通过的代码方式,留着以后研究。import java.io.DataInputStream;import java.io.DataOutputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;//服务器端public class Server {原创 2017-09-25 20:07:32 · 437 阅读 · 0 评论 -
【Java学习笔记】38:三种泛型通配符
无界型(匹配所有类) 以遍历存某个类参数化的Collection集合(实现为很多泛型类)的对象为例,这里是遍历实际参数为Animal的集合:package day38;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;import java.util.List;//动物class原创 2017-08-30 23:50:34 · 613 阅读 · 0 评论 -
【Java学习笔记】37:泛型使用时要注意的约束
约束1:不能使用基本类型来作为泛型的抽象类型的实际参数 这是因为在JVM中是没有抽象类型的,所以泛型中的抽象类型会被替换成Object类型(该行为叫擦除),而基本类型不能直接赋值给Object类型,要使用基本类型则要使用它们的封装类。 需要注意的是:Object obj=1;虽然是可行的写法,但这涉及到自动装包解包的过程,即它实际上做的是:Object obj=new Integer(1);约束原创 2017-08-30 21:45:29 · 905 阅读 · 0 评论 -
【Java学习笔记】36:泛型的类型变量的限定
首先,在泛型编程中的类型参数只能被实例化为引用类型的,而不能是基本类型的。 在这里借用extends关键字做抽象类型的限定,即便是要求这个抽象类型它实现了一个接口。*对泛型类的限定package day36;class MyInt implements Comparable<MyInt>{ int i; public MyInt(int i) { this原创 2017-08-30 19:48:00 · 500 阅读 · 0 评论 -
【Java学习笔记】35:泛型类和泛型方法
泛型使程序代码与类型无关,从而实现程序代码的重用,如前面学的集合都有一个抽象的类型参数,在使用时可以被指定为任何数据类型。[1]泛型类package day35;//一个类型参数的泛型类class AnyType<T>{ private T obj; public AnyType(T obj) { this.obj = obj; } public T g原创 2017-08-29 23:52:07 · 733 阅读 · 0 评论 -
【Java学习笔记】34:Map接口及其实现类
Map是一个key:value键值对结构(key不能重复,value可以重复,通过key可以获得value),本节学习Map接口及其两个实现类HashMap和TreeMap。HashMap的key们相当于哈希表,TreeMap的key们相当于树。value则是挂载在key上的映射值。*测试HashMappackage day34;import java.util.Has原创 2017-08-29 21:19:34 · 498 阅读 · 0 评论 -
【Java学习笔记】33:Set接口及其实现类
List和Set都是collection接口下的,本节学习Set接口及其两个实现类HashSet和TreeSet。Set中的元素不可重复,无序。几个常用的方法remove(),clear()等和上一节的List一样,就不写了。HashSet相当于一个哈希表(操作时间复杂度一般是常数级),用hashcode和equals()保证不重复。TreeSet相当于一个树(操作时间复杂度一原创 2017-08-29 00:28:45 · 692 阅读 · 0 评论 -
【Java学习笔记】32:List接口及其实现类
List和Set都是collection接口下的,本节学习List接口及其两个实现类ArrayList和LinkedList。List是有序的,可重复的,可以为null的集合。数组可以存任何数据类型的元素,但List不能存基本数据类型,且数组容量固定,而List的容量动态更新,也因此List的效率要比数组低。*测试ArrayListpackage day32;import j原创 2017-08-28 21:35:13 · 586 阅读 · 0 评论 -
【Java学习笔记】31:查漏补缺3(传值和传引用,Eclipse单步调试)
2017年12月23日更新:Java中就是”传值”的,所谓的”传引用”,是指对于引用类型的对象,使用new+构造函数的方式创建实例后,会返回一个引用值,通过这个值能找到这个对象中的所有成员。然后把这个值赋给了这个类型的变量,本质上还是传值的!而引用对象之间的赋值运算,显然赋的就是这个引用值,所以说Java赋值的本质就是传值。原创 2017-08-28 18:04:56 · 498 阅读 · 0 评论