
java从入门到精通
专注于java基础、源码、框架及调优。
二百四十九先森
这个作者很懒,什么都没留下…
展开
-
JUC之CountDownLatch
CountDownLatch1、概述 CountDownLatch是java.util.concurrent中的一个同步工具类,允许一个或多个线程等待,直到其他线程运行完后接着执行。 CountDownLatch的核心是一个构造方法和两个普通方法。 构造方法中可传入一个int类型的count值,该值代表内部计数器的初始值,一旦传入无法更改。 countDown()方法每被CountDownLatch对象调用一次,CountDownLatch内部计数器的count值就会减一。.原创 2021-11-16 14:41:40 · 531 阅读 · 0 评论 -
记录一下Java包装类的常用方法
package com.atguigu.base_type;import org.junit.Test;/** * 测试java八大基础类型对应的引用类型的方法 * byte、char(2字节)、short、int、long、float(4字节)、double * 从左往右类型自动转换,从右往左需要强制转换。强制转换可能精度丢失。 * boolean不能类型转换。 * 装箱:Integer num1=12;或者 Integer num2=new Integer(12); *.原创 2021-11-01 17:49:55 · 283 阅读 · 0 评论 -
String类测试:concat_ws函数java实现、创建了几个对象、对象比较、format方法
package com.atguigu.string;import org.junit.Test;import java.io.UnsupportedEncodingException;/** * 本来包含String类的所有常用操作。 * 底层实现了Serializable, Comparable接口,这意味着String类可以序列化,可以进行比较。 * String类重写了equals方法,使得equals比较的是字符串的内容,==比较的是地址 * S.原创 2021-11-01 10:35:32 · 548 阅读 · 0 评论 -
Java代码获取日期、日期转换以及MySQL中first_day()、last_day()、timestampdiff()、date_add()函数的代码实现
package com.atguigu.time;import org.apache.commons.math3.fitting.leastsquares.EvaluationRmsChecker;import org.junit.Test;import scala.tools.reflect.Eval;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;.原创 2021-10-25 15:35:45 · 1047 阅读 · 0 评论 -
org.aeonbits.owner详解
1、定义 Owner是一个java库,其目标是通过java属性文件来最小化处理应用程序的代码。 说人话: 以注解的方式来简化属性配置。2、引入依赖 g:org.aeonbits.owner a:owner v:1.0.9 以上适用于java1.7及之前的jdk版本,java1.8时a坐标应该是owner-java83、使用 A、接口继承Config。 B、接口上添加@Config.Sources({属性文件1[,.原创 2021-09-13 11:43:11 · 558 阅读 · 0 评论 -
静态代理模式
我们知道,在Thread类、Runnable接口、自定义线程类之间实现了静态代理的设计模式,以下进行简单的模拟,方便我们对线程和静态代理的一个更加具象的认识。被人追接口beiRenZhui(Runnable):/* * 本接口是被人追接口,每一个女孩子都有被人追的特性, * 所以都要实现这个接口 * 本接口就相当于Runnable接口 */public interface be...原创 2018-12-14 10:11:24 · 151 阅读 · 0 评论 -
三大工厂模式总结及代码实现
工厂设计模式根据抽象程度可以分为分为三类:简单工厂模式,工厂方法模式,抽象工厂模式。1、简单工厂模式: 由抽象产品类,具体产品类和工厂类组成。 在抽象产品类中定义产品的共有特征属性。 在具体产品类中定义某个产品具体的特征。 ...原创 2019-03-31 16:13:30 · 303 阅读 · 0 评论 -
团队开发工具之SVN介绍配置
文中软件百度云连接:链接:https://pan.baidu.com/s/14pka4g4NuAcNMzGa1ZoTxA提取码:4a57一、引入1、项目划分原则项目之间按照模块进行划分,尽量做到不同模块之间是零耦合的,即不同模块间没有相同代码,不同模块间不操作相同的数据表。2、联合测试/联调二、SVN工具的使用1、安装SVN服务端 下载vis...原创 2019-03-16 14:48:57 · 503 阅读 · 0 评论 -
ThreadLocal实现同一业务多SQL之间的事务
背景:问题:在DML的封装中,每调用一次Dao层方法就操作一次数据库,每次操作数据库创建一个连接对象conn,这个连接对象在数据库操作结束后会被销毁。这使得同一业务的多次数据库操作不在同一个事务内,如何解决。分析:我们应该让一个业务对应一个连接对象,我们知道,一个业务对应于一个线程,我们只要实现了一个线程中对应于一个连接对象,就实现了一个业务对应一个连接对象。解决:我们可以使用Thre...原创 2019-03-08 20:21:34 · 319 阅读 · 0 评论 -
使用JSP+Servlet+MVC+JDBC+JS实现用户登录校验、登录成功后三天免登录及可打印数据库信息
MySQL驱动及JQuery文件:链接:https://pan.baidu.com/s/10RNLJ4dwxEoJYUUE32Q9qw 提取码:fpqr 一、需求:1、用户访问主登录页面,可填写登录信息并提交。2、根据用户提交信息查询数据库中进行用户校验。3、校验失败,主登录页面给提示信息。4、登录成功,则显示登录成功页面。3天之内每次访问主登录页面即刻跳转登录成功页...原创 2019-02-22 16:15:15 · 2306 阅读 · 0 评论 -
多线程面试必问生产者消费者案例
一、需求1、生产者每生产一样东西,消费者立马进行消费,生产与消费交替循环进行。 要交替则必须引入一个生产者消费者都能访问到的布尔型变量flag,定义在测试类中 当flag为false时,生产者生产,生产完毕falg置为true、循环变量加1,唤醒消费者,生产者等待。 当falg为true时,消费者消费,消费完毕flag置为falsea,循环变量加1,唤...原创 2019-02-18 08:58:19 · 862 阅读 · 0 评论 -
Math.random()和Random类
首先Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机 double 值,是Java语言常用代码。例如:Number=Math.random()*3+1,设置一个随机1到4的变量;Random 类有含参数和不含参数的构造;其中不含参的构造方法每次都是使用当前系统时间作为种子,而含参构造是使用一个固定值(参数)作为种子(种子也就是Random生成随机数时使用的参数)...转载 2019-02-16 16:50:45 · 4036 阅读 · 0 评论 -
Json数据格式之fastjson
之前本人一直使用的是gson,后面接触fastjson之后发现fsatjson比gson好用太多了。而且fastjson在大量json转换的时候性能上也是要高于gson的,于是本人毅然决然地改用fastjson。pom.xml <dependency> <groupId>org.json</groupId> <artifactId...原创 2019-02-16 11:28:25 · 712 阅读 · 0 评论 -
工具类:获取任意数据库下任意数据表的字段信息
配置文件driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/d_studentuser=rootpassword=123456获取连接的类这个类通过读取文件,创建连接,需求中的“任意数据库”由该类实现,只要更改配置文件即可。package com.imooc.util;import java.io...原创 2019-01-27 21:55:54 · 779 阅读 · 0 评论 -
PreparedStatement不能用来设置表名、字段名
今天动手写课程设计,JDBC某处用到PreparedStatement,最初想将表名、字段名、字段值都作为参数用?代替,可是实践之后发现行不通。最初想这样写:preparedStatement = connection.prepareStatement("select * from ? where ?=?");preparedStatement.setString(1, tableNa...转载 2019-01-25 20:18:04 · 1248 阅读 · 0 评论 -
工具类:JDBC工具类
配置文件jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/projectjdbc.user=rootjdbc.password=123456jdbc.datasource.size=10常量接口package com.lirong.sparkproject.constant;pub...原创 2019-01-24 13:50:01 · 2900 阅读 · 0 评论 -
通过JDBC操纵MySQL数据库
前置工作在项目下新建一个Folder(文件夹)--------->加相应版本的MySQL驱动的jar包加入---------->build path---------->add to build path1、使用JDBC之Statement对象完成对MySQL数据库表的增删改操作import java.sql.Connection;import java.sql....原创 2019-01-22 21:01:32 · 264 阅读 · 0 评论 -
static和final修饰成员变量的小知识
public class Test { final int a;//报错,类中声明常量必须赋值 }///////////////////////////////////////////////////////////////public class Test { final int a; /* * 要想不给类中声明的常量赋值,则必须定义一个带参构造,为该常量赋值 * 并且类...原创 2019-01-20 13:31:36 · 1217 阅读 · 0 评论 -
装饰模式
1、装饰模式:在不改变原类文件和使用继承的情况下,动态地给一个类添加一些额外的功能,比生成子类更灵活。它是通过创建一个包装对象对真实对象进行装饰。2、使用场景:A。可以动态地给一个对象增加功能,这个功能还可以动态的撤销。B。当需要增加一些基本功能的自由组合而产生大量的功能,是继承关系变得繁多复杂。C。当不能采用生成子类的方法进行扩充时。3、职责划分抽象组件A:可以定...原创 2019-01-16 20:58:54 · 223 阅读 · 0 评论 -
使用MVC编程思想实现HelloWorld功能
1、JAVA编程规范之开闭原则:对扩展开放,对修改关闭(不建议修改代码)怎样才算符合JAVA的开闭原则呢?各司其职:各个类、各个模块都有明确的职责。 封装弱耦合性:模块间的关联性越弱越好。 接口解耦合 多态可重用性:可以重复使用相同的模块。 封装 继承可扩展性:能在原有基础上扩展功能。 继承 多态 2、职责的划分数据访问层:用来访问数据 ...原创 2019-01-15 22:20:04 · 1489 阅读 · 2 评论 -
集合的Collections工具类
package com.bjsxt.collections;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class TestCollections { public static void main(String[] args) { ...原创 2018-12-29 13:19:10 · 241 阅读 · 0 评论 -
Java中的泛型
泛型的分类: 泛型类、泛型方法、泛型接口泛型只在编译时 起作用,通过反编译工具反编译.class文件得到的java代码中没有泛型。泛型类:public class MyGen<T> {//T只是一个占位符,占了一个数据类型的位置,这个数据类型什么时候确定,在创建这个类的对象时明确}class TestMyGen{ public stati...原创 2018-12-28 11:37:09 · 181 阅读 · 0 评论 -
finalize方法
think in java 中提到GC时,那是不是只要显式的调用了 System.GC() 就会触发 finalize呢? 例如:public class Test { public void finalize(){System.out.println("finalize!");}; public static void main(String[] args) { /...转载 2018-12-28 07:40:38 · 927 阅读 · 0 评论 -
基于UDP的网络编程实现简单聊天室
import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.util.Scanner;public class Sender { public static void main(Str...原创 2018-12-19 22:14:26 · 2510 阅读 · 5 评论 -
用基于TCP的网络编程实现多个用户登录功能的简单模拟
Person类:用来存储每个对象的用户名和密码信息import java.io.Serializable;public class Person implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String name; p...原创 2018-12-19 11:38:34 · 2301 阅读 · 0 评论 -
匿名内部类中的构造器问题
今天遇到了一个题,涉及到匿名内部类的构造器问题,起初想当然地认为,匿名内部类连名字都没有,怎么可能有构造器,但是一经过测试,傻眼了。原来在匿名内部类中的构造代码块充当了构造器的作用。光说无益,上代码。Student类public class Student { private String name; public void run(){ System.out.println...原创 2018-12-19 08:50:13 · 3615 阅读 · 8 评论 -
用基于TCP的网络编程实现单个用户登录功能的简单模拟
Person类:存储用户登录的用户名和密码信息import java.io.Serializable;public class Person implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String name;...原创 2018-12-18 19:12:18 · 1173 阅读 · 0 评论 -
图片上传功能模拟
注意:先启动服务器端,再启动客户端 客户端:import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import ja...原创 2018-12-18 16:45:26 · 444 阅读 · 0 评论 -
java中双向链表的简单模拟
具体代码实现节点Node类:public class Node { /* * 三个属性分别对应节点的头部,中部,尾部。 * 头部存上一个节点的地址,尾部存下一个节点的地址 * 中部存可能是任何类型的数据 */ private Object pre; private Object obj; private Object next; //无参构造 p...原创 2018-12-11 08:07:17 · 190 阅读 · 0 评论 -
快速排序代码
import java.util.Arrays;public class QuickSort { public static void main(String[] args) { int []arr= {1,41,6,2234,122,32,1123,23,1212,3,42,543,12,43,1,44,65,14,2}; sort(arr,0,arr.length-1)...原创 2018-12-10 20:12:58 · 185 阅读 · 0 评论 -
快速排序(过程图解)
假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列。 3 1 2 5 4 ...转载 2018-12-10 14:55:38 · 95659 阅读 · 45 评论 -
利用Calendar类打印日历
import java.util.Calendar;import java.util.Date;import java.util.Scanner;public class Test { public static void main(String[] args) { System.out.println("请输入日期(如2018-12-07):"); Scanner sc...原创 2018-12-07 15:14:57 · 703 阅读 · 0 评论 -
利用二分法结合递归查找数组中的元素的下标
注意:由于二分法只适用于有序数组的元素查找,对于无序数组,我们必须先对其进行排序。数组可由Math.random()方法结合循环自动生成一个固定长度的int数组,然后调用Arrays.sort()方法对其排序,然后得到我们想要的有序int数组第一种方法:不使用递归import java.util.Arrays;import java.util.Scanner;public cl...原创 2018-12-05 13:22:35 · 2604 阅读 · 0 评论 -
用java中的外部比较器、内部比较器实现对象数组的排序
需求:有一个People类,该类实例化的对象存放在对象数组中。该类的属性有String name,int id。请按id的大小对对象数组中的对象进行从小到大的排序。 第一种方法:用内部比较器比较People类如下:/* * 为了该类的对象可以比较,实现Comparable接口,重写compareTo方法 * 这其实就定义了一个内部比较器(在要比较的对象所在类的内部...原创 2018-12-04 19:45:03 · 980 阅读 · 0 评论 -
冒泡排序和选择排序
冒泡排序package 排序算法;import java.util.Arrays;import org.junit.Test;/** 冒泡排序:*从 arr[0]起,前一个依次和后一个比,谁大谁放后面,直到最后一个元素,确定最大的*从 arr[0]起,前一个依次和后一个比,谁大谁放后面,直到次后个元素,确定第二二的*从 arr[0]起,前一个依次和后一个比,谁大谁放后面,直...原创 2018-12-04 13:43:39 · 221 阅读 · 0 评论 -
java中的split方法
java.lang.string.splitsplit 方法将一个字符串分割为子字符串,然后将结果作为字符串数组返回。stringObj.split([separator,[limit]])stringObj 必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。separator 可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一...转载 2018-12-04 08:23:26 · 17429 阅读 · 3 评论 -
java中的compareTo()方法
java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值String a = "a";String b = "b";System.out.println(a.compareTo(b));输出值-112345String a = "b";String b = "a";System.out.println(a.compareTo(b));输出值1...转载 2018-12-03 21:44:10 · 4236 阅读 · 0 评论 -
java中的静态导入
要使用静态成员(方法和变量)我们必须给出提供这个静态成员的类。 使用静态导入可以使被导入类的静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。 静态导入也是JDK5.0引入的新特性,下面以实例来说明静态导入的用法: 比如先在一个包中定义一个这样的类:package com.example.learnjava;public class Co...转载 2018-11-28 11:31:35 · 188 阅读 · 0 评论 -
用for循环打印一个菱形的第二种方法
步骤一:输出正方形public class Test000 { public static void main(String [] args) { int size=15;//边长 for(int i=1;i<=size;i++) {//控制行数 for(int j=1;j<=size;j++) {//控制每行长度 System.out.print("...原创 2018-11-23 17:17:26 · 8852 阅读 · 1 评论 -
用for循环打印一个菱形
for(int j=1;j<=4;j++){//j--->行数 //********* for(int i=1;i<=9;i++){//i--->控制*的个数 System.out.print("*"); } System.out.println();} ...原创 2018-11-23 14:57:16 · 20281 阅读 · 2 评论