
java
文章平均质量分 76
小萝莉_Lolita
做自己的superman
展开
-
Java中的变量:全局变量与局部变量
局部变量定义:顾名思义,局部变量定义在局部范围内,可以是一个方法,也可以是一个语句,也可以是一个代码块 是否需要初始化:局部变量在使用前必须要初始化,否则编译报错。因为系统不会为局部变量赋默认值 生存时间:局部变量的生存时间和方法的生存时间一致,调用该方法声明该局部变量并初始化的时,该局部变量被创建并分配内存空间;直到该方法调用结束局部变量也就结束了 创建位置:栈内存中 全局变量:包括静原创 2017-09-27 22:02:56 · 2788 阅读 · 3 评论 -
JDBC技术
JDBC:Java DataBase Connection,是一种Java连接访问数据库的技术(接口)为什么会出现该技术呢? 因为Java操作数据库的时候,所使用的数据库是不尽相同的,可能是MySQL,或是Oracle,也可能是SQLServer,那么总不可能每调用一种类型的数据库,就要重新写一种去访问数据库的方法,为了保证通用性,实现了如下架构去访问数据库中的数据: 每种类型的数据库都原创 2017-11-13 15:09:31 · 395 阅读 · 0 评论 -
Intellij IDEA 报错java.lang.NoClassDefFoundError
入坑,踩坑,填坑…… 今天在Idea写一个简单地基于Servlet的验证码小页面package com.dream.servlet.response;import cn.dsna.util.images.ValidateCode;import javax.imageio.ImageIO;import javax.servlet.http.HttpServlet;import javax.ser原创 2017-11-17 16:25:06 · 10408 阅读 · 5 评论 -
Java中的IO流
上一篇博文中提到了File类的操作,无非是文件的创建,获取,判断或删除等一些基本的文件操作,但是我们最终想要实现的是向文件中写数据或者从文件中读数据,那么这就涉及到数据的输入输出,Java对设备数据的操作都是通过“流”的方式。“流”屏蔽了实际的I/O设备中处理数据的细节。IO流用来处理设备之间的数据传输。设备是指硬盘、内存、键盘录入、网络等。 分类: 按照流向:输入流,输出流(均是以程序为原创 2017-11-03 15:36:26 · 307 阅读 · 0 评论 -
Java中的代理机制
说起代理,类比于生活中的例子,就是中介。对于目标类,有一个代理对象去代替目标类执行方法,但实际上还是调用了目标类的方法。 代理模式涉及到的角色: 1.抽象角色:声明真实对象和代理对象的共同接口 2.代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象;代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。除此之外,代理对象可以在执行真实对象操作时,附加其他原创 2017-12-12 16:33:27 · 354 阅读 · 0 评论 -
Java网络编程(基于TCP和UDP的通信实现)
简单说一些常见的协议所属的OIS层: 应用层:远程登录协议Telnet、文件传输协议FTP,超文本传输协议HTTP,域名服务DNS,简单邮件传输协议SMTP,邮局协议POP3等 传输层:传输控制协议TCP—-面向连接的可靠传输协议,用户数据报协议UDP—–是无连接的,不可靠的传输协议 网络层:网际协议IP,Internet互联网控制报文协议ICMP、Internet组管理协议IGMP原创 2018-01-23 11:00:41 · 947 阅读 · 0 评论 -
Java的自定义类加载器及JVM自带的类加载器之间的交互关系
JVM自带的类加载器: 其关系如下: 其中,类加载器在加载类的时候是使用了所谓的“父委托”机制。其中,除了根类加载器以外,其他的类加载器都有且只有一个父类加载器。 关于父委托机制的说明: 当生成 一个自定义的类加载器实例时,如果没有指定它的父加载器,那么系统类加载器将成为该类加载器的父类加载器 下面,自定义类加载器。自定义的类加载器必须继承java.lang.ClassLoa原创 2018-01-31 14:00:00 · 2772 阅读 · 3 评论 -
Java中类的卸载机制
类的卸载:由JVM自带的类加载器所加载的类,在JVM的生命周期中,始终不会被卸载。JVM本身会始终引用这些类加载器,而这些类加载器始终引用它们所加载的类的Class对象。所以说,这些Class对象始终是可触及的。 由用户自定义的类加载器所加载的类是可以被卸载的。对于每一个Class对象,可以通过其getClassLoader()方法获得其类加载器的引用,所以Class对象内部有指向其类原创 2018-01-31 17:57:01 · 1914 阅读 · 1 评论 -
对象的序列化和反序列化
当程序运行的时候,对象在内存中是存在的,一旦程序结束,那么该对象便从内存中“消失”,如果想实现对象的“持久化存储”,即保存在硬盘中呢?那么就需要通过对象的序列化来实现了;同理,如果想从硬盘中获得对象,那么就是对象的反序列化。反序列化不会调用对象的任何构造方法,仅仅根据所保存对象状态的信息,在内存中重新构建对象 序列化(Serialization)是一个把对象的状态写入字节流的过程原创 2018-01-19 11:41:15 · 302 阅读 · 0 评论 -
Java中的线程Thread
线程就是程序中单独顺序的流控制。线程本身不能运行,它只能用于程序中。只能使用分配给程序的资源和环境。 有关线程的一些特性:1.Java中如果我们没有自己产生线程,那么系统就会给我们产生一个线程(主线程,main方法就在主线程上运行),我们的程序都是由线程来运行的。 2.线程一旦运行起来,就无法控制它了。 2.进程就是执行中的程序(程序是静态的概念,进程是动态的概念);一个进原创 2018-01-19 20:15:27 · 288 阅读 · 0 评论 -
Object的wait()方法和notify()方法
JDK中关于wait()方法和notify()方法说明英文版翻译,渣渣英语,如有不妥,望提出宝贵意见~public final void wait() throws InterruptedExceptionCauses the current thread to wait until another thread invokes the notify() method or the n原创 2018-01-19 23:03:34 · 498 阅读 · 0 评论 -
深拷贝(Deep Clone)与浅拷贝(Shadow Clone)
浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。 深复制:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不在是原有的那些被引用的对象。换言之,深复制吧要复制的对象的所引用的对象都复制了一遍。Java原创 2018-01-20 20:09:54 · 1161 阅读 · 0 评论 -
关于动态代理模式
为什么JDK的动态代理只能实现接口的代理?我们通过JDK动态代理生成的代理对象的类型实际是$Proxy0(这个名字后面的0是编号,有多个代理类会一次递增)类,该类继承了Proxy类,所以只能对接口进行代理。Java的继承机制注定了这些动态代理类们无法实现对类的动态代理。public final class $Proxy0 extends Proxy 动态代理底层实现原理...原创 2018-04-27 14:30:30 · 297 阅读 · 0 评论 -
JDK1.8 HashMap底层实现原理
底层实现: 数组+链表+红黑树一些重要的变量://默认初始容量16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //容量最大值static final int MAXIMUM_CAPACITY = 1 << 30;//默认加载因子0.75static final float DEFAULT_L...原创 2018-05-16 10:38:40 · 7497 阅读 · 0 评论 -
Socket编程
什么是Socket?Socket是连接运行在网络上的两个程序间的双向通讯的端点。 Socket进行网络通信的过程1.服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户的连接请求。 2.客户程序根据服务器程序所在的主机名和端口号发出连接请求。服务器在端口监听到有客户端发来的请求,如果有连接请求,那么接受连接请求并获得一个新的绑定到不同端口地址...原创 2018-05-28 20:35:59 · 281 阅读 · 0 评论 -
Java中的文件File类
涉及到读写,除了键盘的输入,屏幕的输出显示,可能最多的就是关于文件的读写,很多场景中都会有关于文件读写的应用,比如数据的导出则涉及到写文件,还有图片的上传,则涉及到读取文件……当然,文件是存储在硬盘上的数据,可以为我们永久保存数据 下面来看看对于文件的操作:无非是创建文件,删除文件,判断文件,获取文件的某些属性以及如何获取文件的子文件及其子文件夹 文件的构造方法import java.io.原创 2017-11-01 21:04:26 · 320 阅读 · 0 评论 -
数据库中的多表查询、备份与恢复
数据库:数据库(数据的集合)和数据库管理系统(操作管理数据库)构成,是存储、维护和管理数据的集合数据的完整性:(=创建表时添加约束) 1.实体完整性:表示每一行数据不重复 约束类型: 主键约束(primary key) 唯一约束(unique) 自动增长列(auto_increment) 2.域完整性:限制此单元格的数据正确,不对照此列的其它单元格比较 约束类型:数据类型(int va原创 2017-11-09 21:25:24 · 1024 阅读 · 0 评论 -
Java枚举类
我们肯定在自定义类的时候遇到这样一种情况,其中的方法所接受的值是在固定范围之内,比如性别,季节,方向…..那么,在这种情况下,我们可能想的就是在私有化类的构造方法,在自定义类中创建本类的对象,使得用户不得随意传递任何值去创建对象。 比如,自定义类Personpackage BasicObject.day18;/** * Created by Dream on 2017/11/1. */cla原创 2017-11-01 12:06:17 · 349 阅读 · 0 评论 -
关于Java对象
4.5.6参数名 参数变量用同样的名字将实例域屏蔽起来。可以用this.attributeName的形式访问实例域。this指示隐式参数,也就是被构造的对象。public Employee(String name,double salary){ this.name=name; this.salary=salary;}4.6.6调用另一个构造器 this(…),意思是调用本类的另原创 2017-09-28 14:30:50 · 286 阅读 · 0 评论 -
Java---Object类
Object类所有类的超类,无论是Java中已存在的类还是我们自定义的类,均默认继承Object类,自然而然,其中的方法也都默认继承拥有,即可以用已存在类或者自定义类的实例对象去访问Object类的方法。 Object类中方法挺多,但在这不一一介绍,只说几个平时常用的方法 toString()方法:返回对象的字符串描述。非常熟悉,因为平时码代码时想查看一个对象都是通过调用toString方法原创 2017-10-17 20:05:54 · 316 阅读 · 0 评论 -
Java---String类
String:代表字符串字符串是常量,其值被创建后不能改变。字符串缓冲区支持可变字符串。因为字符串的值是不可变的,所以可以共享。 那么字符串在内存中是如何存储的呢?且看如下的示例String str1 = "hello";String str2 = "hello";String str3 = new String("hello");String str4 = new String("hel原创 2017-10-17 21:43:02 · 348 阅读 · 0 评论 -
Java---StringBuilder类和StringBuffer类
String类字符串对象的值是不可变的,所以说如果要对一个字符串对象进行多次修改操作,String类就不能再满足我们的需求了,Java中的StringBuilder类和StringBuffer类恰好可以满足我们这种需求,即对字符串对象进行修改,接下来,深入了解一下StringBuilder和StringBuffer类…… 定义: StringBuffer类:可变字符序列,线程安全,操作效率原创 2017-10-18 15:13:08 · 294 阅读 · 0 评论 -
Java---System类,RunTime类,Random类
System类:系统类,主要获取系统的属性数据,还有标准的输入,输出及错误输出流主要介绍一些常用的方法: 1.数组拷贝 arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 从指定源数组src中复制一个数组,复制从指定的位置srcPos开始,到目标数组dest的指定位置destPos开始,复制的数组的原创 2017-10-19 09:36:28 · 318 阅读 · 0 评论 -
Java泛型
定义一个方法,可以接受任何类型的对象,可能会想到用Object类型去接受参数就可以了,返回也是Object。这种方式虽然能够实现预想的功能,但是返回的结果我们还需要依据我们所传入的对象类型进行强转,那有没有可能,不需要我们强转,能根据我们所传参数的类型自动返回相应类型的对象呢? 答案是肯定的,实现方式就是利用了Java中的泛型!对于我们上一篇博文中提到的集合,就可以使用泛型,使用形式可以如下:Ar原创 2017-10-27 10:16:32 · 215 阅读 · 0 评论 -
Java集合Collection
集合,就是存放数据对象的容器,类比于之前学过的一种容器–数组,集合有着比较高的优越性。就拿存放的数据来说,数组存放的数据类型是单一的,即仅能存放某一种类型的数据,而且数组一旦定义以后,其长度大小都不可再更改,而Collection集合可以存放任意类型的数据,集合的大小可以随着存储数据量的多少自动增容。(当然集合和数组中存放的都是对象的引用而非对象本身) Collection接口类:最顶层的集合接原创 2017-10-25 15:59:05 · 253 阅读 · 0 评论 -
Java线程
要说线程,那么首先应该聊聊什么是进程,简单来说一个运行的程序就叫进程(至少有一个进程),如果该应用程序没有运行,那么就只是一个程序而已,谈不上进程。更进一步来说,进程就是一块包含了某些资源的内存区域,负责内存的划分。 那么,又何谓线程? 线程在一个进程中负责代码的执行,是执行的最小单位。一个进程至少包含一个线程。如果把进程比作是加工厂,那么里面在流水线上作业的工人就是一个个的线程。 多线程,顾原创 2017-10-20 15:22:08 · 333 阅读 · 0 评论 -
Enum枚举常量
枚举类型定义:使用enum关键字,隐含了所创建的类是java.lang.Enum类的子类(java.lang.enum类是一个抽象类)public enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE}; 实际上该定义声明的是一个类,刚好有4个实例 枚举类型符合通用模式: Class Enum<E extends<Enum E>>,其中E表示枚举类型的名称原创 2017-10-12 10:43:59 · 2030 阅读 · 0 评论 -
Java字符流Reader
读写的数据如果是英文,那么没有任何问题,但是如果一旦有了中文,乱码横生,惨不忍睹……感觉这么多种编码方式有时候真的是各种坑,但是虽然是坑,跪着也得填啊 首先介绍一下各种编码方式: ASCII码:仅包含对英文的编码,虽然是用一个字节表示,但是仅仅使用了最后7位,并没有占满2^8=256个编码位置 ISO8859-1:欧洲码表,用一个字节的8位表示,在ASCII码的基础上,在空置的0xA0-0xF原创 2017-11-06 21:00:55 · 459 阅读 · 0 评论 -
Java中的编码与解码
在前面学习字符流的时候,我们提到过关于编码的问题,这是个巨坑,一不小心可能就会有乱码出现,但是只要我们弄懂这编码与解码的原理,就能尽量避免踩坑了 何谓编码?何谓解码?编码,通俗来将就是将我们通俗易懂的数据变成我们不理解的码值,这个过程就称为编码。 比如:我们想写“abc”到硬盘上去,那么实际上硬盘存储的并不是”abc”,而是“abc”对应的码值,所以存储数据的时候是将数据编码然后存储 解码原创 2017-11-07 16:00:09 · 1158 阅读 · 0 评论 -
Java其他流
序列流SequenceInputStream:对多个流进行合并。序列流其实是多个输入流的串联,它从输入流的有序集合开始,从第一个输入流开始读取,直到文件末尾,接着从第二个输入流读取,以此类推,直到读完包含最后一个输入流的文件结束构造函数:SequenceInputStream(InputStream s1, InputStream s2):通过记住这两个参数来初始化新创建的 SequenceIn原创 2017-11-07 15:25:50 · 281 阅读 · 0 评论 -
递归
递归的定义其实很简单,无非就是函数自己调用自己,但是要注意递归函数一定要有终止的条件,因为如果无限次调用而无法结束就会导致内存耗尽,系统就崩了……下面,主要利用递归实现对文件的一些操作://列出一个文件夹的子孙文件与文件夹 public static void listFiles1(File dir){ //首先获得该文件夹下的所有子文件及其目录 File[] fi原创 2017-11-07 22:21:42 · 242 阅读 · 0 评论 -
Java中的Map
在前面的博文中提到的Collection集合是单列集合,但是在现实生活中,也会有双列集合,其中的数据是存在映射关系的,也就是所谓的“键—值”对 Map接口:是双列集合的最顶层接口,其中数据都是以键值对的形式存储的,其中键值是不能重复的,而且每个键值最多映射到一个值,值可以重复。 每次存储都是存储一对元素 —–>HashMap、TreeMap、HashTable 与Collect原创 2017-10-31 21:34:28 · 288 阅读 · 0 评论 -
CGlib动态代理
JDK动态代理必须提供接口才能使用,在一些不能提供接口的环境中,只能采用第三方技术,比如CGlib动态代理,它的优势在于不需要提供接口,只要一个非抽象类就能实现动态代理 CGLib采用了非常底层的字节码技术,其原理是通过目标类的字节码为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。我们先通过一个demo看一下Cglib是如何实现动态代理的。 ...转载 2018-08-10 16:50:12 · 332 阅读 · 0 评论