java
乘物游心0823
这个作者很懒,什么都没留下…
展开
-
java中equal和==的区别
1.值类型和引用类型值类型:没有equals方法,只有==;引用类型:存储在栈中,存储一个指针值,指向堆内存中存放的实际值;可以使用equals和==两种形式比较;==操作比较的是两个变量的值是否相等,即是否指向同一地址;equals操作表示的两个变量实际指向的堆中的内容是否相同。例1:以String类为例,s1,s3指向堆中同一段地址,s2指向堆中另一段地址,但存储的内容和s原创 2017-05-10 18:42:02 · 381 阅读 · 0 评论 -
Filter入门介绍
1.Filter作用拦截客户端对服务端的资源请求,如实现统一字符编码/禁止缓存/用户登录等2.Filter的实现开发Web应用时,实现了Servlet API接口中Filter接口的类就称为Filter过滤器类,然后在web.xml中配置和映射过滤器3.执行过程Web应用程序启动时,Web服务器负责创建Filter类,然后调用其init()方法进行初始化,准备拦截web原创 2017-12-18 13:37:53 · 839 阅读 · 0 评论 -
Spring中的interceptor简介
1.目的在Spring MVC中interceptor用来拦截客户请求,进行处理实现某功能,如下图所示2.实现web应用开发时,继承spring MVC中的HandlerInterceptorAdapter抽象类,实现其中的抽象方法preHandler(),postHandler(),afterCompletion(),此时该类即可作为Interceptor()使用,在一个we原创 2017-12-18 16:51:16 · 2610 阅读 · 1 评论 -
web服务端的js文件更新后,浏览器的js未及时更新
问题:web服务端的js文件更新后,浏览器的仍然使用缓存的js,导致js未及时更新解决方法:在客户端js引用时加上随机的参数,可以使客户端强制更新js,例子如下:修改前:type="text/javascript" src="${staticPath}/js/login.js?v=2018.1.15">修改后:type="text/javascript" src="${原创 2018-01-15 15:51:04 · 3050 阅读 · 1 评论 -
Java反射
1.概念反射机制指在运行状态中,对于任何一个类,都可以知道其属性和方法,对于任意一个对象,可以调用其方法,修改其属性. java.lang.Class类和java.lang.reflect包中类提供了对反射的支持.反射的作用:动态代理2.Class类的使用Java中一切皆对象,类也是对象,是java.lang.Class的实例对象。例如我们定义如下的类class A{}则A是Class的一个实例对...原创 2017-06-15 18:06:45 · 206 阅读 · 0 评论 -
==和equals的区别
1.关系操作符==用于基本类型时,比较二者的值是否相同;用于对象引用时,比较引用指向的对象是否相同;2.equals方法equals是Object的方法,一般用于比较对象是否相同.其中在Object中的实现如下:public boolean equals(Object obj) { return (this == obj);}可见,如果比较的对象默认使用Object中的equals方法,...原创 2018-02-26 14:03:55 · 142 阅读 · 0 评论 -
Cglib源码解析
Cglib(Code Generator Library)是一个 java字节码生成工具,提供了一系列的类生成器,可以在运行期间,生成现有java类的子类(cglib不能扩展final类)。本系列文章分析cglib的源码实现。一、基本框架ClassGenerator是Cglib的核心接口,其中核心方法generateClass方法用于产生目标类;public interface Cla...原创 2018-02-27 21:47:34 · 2761 阅读 · 1 评论 -
Window下生成并运行jar包,通过classpath引用jar包
一.生成及运行jar包1.编写java文件,命名为HelloWorld.javapublic class HelloWorld{ public static void main(String[] args){ System.out.println("HelloWorld!"); }}2.在文件所在路径下编译,javac HelloWorld.java,生成文件HelloWorld.class;3...原创 2018-03-01 23:02:29 · 1997 阅读 · 0 评论 -
Java原子类原理解析
Java原子类实现原理分析 在谈谈java中的volatile一文中,我们提到过并发包中的原子类可以解决类似num++这样的复合类操作的原子性问题,相比锁机制,使用原子类更精巧轻量,性能开销更小,本章就一起来分析下原子类的实现机理。悲观的解决方案(阻塞同步) 我们知道,num++看似简单的一个操作,实际上是由1.读取 2.加一 3.写入 三步组成的,这是个复合类的操作(所以我们之前提到过的vo...转载 2018-02-23 17:01:13 · 1502 阅读 · 0 评论 -
log4j日志参数
#根logger主要定义log4j支持的日志级别及输出目的地,其语法为:#log4j.rootLogger = [ level ] , appenderName, appenderName, …#其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。#建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、...原创 2018-03-16 16:00:13 · 1404 阅读 · 0 评论 -
ClassLoader原理解析
一、概念ClassLoader即类加载器,Java中的类是动态加载的,当需要使用类A时,ClassLoader会将A.class字节码文件动态加载到jvm的方法区内存中,然后生成一个对应的java.lang.Class对象的实例保存该类的信息,并通过该实例的newInstance()来产生对象。ClassLoader是一个抽象类,通常给定类的名称,然后转换成.class文件名,然后查找相应的类文件...原创 2018-03-03 21:35:40 · 314 阅读 · 0 评论 -
JDK动态代理
一、概念代理设计模式是一种常用的设计模式,为实现某接口的委托对象创造一个代理对象,代码中调用代理对象,代理类进行预处理或者后处理,真正业务逻辑仍然由委托类执行。Java中存在静态代理和动态代理,静态代理需要为每个委托类实际创建一些代理类,如果实现一个接口的几个类均需要代理类,则需要创建多个代理类(也可以创建一个在其中进行路由),比较麻烦。动态代理是JVM在运行过程中利用反射原理创建代理类的字节码文...原创 2018-03-04 12:05:16 · 224 阅读 · 0 评论 -
java
一. Java多线程1.什么是线程?线程是操作系统能够进行调度的最小单位.一个进程包含多个线程,每个线程执行不同的任务.不同的进程使用不同的内存,同一个进程中的线程共享一片内存空间.2.为什么需要线程?一般我们启动一个程序就是启动一个进程,程序执行过程中由于程序控制范围之外的某些条件导致程序堵塞,程序此时只能中止;使用线程时,我们在该进程中创建多个线程,每个线程执行不同的任务,当由...原创 2019-02-27 23:27:31 · 101 阅读 · 0 评论 -
Java List和Array之间的转换
一.Array 转为List1.实现方法 :java中数组转list使用Arrays.asList(T... a)方法。public class Array2List { public static void main(String[] args){ List<String> listA=Arrays.asList("dog","cat","cow")...原创 2019-06-21 17:15:25 · 174655 阅读 · 6 评论 -
Spring框架
1.目的Spring是一个轻量级的应用编程框架,有以下几个优点:1)使用简单的java bean进行编程,由IOC容器负责管理bean之间的依赖,降低对象间的耦合;2)非侵入式的编程,程序不需要实现框架的接口,减少应用程序和框架的耦合;2.特点Spring有两大特点:IOC和AOPIOC:(Inversion of Control)控制反转是指对象获取依赖对象的方式.比如A原创 2017-12-22 09:10:56 · 175 阅读 · 0 评论 -
SpringMVC中的异常处理
1.springmvc中异常处理有三种方式1)使用spring自带的异常处理器SimpleMappingExceptionResolver2 ) 自定义全局异常处理器3)使用@ExceptionHandler注解实现异常处理本文以登录校验为例来讲解三种异常处理方法的应用3.自定义全局异常处理器1)自定义全局异常处理器MyHandlerExceptionRes原创 2017-12-10 12:59:54 · 215 阅读 · 0 评论 -
springMVC中的Model和ModelAndView的区别
1.主要区别Model是每次请求中都存在的默认参数,利用其addAttribute()方法即可将服务器的值传递到jsp页面中;ModelAndView使用时需要自己实例化,也可以用来传值,但是二者的方法有些区别;另外,ModelAndView可以用来设置返回的地址2.例子使用Model传值@RequestMapping(value="/list-books") p原创 2017-12-10 12:40:21 · 21997 阅读 · 1 评论 -
java参数传递
java参数传递只有值拷贝,没有引用传递;java方法的参数一般是基本类型和引用类型两种,string类型比较特殊,我们单独讨论;1.基本类型基本类型作为实参时,该值会拷贝一份在方法中使用,方法中对参数的改变不会影响原来的值;public class TestString {public static void main(String[] args) {// TODO原创 2017-05-09 10:23:12 · 371 阅读 · 1 评论 -
java访问权限控制总结
1.包:库单元编译单元:每个.java文件成为一个编译单元,每个编译单元内只能有一个public类(也可没有),并且该类的名称必须与文件名相同.类库:是同一命名空间下一组.java类文件的集合,每个.java类文件中包括一个public类和若干非public类,使用关键字package打包.Java可运行程序:java类文件编译后为class文件,java可运行程序就是一组可以打包并压原创 2017-04-27 10:41:11 · 328 阅读 · 0 评论 -
Java实现将int转换成字节数组
Java移位的基础知识:左移右移>>:有符号数:正数高位补0,负数高位补1, 无符号数高位补0右移>>>:有符号和无符号高位均补0例:将一个有符号数转换成字节数组public class IntToArray { public static void main(String[] args) { // TODO Auto-generated me原创 2017-05-19 10:19:59 · 1632 阅读 · 0 评论 -
jdbc的编程步骤
1.加载驱动程序Class.forName(driverclass)MySQL驱动:Class.forName(“com.mysql.jdbc.Driver”);Oracle驱动:Class.forName(“oracle.jdbc.driver.OracleDriver”)2.获取数据库连接Connection conn=DriverManager.getConnection原创 2017-06-18 09:33:48 · 452 阅读 · 0 评论 -
Java中类的加载和初始化
以此按如下步骤执行1.首次创建类对象或者调用类的静态成员/方法(包括入口main函数)2.java编译器查找类的编译代码文件(.class文件),加载该文件;(如果该类有基类,基类还有自身的基类,加载的顺序为根基类的class文件,以此加载各导出类;不管基类是否使用都会加载)3.静态成员的初始化,按照定义类中定义的顺序初始化;(如果有基类,顺序为根基类的静态成员,以此各导出类的静态成员原创 2017-05-06 15:39:57 · 395 阅读 · 0 评论 -
并发编程(一)-创建多线程程序
编写多线程并发程序分为两步:1.定义任务;2.执行任务;1.定义任务有三种方式1)实现Runnable接口class Task implements Runnable{private int countDown=10;static int taskCount=0;private int id=taskCount++;private void printS原创 2017-10-19 11:04:45 · 180 阅读 · 0 评论 -
并发编程(二)-访问共享资源
当代码中多个线程任务访问同一共享资源时,就会引发冲突,目前解决多线程冲突问题都是采用序列化访问共享资源的解决方案,即将共享资源放在某一代码块中并加锁,某一时刻只能有一个线程访问该代码块.同步的规则:"如果你正在写一个变量,它接下来可能被另一个线程读取,或者你正在读取一个已经被其他线程改写的变量,那么你需要使用同步,并且读写线程必须使用相同的监视器同步".1)Synchronized同步方法原创 2017-10-19 15:37:35 · 666 阅读 · 0 评论 -
并发编程(三)-线程协作
线程协作指多个线程之间协调地交替执行,线程协作有两种方式:1.wait/notify,notifyAll该方法需要搭配synchronized关键字使用,wait(),notify(),notifyAll()必须在同步方法或者同步块中使用,否则会抛出IllegalMonitorStateException异常.注意notify(),notifyAll()只能唤醒在同一锁对象上的wait()原创 2017-10-19 15:41:10 · 178 阅读 · 0 评论 -
MVC开发模式
1.定义MVC分为Model层,View层和Controller层,View层将用户输入的数据和操作传递到Contoller层,Controller层将数据传递到Model层进行处理,Model层将处理好的数据传递回Controller,再到View层展示给用户.2.优点MVC开发模式即将系统的输入,处理和输出进行分层开发,降低程序的耦合性,各层组件实现不同的功能,相互独立,易于后期维原创 2017-10-20 14:34:47 · 249 阅读 · 0 评论 -
绝对路径和相对路径
1.html中标签的绝对路径和相对路径,相对路径以“/”开头加入当前的url为“http://localhost:8080/bookstore/list-books”,此时页面中的标签如下:绝对路径:">Add Book,html中的绝对路径是“网址”+“/input-book”,即“http://localhost:8080/input-book”相对路径:">Add Book,ht原创 2017-10-29 19:50:04 · 346 阅读 · 0 评论 -
Java注解
1.注解的作用通过反射来获取类,方法,成员上的运行时注解信息,实现动态控制程序的执行逻辑2.注解分类:按运行状态分类1) 源码注解:只在源码中存在,在编译后的class中不存在2)编译时注解:注解在源码和class文件中都存在.Override/deprecate/suppresswarning都是编译时注解3)运行时注解:在运行时仍然起作用,影响程序的运行逻辑,如spri原创 2017-06-15 18:31:40 · 576 阅读 · 0 评论 -
String,StringBuilder和StringBuffer
参考:首先看如下的例子1.String对象时不可变的,不可变后带来一定的效率问题;但是当数据量较少时,StringBuilder的效率也不一定比String高2.java虚拟机会为string对象创建StringBuilder对象,但是每次循环都会创建一个stringBuilder对象,因此会在一定程度上降低速度;通过javap -c Stringtest命令将class文原创 2017-10-17 11:02:22 · 172 阅读 · 0 评论 -
java中的switch语句
1.语句的格式如下:switch(变量){ case 变量1: //处理语句 break; case 变量2: //处理语句 break; default: /原创 2017-12-10 12:22:54 · 291 阅读 · 0 评论 -
Jedis连接Redis三种方式
1、单机模式private String addr="192.168.1.1";private String port="6236";private String key="key";private Jedis jedis=new Jedis(addr,port);//Jedis获取到的Redis数据在jedis里,jedis.set("a","b");//更改key为a的值jedis...原创 2019-07-05 15:53:29 · 4577 阅读 · 1 评论