随笔分类 -  JAVA

摘要:引用: https://blog.csdn.net/u012102306/article/details/51538574 https://blog.csdn.net/foxir/article/details/43916601 GMT和UTC GMT,即格林尼治标准时间,也就是世界时。GMT的正午 阅读全文
posted @ 2018-04-09 18:27 xwdreamer 阅读(50888) 评论(0) 推荐(3) 编辑
摘要:0.参考文献多线程开发1.同步方法与同步代码块在博文多线程开发中提到使用synchronized实现同步有两种方法,一种是同步方法,另外一种是同步代码块。现在根据同样一个问题,分别给出同步方法和同步代码块的实现方法。1.1同步方法View Code package test;public class ThreadDeadLock3 { public static void main(String args[]) { Info info = new Info(); // info作为参数传入两个线程当中 ProducerThread pt = ne... 阅读全文
posted @ 2012-10-08 22:02 xwdreamer 阅读(1931) 评论(0) 推荐(1) 编辑
摘要:要生成在[min,max]之间的随机整数,package edu.sjtu.erplab.io;import java.util.Random;public class RandomTest { public static void main(String[] args) { int max=20; int min=10; Random random = new Random(); int s = random.nextInt(max)%(max-min+1) + min; System.out.println(s);... 阅读全文
posted @ 2012-06-13 10:33 xwdreamer 阅读(397378) 评论(12) 推荐(5) 编辑
摘要:内部类是定义在另一个类中的类。内部类分类:局部内部类,匿名内部类,静态内部类。局部内部类匿名内部类静态内部类 有些时候,使用内部类只是为了把一个类隐藏在另外一个类的内部,而且并不需要这个内部类引用外围类对象,此时可以将内部类声明为static,以便取消产生的引用。下面是一个使用静态内部类的经典例子。考虑一下计算数组中最大值和最小是的问题。当然可以编写两个方法,一个求最大值,一个求最小值。但是这样做的后果是需要遍历数组两次。假如要求我们只允许遍历一次数组,那么怎么办?这样的好处是提高了效率。 其实遍历一次数组可以求出最大值与最小值,代码如下:View Code double min = Do.. 阅读全文
posted @ 2012-06-06 14:38 xwdreamer 阅读(1434) 评论(0) 推荐(0) 编辑
摘要:参考文献1.JVM调优总结(二)-一些概念2.Java深度历险(四)——Java垃圾回收机制与引用类型正文在参考文献1中,总结了JVM概念中的Java对象的大小,以及三种引用类型的定义与区分。Java对象的大小 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句:Object ob = new Object(); 这样在程序中完成了一个Java对象的生命,但是它所占的空间为:4byte+8byte。4byte是上面部分所说的Java.. 阅读全文
posted @ 2012-05-31 10:27 xwdreamer 阅读(3586) 评论(0) 推荐(1) 编辑
摘要:0.参考文献 http://blog.csdn.net/liulin_good/article/details/6213815 1.java集合类图 1.1 1.2 上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如Abstrac 阅读全文
posted @ 2012-05-30 20:28 xwdreamer 阅读(148517) 评论(10) 推荐(23) 编辑
摘要:前言 在数据库连接池分析的代码实例中,看到其中使用Enumeration来遍历Vector集合。后来就找了一些资料查看都有哪些方法可以遍历集合类,在网上找到了如下的使用Enumeration和Iterator遍历集合类的实例。不过这个实例中提到了Enumeration比Iterator的效率更高,其实并不是这样子的,该实例是的时间测试太片面了, 因为数据量太少。随着数据两的增加,两者之间的效率越来越接近,而不会出现倍数的比例。而且现在普遍都使用Iterator来遍历集合类,只有特别明确声明必须使用Enumeration的才会用该类遍历集合。代码实例View Code package edu.. 阅读全文
posted @ 2012-05-30 14:31 xwdreamer 阅读(22289) 评论(0) 推荐(1) 编辑
摘要:0.参考文献HTTP POST GET 本质区别详解从HTTP GET和POST的区别说起1.分析 一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交。Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。 URL全称是资源描述符,我们可以这样认 为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查、改、增、删4个操作。 根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的... 阅读全文
posted @ 2012-05-24 20:05 xwdreamer 阅读(8478) 评论(0) 推荐(2) 编辑
摘要:参考文献1.一个效果非常不错的JAVA数据库连接池2.使用 JAVA 中的动态代理实现数据库连接池3.MySql与oracle的JDBC测试程序分析参考文献1是一个用java实现的数据库连接池,可以参考其代码实现,最好也看看java源代码是怎么实现数据库连接池的,两者进行比较。参考文献2中提到了动态代理,之前写过的一片博客:设计模式之代理模式之二(Proxy)中也讲到了动态代理,这里可以参考一下。下面首先给出参考1中的代码示例,具体见ConnectionPool.java,修改了部门代码与注释,并该处了一个测试demo,具体见ConnectionPoolDemo.java:Connection 阅读全文
posted @ 2012-05-24 11:19 xwdreamer 阅读(2299) 评论(0) 推荐(2) 编辑
摘要:有过C++开发经验的人会发现,我们可以将0作为false,非零作为true。一个函数即使是bool类型的,但是我们还是可以返回int类型的,并且自动将0转换成false,非零转换成true。代码实例如下: 1 #include<iostream> 2 #include<stdlib.h> 3 using namespace std; 4 5 bool fun()//函数返回类型是bool,但是我们在函数中可以返回int类型。 6 { 7 return 1; 8 } 9 10 void main()11 {12 int a=1;13 if(a)//a是int类型的,但是. 阅读全文
posted @ 2012-05-22 12:35 xwdreamer 阅读(3520) 评论(0) 推荐(0) 编辑
摘要:0.参考文献:hash算法 (hashmap 实现原理)Java实现的散列表1.HashMap的数据结构 数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——拉链法,我们可以理解为“链表的数组”,如图: 从上图我们可以发现哈希表是由数组+链表组成的,一个长度为16的数组中,每个元素存储的是一个链表的头结点。那么这些元素是按照什么样的规则存储到数组中呢。一般情况是通过hash(key)%.. 阅读全文
posted @ 2012-05-14 14:26 xwdreamer 阅读(49474) 评论(10) 推荐(14) 编辑
摘要:关于volatile我们知道,在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。这在JVM1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。要解决这个问题,只需要像在本程序中 阅读全文
posted @ 2012-05-13 22:45 xwdreamer 阅读(1061) 评论(2) 推荐(0) 编辑
摘要:参考文献:Java:重写equals()和hashCode()为什么重写equals方法,一定要重写HashCode方法?重写equals和hashCode《CoreJava I 8》第5.2节——Object:所有类的超类。正文代码示例View Code package v1ch05.EqualsTest;import java.util.*;/** * This program demonstrates the equals method. * @version 1.11 2004-02-21 * @author Cay Horstmann */public class EqualsTes 阅读全文
posted @ 2012-05-12 14:17 xwdreamer 阅读(2045) 评论(0) 推荐(0) 编辑
摘要:参考文献:object.wait()和object.notify()和object.notifyall()正文wait、notify和notifyAll方法是Object类的final native方法。所以这些方法不能被子类重写,Object类是所有类的超类,因此在程序中有以下三种形式调用wait等方法。wait();//方式1:this.wait();//方式2:super.wait();//方式3void notifyAll()解除所有那些在该对象上调用wait方法的线程的阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonito 阅读全文
posted @ 2012-05-12 00:24 xwdreamer 阅读(32227) 评论(1) 推荐(2) 编辑
摘要:参考文献:http://blog.csdn.net/bocaicbl/article/details/5319915Java深度历险(四)——Java垃圾回收机制与引用类型JVM概念之Java对象的大小与引用类型1.垃圾收集算法的核心思想 Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。 垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用.. 阅读全文
posted @ 2012-05-06 00:45 xwdreamer 阅读(1912) 评论(0) 推荐(1) 编辑
摘要:1.RuntimeException今天摩根IT电面的时候被问到Exception和RuntimeException的区别,当时答不出来,大囧,晚上来学习一下。首先看一段代码,主要内容就是将字符串类型的数字转化为整型的数字,然后让两个数字相乘,代码如下:View Code public class RuntimeException { public static void main(String[] args) { // TODO Auto-generated method stub String str="123"; int temp=Inte... 阅读全文
posted @ 2012-04-24 21:12 xwdreamer 阅读(3800) 评论(1) 推荐(0) 编辑
摘要:java的比较器有两类,分别是Comparable接口和Comparator接口。在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口。让需要进行排序的对象实现Comparable接口,重写其中的compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用java.util.Arrays.sort()来排序对象数组,实例如下:View Code class Student implements Comparable<Student>{ private String name; private int age; private float... 阅读全文
posted @ 2012-04-17 23:40 xwdreamer 阅读(13148) 评论(0) 推荐(4) 编辑
摘要:1.finalfinal修饰类,说明这个类不能被继承,是以个顶级类。final修饰变量,说明这个变量是常量。final修饰方法,表示这个方法不能被重写,不过可以冲在final方法。比如有个基类Person,里面有一个public final void eat()方法,可以在Person类中重载同名方法,比如public void eat(String name,int age)。假如有一个子类Student,那么在Student中可以override父类的非final方法,但是不能override final方法。PersonView Code package test2;public cla 阅读全文
posted @ 2012-04-17 19:28 xwdreamer 阅读(1594) 评论(0) 推荐(0) 编辑
摘要:代码块分为四类普通代码块,构造块,静态代码块,同步代码块。View Code class Demo{ {//定义构造块 System.out.println("Demo的构造块"); } static{//定义静态代码块 System.out.println("Demo的静态代码块"); } public Demo()//定义构造方法 { System.out.println("Demo的构造方法"); }}public class CodeDemo { {//定义构造块 System.ou... 阅读全文
posted @ 2012-04-11 20:27 xwdreamer 阅读(552) 评论(0) 推荐(0) 编辑
摘要:从写java至今,写的最多的可能就是主函数public static void main(String[] args) {}但是以前一直都没有问自己,为什么要这么写,因为在c语言中就没有这样子的要求。其实这是一个不需要解释的问题,因为java标准就是这么规定的,那么既然是java标准规定的,我们按照规定来执行就好了。不过,这并不是一个很好的学习态度,如果总是知其然而不知其所以然,总会对java有种隔膜的感觉。就是发现问题了,不去解决,不去了解为什么,心里总是会有牵绊。今天既然自己都这么问自己了,为什么java的主函数要按照这个格式来写,那么我就得弄明白为什么。在java中,main()方法是j 阅读全文
posted @ 2012-04-09 13:51 xwdreamer 阅读(56684) 评论(7) 推荐(5) 编辑