java基础
文章平均质量分 66
美丽人生
Be the change you want to see in the world !
展开
-
java synchronized详解
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 二、然而,当一个线程访问object的一个synch转载 2016-03-15 21:50:54 · 509 阅读 · 1 评论 -
java 泛型学习笔记
java泛型从JDK1.5开始出来的,虽然自己平时也有用到,但是一直没有全面的学习,今天在看myibatis3.0.1源码时,看到多处用到泛型设计,所以自己把泛型学习了下。 什么是泛型? 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点就是被Object引用对象被“上塑”造型,对象的具体类型信息转载 2015-07-07 09:31:25 · 382 阅读 · 0 评论 -
Java虚拟机之自定义类加载器
创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定的类的名字,返回对应的Class对象的引用。自定义类加载器的例子 代码:package com.mengdd.classloader;import java.io转载 2015-06-08 19:59:07 · 461 阅读 · 0 评论 -
java枚举类型enum的使用实例
java枚举类型enum的使用 java中定义常量有两种方法:final关键字和enum枚举。Java中的枚举类型采用关键字enum来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum类型。要了解枚举类型,建议大家先打开jdk中的Enum类简单读一下,这个类里面定义了很多protected方法,比如构造函数,如果要使用这些方法我们可以把枚举类型定义到当前类中。每个原创 2015-04-29 09:17:55 · 3517 阅读 · 0 评论 -
应用获取客户端IP小结
应用获取客户端IP的3种形式通过request.getRemoteAddr()这是最官方的获取客户端IP的方法,但当请求经过代理服务器后,这个方法返回的是代理服务器的IP. 所以我们线上通过这个方法取到的是nginx的IP: 127.0.0.1 request.getRemoteAddr() 通过X-Forwarded-For http头X-Forwarded-F转载 2015-04-24 11:25:41 · 1177 阅读 · 0 评论 -
java内存泄露和内存溢出(二)
虽然jvm可以通过GC自动回收无用的内存,但是代码不好的话仍然存在内存溢出的风险。最近在网上搜集了一些资料,现整理如下: —————————————————————————————————————————— 一、为什么要了解内存泄露和内存溢出? 1、内存泄露一般是代码设计存在缺陷导致的,通过了解内存泄露的场景,可以避免不必要的内存溢出和提高自己的代码转载 2015-04-01 22:25:02 · 553 阅读 · 0 评论 -
java内存泄露和内存溢出(一)
主要从以下几部分来说明,关于内存和内存泄露、溢出的概念,区分内存泄露和内存溢出;内存的区域划分,了解GC回收机制;重点关注如何去监控和发现内存问题;此外分析出问题还要如何解决内存问题。 下面就开始本篇的内容: 第一部分 概念 众所周知,java中的内存由java虚拟机自己去管理的,他不像C++需要自己去释放。笼统地去讲,java的内存分配分为两个部分,一个是数据堆,一转载 2015-04-01 22:23:06 · 466 阅读 · 0 评论 -
Java虚拟机工作原理详解
一、类加载器首先来看一下java程序的执行过程。 从这个框图很容易大体上了解java程序工作原理。首先,你写好java代码,保存到硬盘当中。然后你在命令行中输入[java] view plaincopyjavac YourClassName.java转载 2015-03-17 16:07:47 · 371 阅读 · 0 评论 -
ActionServlet详解
1简介编辑ActionServlet类是Struts框架的内置核心控制器组件,它继承了javax. servlet.http.HttpServlet类,Struts的启动一般从加载ActionServlet开始,因此它在MVC模型中扮演中央控制器的角色。2作用编辑在Struts中,它的主要作用是用来接收用户的请求信息,然后根据系统配置要求将请求传递给相应的Actio转载 2015-01-09 10:48:46 · 559 阅读 · 0 评论 -
关于java.lang.outofmemoryerror的报错处理
问题陈述: tomcat服务器运行一段时间后,tomcat控制台报错: java.lang.outOfMemoryError,java.lang.outOfMemoryError 然后tomcat服务立即死,只有重启tomcat才能恢复服务初步确定原因 1,java虚拟机jvm内存过小 2,程序不严密,产生太多的垃圾解决对策: 针对原因1:转载 2014-11-03 11:02:42 · 941 阅读 · 0 评论 -
关于从数据库中取出记录存放在ResultSet问题
1、通过查询,JDBC是将所有的查询结果一次性放到ResultSet中,还是一次只放一定数目的记录?例如,查询结果为2000条数据,JDBC是一次性将2000条数据放到结果集中,还是分批放置呢?2、当通过ResultSet.next(),移动结果集指针时,此时是否还与数据库发生交互?Answer :首先结果集resultset在你的java程序处。其中有个fetchsize设置,这转载 2014-08-10 21:53:20 · 4373 阅读 · 0 评论 -
Java synchronized 例子
为了在单例模式中避免线程安全,还有更简单的方法,就是在定义Singleton变量时就建立Singleton对象在使用synchronized关键字时有以下四点需要注意:1. synchronized关键字不能继承。2. 在定义接口方法时不能使用synchronized关键字。3. 构造方法不能使用synchronized关键字,但可以使用synchronized块来进行同步。转载 2014-07-15 19:04:54 · 631 阅读 · 0 评论 -
两个线程A和B,任务都是打印当前时间,要求编码实现:线程A和B同时启动后,以先A后B的方式任务交叉执行10次。
明确任务:两个线程A和B,任务都是打印当前时间,要求编码实现:线程A和B同时启动后,以先A后B的方式任务交叉执行10次。 对于这道题,首先,我们应该明确两个线程交互执行的含义:线程A和线程B共享一个处理机资源,线程A首先获得处理机,线程B处于就绪状态,线程A执行一次后,线程B获得处理机资源,线程A处于就绪状态,依次循环,直到线程A和线程B执行结束。 解题思路:设置原创 2014-03-31 19:38:58 · 2981 阅读 · 0 评论 -
String与StringBuffer效率的比较
String str = “”; for (int i=0; istr += “a”; 可是你知道在内存中会产生多少的垃圾出来吗?总共会有a、aa、aaa、 aaa….,无疑的,上述的程序虽然简单,但浪费了不少的内存,而且产 生对象和对象的存取也会花掉不少的时间,我们加上几行程序代码来测试所 花的时间和内存: long startT转载 2014-02-18 20:46:51 · 790 阅读 · 0 评论 -
java中使用sax解析xml的解决方法
在java中,原生解析xml文档的方式有两种,分别是:Dom解析和Sax解析Dom解析功能强大,可增删改查,操作时会将xml文档以文档对象的方式读取到内存中,因此适用于小文档Sax解析是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档本文主要讲解Sax解析,其余放在后面Sax采用事件驱动的方式解析文档。简单点说,如同在电影院看电影一样,从头到尾看一遍转载 2015-08-10 13:55:51 · 349 阅读 · 0 评论 -
Java解析xml的主要解析器: SAX和DOM的选择(附上新方法--Pull解析)
Java的xml解析器库有很多,总的来说,万变不离其宗的就是SAX和DOM解析器。SAX的包是org.xml.saxDOM的包是org.w3c.dom 1) DOM DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加转载 2015-08-10 14:05:13 · 492 阅读 · 0 评论 -
JVM学习笔记(一)------基本结构
从Java平台的逻辑结构上来看,我们可以从下图来了解JVM:从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别对于JVM自身的物理结构,我们可以从下图鸟瞰一下:对于JVM的学习,在我看来这么几个部分最重要:Java代码编译和执行的整个过程JVM内存管理及垃圾回收机制下面将这两个部分进行详细学习转载 2015-08-10 20:03:51 · 313 阅读 · 0 评论 -
Java中静态变量的适用场景
Java类中的静态变量在程序运行期间,其内存空间对所有该类的对象实例而言是共享的,有些时候可以认为是全局变量。因此在某些时候为了节省系统内存开销、共享资源,可以将类中的一些变量声明为静态变量,通过下面的例子,你可以发现合理应用静态变量带来的好处: Java代码 public class WeekA{ static class Data {转载 2015-09-07 11:26:47 · 3615 阅读 · 0 评论 -
【集合类型的并发】Collections.synchronizedList
1 :关注要点,为什么在有synchroniezed方法的同时会出现 Collections.synchronizedList 2 :知识背景: 您可能需要了解java Synchronized方法的加锁的各种机制,包括如何上锁,锁对象 3 : plus: 您需要不断的深化 Java加锁的各种机制Java代码 @NotThreadSaf转载 2015-08-06 09:39:19 · 425 阅读 · 0 评论 -
Jvm工作原理学习笔记
一、 JVM的生命周期1. JVM实例对应了一个独立运行的java程序它是进程级别a) 启动。启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点b) 运行。main()作为该程序初始线程的起点,任转载 2015-08-12 20:31:35 · 425 阅读 · 0 评论 -
HashMap和Hashtable的区别
HashMap和Hashtable的区别导读:1 HashMap不是线程安全的 hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。 2 HashTable是线程安转载 2015-07-30 15:55:45 · 345 阅读 · 0 评论 -
深入Java集合学习系列:HashMap的实现原理
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 2. HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本转载 2015-08-12 11:35:27 · 345 阅读 · 0 评论 -
两个对象值相同,有相同的hash code
两个对象值相同(x.equals(y) == true),则一定有相同的hash code。这是java语言的定义: 因为:Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可转载 2015-08-12 13:28:01 · 10420 阅读 · 0 评论 -
HashMap的工作原理
HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入转载 2015-08-12 13:53:56 · 371 阅读 · 0 评论 -
HashMap实现原理分析
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除转载 2015-08-12 11:36:58 · 370 阅读 · 0 评论 -
xml的四种解析方法及源代码(SAX、DOM、JDOM、DOM4J)
这个也是自己转载的,现在对DOM还比较熟悉,自己不要只是复制代码,可以试着去熟悉其中的一两种,以后会有用处的。xml的四种解析方法及源代码(SAX、DOM、JDOM、DOM4J)第一种:SAX解析 SAX处理机制:SAX是一种基于事件驱动的API。利用SAX解析XML文档,牵涉到两个部分:解析器和事件处理器。解析器负责读取XML文档,并向事件处理器发生事件,如元素开始和元素结束转载 2015-08-11 09:51:39 · 472 阅读 · 0 评论 -
会话管理--session
什么是Session使用Cookie和附加URL参数都可以将上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多,将极大降低网络传输效率和增大服务器端程序处理的难度。Session技术是一种将会话状态保存在服务器端的技术 ,它可以比喻成是医院发放给病人的病历卡和医院为每个病人保留的病历档案的结合方式 。 客户端需要接收、记忆和回送 Session的会话标识号,Sess转载 2015-08-10 20:30:30 · 3231 阅读 · 0 评论 -
JVM学习笔记(四)------内存调优
首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数,过多的GC和Full GC是会占用很多的系统资源转载 2015-08-10 20:07:33 · 263 阅读 · 0 评论 -
JVM学习笔记(三)------内存管理和垃圾回收
JVM内存组成结构JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示:1)堆所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由From Space和To Space组成,结构图如下所示:新生代。新建的对象都是用新生代分配内存,转载 2015-08-10 20:06:26 · 283 阅读 · 0 评论 -
JVM学习笔记(二)------Java代码编译和执行的整个过程
Java代码编译是由Java源码编译器来完成,流程图如下所示:Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制:Java源码编译机制类加载机制类执行机制Java源码编译机制Java 源码编译由以下三个过程组成:分析和输入到符号表注解处理语义分析和生成cla转载 2015-08-10 20:05:29 · 386 阅读 · 0 评论 -
java中equals和==的区别
java中equals和==的区别值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。==比较的是2个对象的地址,而e转载 2013-12-05 21:39:44 · 438 阅读 · 0 评论 -
java中的反射机制(续)
一、什么是反射:反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、转载 2013-12-04 10:22:29 · 394 阅读 · 0 评论 -
java 中的反射机制
反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力。通过这种能力可以彻底的了解自身的情况为下一步的动作做准备。下面具体介绍一下java的反射机制。这里你将颠覆原来对java的理解。 Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method;其中class代表的是类对 象,Constructor-类的构造器对象,Field-类的属性对象转载 2013-12-04 09:47:59 · 419 阅读 · 0 评论 -
Java基础进阶——“Java反射之一”
JAVA语言中的反射机制: 在Java 运行时 环境中,对于任意一个类,能否知道这个类有哪些属性和方法? 对于任意一个对象,能否调用他的方法?这些答案是肯定的,这种动态获取类的信息,以及动态调用类的方法的功能来源于JAVA的反射。从而使java具有动态语言的特性。 JAVA反射机制主要提供了以下功能: 1.在运行时判断任意一个对象所属的类转载 2013-11-24 15:12:24 · 428 阅读 · 0 评论 -
JAVA基础知识精华总结
1、 对象的初始化(1) 非静态对象的初始化在创建对象时,对象所在类的所有数据成员会首先进行初始化。基本类型:int型,初始化为0。如果为对象:这些对象会按顺序初始化。※在所有类成员初始化完成之后,才调用本类的构造方法创建对象。构造方法的作用就是初始化。(2) 静态对象的初始化程序中主类的静态变量会在main方法执行前初始化。不仅第一次创建对象转载 2013-11-24 15:06:59 · 457 阅读 · 0 评论 -
JAVA程序员必读:基础篇类和继承
基础篇类和继承这节教程将开始讨论对象的生命周期。包括怎样创建对象、怎样使用它以及在不使用它的时候将它从系统中清除。下面一个一个介绍:1 对象的生命周期 在这一小节中你可以学到怎样创建和使用任何类型的对象,还讨论了当对象不再需要的时候系统怎样清除对象的。 典型的JAVA程序创建对象,对象之间的交互是通过发送消息来实现的。通过这些对象的交互,JAVA程序可以执行一个GUI、运行转载 2013-11-24 15:29:27 · 829 阅读 · 0 评论 -
Java基础进阶——“Java IO流之三:IO实例”
IO 编程的一般流程: 1. 创建基本流 2. 升级基本流到高级流 3. 使用在高级流中的方法作读写操作 4. 关闭流并释放资源------------------------------------------------------------------------------- 1. Creat node stream;转载 2013-11-24 15:28:05 · 603 阅读 · 0 评论 -
一些基础的JAVA知识
&和&&的区别。&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),Hashtable是线程安全的,也就是说是同步的,而HashMap是线程不安全的,不是同步的,转载 2013-11-24 15:25:43 · 401 阅读 · 0 评论 -
Java加密和数字签名编程快速入门
本文主要谈一下密码学中的加密和数字签名,以及其在java中如何进行使用。对密码学有兴趣的伙伴,推荐看Bruce Schneier的著作:Applied Crypotography。在jdk1.5的发行版本中安全性方面有了很大的改进,也提供了对RSA算法的直接支持,现在我们从实例入手解决问题(本文仅是作为简单介绍): 一、密码学上常用的概念 1)消息摘要: 这是转载 2013-11-24 15:18:48 · 569 阅读 · 0 评论 -
[Java基础]类变量和实例变量
先一一分析一下这几个东东:实例方法,实例变量,类方法,类变量。实例变量(instance variable):或叫实例域、实例字段(instance field),或叫成员变量(member variable)。实例的变量,每个实例的变量可能不同。实例方法(instance method):或叫成员方法(member method)。供实例用的方法,必须要先有实例,才能通过转载 2013-11-24 15:13:33 · 609 阅读 · 0 评论