java基础
文章平均质量分 69
四道风尘
这个作者很懒,什么都没留下…
展开
-
java基础之深复制与浅复制
今天修改了以前代码中关于对象做为参数传递时造成的bug,经查看代码及分析总后发现我们的需求应该是通过java深度拷贝技术才能实现。因此本文将复习总结下java拷贝相关知识。首先我们看下面的代码。public class TestMethodInvokeRef {public static void main(String[] args) {User user = new User();原创 2013-06-08 12:42:01 · 1096 阅读 · 0 评论 -
java模拟HTTP请求(集合了网上搜来的各种)
Java发送http请求 (get 与post方法请求),以下代码经本人亲自调试可用!可以直接使用之。注意:通过BufferedReader 读取远程返回的数据时,必须设置读取编码,否则中文会乱码!packagecom.jiucool.www.struts.action; importjava.io.BufferedReader;importjava.io.DataOutp转载 2013-12-06 09:53:04 · 2431 阅读 · 0 评论 -
CyclicBarrier应用:用10个线程求1到1000之和
用多个线程求和的方法有多种,这里给出一种应用CyclicBarrier求和的方法。package com.java.basic.concurrent.CyclicBarrier;import java.util.ArrayList;import java.util.List;import java.util.concurrent.BrokenBarrierException原创 2013-12-19 14:43:47 · 1403 阅读 · 0 评论 -
并发编程中的CountDownLatch和CyclicBarrier
CountDownLatch和CyclicBarrier的用途:两者主要用于多线程的并发执行。当一个线程需要等待另外一个或多个线程的执行时,就可以考虑用它俩。CountDownLatch和CyclicBarrier的共同点:两者的共同点是都具有await()方法,并且执行此方法会引起线程的阻塞,达到某种条件才能继续执行(这种条件也是两者的不同)。还有一个共同点是其构造方原创 2013-12-19 17:06:35 · 659 阅读 · 0 评论 -
应用CountDownLatch实现多线程统计1到1000之和
前面通过借助CyclicBarrier实现了多个线程协助计算1到1000之和,本篇将应用CountDownLatch来完成该功能,代码如下:package com.java.basic.concurrent.CountDownLatch;import java.util.concurrent.CountDownLatch;/** * @Description 应用C原创 2013-12-19 17:34:08 · 1398 阅读 · 0 评论 -
try-catch-finally-return返回值问题
今天在看《深入java虚拟机》第六章时书中一段代码引起了我对try-catch-finally-return关系的兴趣和思考,闲话不多说直接进入主题,请看下面代码: 代码清单1: public staticint inc() { int x; try { x = 1; return x;原创 2013-12-25 13:42:49 · 856 阅读 · 0 评论 -
你所不知道的Java序列化
我们都知道,Java序列化可以让我们记录下运行时的对象状态(对象实例域的值),也就是我们经常说的对象持久化 。这个过程其实是非常复杂的,这里我们就好好理解一下Java的对象序列化。 1、 首先我们要搞清楚,Java对象序列化是将 对象的实例域数据( 包括private私有域) 进行持久化存储。而并非是将整个对象所属的类信息进行存储。 其实了解JVM的话,我们就能明白这一点了。实际上堆中所存转载 2014-02-12 16:11:42 · 2056 阅读 · 0 评论 -
Java运行时绑定探讨
运行时绑定也叫动态绑定,它是一种调用对象方法的机制。Java调用对象方法时,一般采用运行时绑定机制。1.Java的方法调用过程编译器查看对象的声明类型和方法名(对象变量的声明类型)。通过声明类型找到方法列表。编译器查看调用方法时提供的参数类型。如果方法是private、static、final或者构造器,编译器就可以确定调用那个方法。这是静态绑定。如果不是上述情况,就要使用运行转载 2013-12-02 10:31:12 · 968 阅读 · 0 评论 -
深入Java集合学习系列:HashMap的实现原理
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现(Hashtable跟HashMap很像,唯一的区别是Hashtalbe中的方法是线程安全的,也就是同步的)。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。2. HashMap的数据结构: 在java编程语言中,最基本的结构转载 2014-05-07 10:07:23 · 441 阅读 · 0 评论 -
深入Java集合学习系列:HashSet的实现原理
0.参考文献深入Java集合学习系列:HashSet的实现原理1.HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。HashSet中不允许有重复元素,这是因为HashSet是基于HashMap实现的,HashSet中的元素都存放在HashMap转载 2014-05-07 10:49:41 · 463 阅读 · 0 评论 -
Java equals()和hashCode()
一、前言 Java技术面试的时候我们总会被问到这类的问题:重写equals()方法为什么一定要重写hashCode()方法?两个不相等的对象可以有相同的散列码吗?... 曾经对这些问题我也感到很困惑。equals()和hasCode()方法是Object类中的两个基本方法。在实际的应用程序中这两个方法起到了很重要的作用,比如在集合中查找元素,我们经常会根据实际需要重写这两个方转载 2014-05-08 10:01:02 · 1504 阅读 · 0 评论 -
Java对象的序列化和反序列化实践
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。 把Java对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为Java对象的过程称为对象的反序列化。 对象的序列化主要有两种用途:转载 2014-04-24 14:22:07 · 484 阅读 · 0 评论 -
如何写一个不可变类
本文由 ImportNew - 唐小娟 翻译自 Journaldev。欢迎加入Java小组。转载请参见文章末尾的要求。不可变的对象指的是一旦创建之后,它的状态就不能改变。String类就是个不可变类,它的对象一旦创建之后,值就不能被改变了。阅读更多: 为什么String类是不可变的不可变对象对于缓存是非常好的选择,因为你不需要担心它的值会被更改。不可变类的另外一个好处是它自转载 2014-05-11 15:10:40 · 876 阅读 · 0 评论 -
为什么String类是不可变的
本文由 ImportNew - 唐小娟 翻译自 Journaldev。欢迎加入Java小组。转载请参见文章末尾的要求。String是所有语言中最常用的一个类。我们知道在Java中,String是不可变的、final的。Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类。String类不可变性的好处只有当字符串是不可变的,转载 2014-05-11 15:02:42 · 468 阅读 · 0 评论 -
如何使用建造者模式(Builder Pattern)创建不可变类
本文由 ImportNew - 唐小娟 翻译自 Journaldev。欢迎加入Java小组。转载请参见文章末尾的要求。我写过一篇《如何创建不可变类》。这篇文章中,我们将看到如何使用建造者模式创建不可变类。当构造器中的参数很多时,并且参数的顺序会给人造成困扰的时候,那么使用建造者模式来创建不可变类就是非常好的方法了。使用建造者模式来创建不可变类下面是使用建造者模式来创建不可变转载 2014-05-11 15:55:54 · 746 阅读 · 0 评论 -
Java异常的面试问题及答案
本文由 ImportNew - 韩远青 翻译自 Journaldev。欢迎加入Java小组。转载请参见文章末尾的要求。Java提供了一个健壮的、面向对象的方法来处理出现异常,称为Java异常处理。 我以前写过一篇长文章来介绍Java异常处理,今天我将列出一些重要的Java异常面试的问题及答案,希望对你们的面试有所帮助。1.什么是Java异常答:异常是发生在程序执行过程中阻碍转载 2014-05-12 11:02:31 · 1818 阅读 · 0 评论 -
ConcurrentHashMap之实现细节
ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现。在这之前我对ConcurrentHashMap只有一些肤浅的理解,仅知道它采用了多个锁,大概也足够了。但是在经过一次惨痛的面试经历之后,我觉得必须深入研究它的实现。面试中被问到读是否要加锁,因为读写会发生冲突,我说必须要加锁,我和面试官也因此发生了冲突,结果可想而知。还是闲话少说,通过仔细阅读源代码转载 2014-06-05 11:19:01 · 460 阅读 · 0 评论 -
Java中守护线程的总结
在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆:只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应转载 2014-05-30 11:50:51 · 647 阅读 · 0 评论 -
java 方法签名
例子如下:public void test(){}()Vpublic void test1(int i){} (I)Vpublic int test2(){ return 1;}()Ipublic int test3(int i) { return i;}(I)I基本数据类型对应关系如表:引用数据类型:比较麻转载 2013-12-12 10:44:03 · 2259 阅读 · 0 评论 -
彻底理解ThreadLocal
知其然synchronized这类线程同步的机制可以解决多线程并发问题,在这种解决方案下,多个线程访问到的,都是同一份变量的内容。为了防止在多线程访问的过程中,可能会出现的并发错误。不得不对多个线程的访问进行同步,这样也就意味着,多个线程必须先后对变量的值进行访问或者修改,这是一种以延长访问时间来换取线程安全性的策略。而ThreadLocal类为每一个线程都维护了自己独有的变量拷贝转载 2013-12-05 17:02:39 · 658 阅读 · 0 评论 -
深入研究java.lang.ThreadLocal类
一、概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制转载 2013-12-05 16:46:49 · 513 阅读 · 0 评论 -
java序列化与反序列化
本文将详细介绍java序列化与反序列化相关知识。文中大多概念知识来自网络,风尘在此对这些无私分享知识的网友表示感谢,同时若有侵犯版权问题请及时联系风尘,风尘将在第一时间进行处理。本文主要从以下几个方面来介绍java序列化与反序列化:1. 什么是序列化,序列化是干什么的?2. 为什么要序列化即什么情况下要序列化?3. 序列化的意义?4. 如原创 2013-06-14 13:41:41 · 806 阅读 · 0 评论 -
java基础之内部类
本节将开始复习内部类相关知识,仍以笔试或面试题作为切入口。在引入题之前有必要先看一下内部类相关的基础知识,我个人认为百度百科中关于内部的介绍言简意赅,下面借用百度百科的解释将内部类的基础知识过一遍。内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。(1)、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。(2)、内原创 2013-06-03 22:30:46 · 617 阅读 · 0 评论 -
java基础之Integer和Long对象相等比较
关于Integer和Long对象在比较对象相同时很容易犯错,在本文将做一个简短的分析。看下面的代码 public static void main(String[] args) {Integer a = new Integer(3);Integer b = new Integer(3);System.out.println(a==b);Integer c = 129;原创 2013-06-07 14:09:02 · 5132 阅读 · 0 评论 -
java基础之堆栈
本文将我认为对java堆栈分析的比较好的几篇文章总结出来与大家分享下。以下内容大部分来自网络,在此对这些朋友们表示衷心的感谢,如有侵权请联系风尘。 一.Java堆,栈初探 Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负原创 2013-06-07 14:15:37 · 951 阅读 · 0 评论 -
java基础之函数参数传递过程解析
在面试或是笔试过程当中,关于java函数参数传递相关内容是常考题,而且在实际开发中若对参数传递不深入理解,也会出现很严重的错误甚至是灾难性的错误。在这篇文章中我想和大家分享下我个人对参数传递浅显的理解,先看下面的程序:public class TestRef {public static void clear(Person p) {p = null;}public st原创 2013-06-06 23:38:09 · 1089 阅读 · 0 评论 -
java基础之类继承
本文是我将网上有关类继承方面的笔试题加以消化整理,希望通过此种方式来巩固自己的基础知识,同时也希望这些笔试题对其它朋友有所帮助,文中内容如若涉及到他人的版权或是隐私请通知我,我会在第一时间对文章内容进行处理操作,最后也希望看到此文的朋友对文中的内容给予批评指正,风尘在此先行谢过!Ok,现在进入正题://///////////////////////////////类继承初始化方法调用相关笔试题原创 2013-06-01 11:02:08 · 1556 阅读 · 0 评论 -
java线程安全的单例模式
面试的时候,常常会被问到这样一个问题:请您写出一个单例模式(Singleton Pattern)吧。好吧,写就写,这还不容易。顺手写一个:public final class EagerSingleton { private static EagerSingleton singObj = new EagerSingleton(); private EagerSingleton(){转载 2013-06-24 18:35:10 · 603 阅读 · 0 评论 -
JAVA 泛型全面讲解
本文对Java泛型进行了全面的总结。文章内容包括普通泛型、通配符、受限泛型、泛型接口、泛型方法、返回泛型类型实例等等。虽然Scala创始人Martin Odersky说当年正是因为Java泛型的丑陋,所以才想到要创建一个新的语言,不过这仍然不妨碍我们学习Java泛型。毕竟即使听说Java泛型不好用,但好不好用还是得会用了才知道。下面是一些有关Java泛型转载 2013-06-25 18:50:54 · 617 阅读 · 0 评论 -
死锁(deadlock)、活锁(livelock)与饿死(starvation)
死锁(deadlock)、活锁(livelock)与饿死(starvation)发表于 2012-10-22 | 分类: 其他 | 标签: 死锁、活锁、饿死做作业的时候发现,貌似活锁的概念在中英文的世界里是不一样的。首先是来自wikipedia的解释:A livelock is similar to a deadlock, except that the s转载 2013-11-07 21:20:23 · 14644 阅读 · 0 评论 -
JAVA线程池原理以及几种线程池类型介绍
JAVA线程池原理以及几种线程池类型介绍(转载) 在什么情况下使用线程池? 1.单个任务处理的时间比较短 2.将需处理的任务的数量大 使用线程池的好处: 1.减少在创建和销毁线程上所花的时间以及系统资源的开销 2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。 线转载 2013-11-08 12:03:47 · 4116 阅读 · 0 评论 -
JAVA线程池shutdown和shutdownNow的区别
shutDown() 当线程池调用该方法时,线程池的状态则立刻变成SHUTDOWN状态。此时,则不能再往线程池中添加任何任务,否则将会抛出RejectedExecutionException异常。但是,此时线程池不会立刻退出,直到添加到线程池中的任务都已经处理完成,才会退出。 shutdownNow() 根据JDK文档描述,大致意思转载 2013-11-08 11:39:38 · 1278 阅读 · 0 评论 -
详细解析Java中抽象类和接口的区别
在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进 行抽象类定义时对于abstract class和interface的选择显得比较随意。其实,两转载 2013-11-09 12:19:58 · 631 阅读 · 0 评论 -
java中的lock和synchronized区别是什么
1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候 线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定, 如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断 如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,转载 2013-11-09 15:53:33 · 808 阅读 · 0 评论 -
Java中hashmap和hashtable的区别
1、 继承和实现区别 Hashtable是基于陈旧的Dictionary类,完成了Map接口;HashMap是Java 1.2引进的Map接口的一个实现(HashMap继承于AbstractMap,AbstractMap完成了Map接口)。 2、 线程安全不同 HashTable的方法是同步的,HashMap是未同步,所以在多线程场合要手动同步HashMap。 3、 对nu转载 2013-11-10 22:04:03 · 950 阅读 · 0 评论 -
Java 序列化的高级认识
Java 序列化的高级认识如果你只知道实现 Serializable 接口的对象,可以序列化为本地文件。那你最好再阅读该篇文章,文章对序列化进行了更深一步的讨论,用实际的例子代码讲述了序列化的高级认识,包括父类序列化的问题、静态变量问题、transient 关键字的影响、序列化 ID 问题。在笔者实际开发过程中,就多次遇到序列化的问题,在该文章中也会与读者分享。 评论:转载 2013-11-25 20:47:44 · 1046 阅读 · 0 评论 -
JAVA启动参数整理
java启动参数共分为三类;其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用; 一.标准参数-client 设转载 2013-11-28 10:42:59 · 2097 阅读 · 0 评论 -
JDK中设计模式
本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图。首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助。一、设计模式是什么(1)反复出现问题的解决方案(2)增强软件的灵活性(3)适应软件不断变化二、学习JDK中设计模式的好处(1)借鉴优秀代码的设计,有助于提高代码设计能力(2)JDK的设计中体现了大多数设计模式,转载 2013-12-02 17:32:08 · 692 阅读 · 0 评论 -
xml和java Bean的直接转换,Xmap
[java] view plaincopypackage test; import java.util.ArrayList; import java.util.List; import org.nuxeo.common.xmap.annotation.XNode; import org.nuxeo.common.xma转载 2014-08-08 10:21:06 · 1407 阅读 · 0 评论