
J2SE - 语言基础与API
文章平均质量分 86
ccnunlp
这个作者很懒,什么都没留下…
展开
-
【解惑】Java类型间的转型
★ 基本数据类型间的转换1、Java要做到平台无关性,所有的基本数据类型所占的字节数量均是固定的。 boolean ——1/8字节(1 bit) byte —— 1字节 char —— 2字节 short —— 2字节 int —— 4字节 ...2009-09-11 16:03:14 · 133 阅读 · 0 评论 -
【解惑】Java方法参数是引用调用还是值调用?
方法调用(call by) 是一个标准的计算机科学术语。方法调用根据参数传递的情况又分为值调用( call by reference ) 和引用调用( call by value ) 。江湖上有很多关于这两种调用的定义 ,最通常的说法是传递值的是值调用,传递地址的是引用调用。这其实很不恰当,这种 这些说法很容易让我们联想到Java的对...2009-07-19 13:33:57 · 219 阅读 · 0 评论 -
【解惑】类与对象的初始化问题
★ 类常量 Java类常量(final修饰)的值在编译阶段就已经写入了class文件的常量池中(可见《Class文件内容及常量池》)。该类在JVM中运行的任何阶段都不可能改变这个常量值。这也就形成了Java常量定义的两个语法规定:(1) Java类常量必须在类中声明的时候就赋给特定的值。(2) Java类常量绝对不允许赋第二次值。下面是Java类常量的初始化代码...2009-07-19 14:55:43 · 157 阅读 · 0 评论 -
【解惑】Java动态绑定机制的内幕
在Java方法调用的过程中,JVM是如何知道调用的是哪个类的方法源代码? 这里面到底有什么内幕呢? 这篇文章我们就将揭露JVM方法调用的静态(static binding)和动态绑定机制(auto binding)。 ★ 静态绑定机制//被调用的类package hr.test;class Father{ public s...原创 2009-07-19 15:03:37 · 510 阅读 · 0 评论 -
【解惑】小心浅克隆
★ Java对象赋值 Employee e1=new Employee("李"); //Employee是一个自定义类 Employee e2=e1; //赋值对象 e2.setName("王");//改变对象e2的名字 System.out.println(e1.getName()); //打印e1的结果: 王 Employee e1...原创 2009-07-19 16:55:14 · 161 阅读 · 0 评论 -
【解惑】 中断线程Interrupted的用处
★ 线程状态 Java虚拟机将线程运行过程分成四种状态 。 (1) New 新生;(2) Runnable 可运行;(3) Blocked 阻塞;(4) Dead 死亡。 值得注意的是: 线程的可运行状态并不代表线程一定在运行(runnable != running ) 。 大家都知道:所有现代桌面和服务器操作系统都使用了抢占式的线程调度策略 。一旦线程开始执行,并不是总是...2009-07-19 20:05:34 · 334 阅读 · 0 评论 -
【解惑】 慎用守护线程Daemon
public class Test{ public static void main(String[] args){ int i=1; System.out.println("主线程:"+i); } } 当我们运行上面这段简单代码的时候,很多人都会...2009-07-29 15:54:00 · 127 阅读 · 0 评论 -
【解惑】 Java代理机制
代理(Proxy)实际上是一种设计模式。代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式一般涉及到的角色有: 抽象角色:声明真实对象和代理对象的共同接口; 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实...2009-08-14 19:29:52 · 103 阅读 · 0 评论 -
Java集合类(4) —— 介绍HashSet
(1) 为啥要用HahSet? 假如我们现在想要在一大堆数据中查找X数据。LinkedList的数据结构就不说了,查找效率低的可怕。ArrayList哪,如果我们不知道X的位置序号,还是一样要全部遍历一次直到查到结果,效率一样可怕。HashSet天生就是为了提高查找效率的。 (2) hashCode 散列码 散列码是由对象导出的一个整数值。在Object中有一个...2009-08-14 21:56:04 · 236 阅读 · 0 评论 -
【设计模式】 装饰者与IO/Collection框架
装饰者模式 继承是OOP程序设计的一大特点,但其实对于很多复杂问题来说,利用继承关系处理问题往往具有很高的耦合性,不利于代码的维护。利用组合很大程度上可以做到降耦。多用组合,少用继承是OOP设计的重要思想。 装饰者模式给我们提出了一个好的OOP设计原则:类应该对扩展开放,对修改关闭 。 这句话的意思就是,如果问题发生改变,衡量一个好的设计标准就是:你不需要...2009-08-15 20:54:17 · 88 阅读 · 0 评论 -
【JDK优化】java.util.Arrays的排序研究
作者题记:JDK中有很多算法具有优化的闪光点,值得好好研究。 【java.uti.Arrays】包含用来操作数组(比如排序和搜索)的各种方法。这篇文章我们就来研究一些大师们写的排序算法。(1) 基本数据类型数组的排序,如Arrays.sort(int[])等。采用了一种经过调优的快速排序。该算法改编自 Jon L. Bentl...原创 2010-05-12 21:06:27 · 211 阅读 · 0 评论 -
【解惑】 什么是JDBC
(1) 什么是JDBC? 数据库供应商为自己的数据库产品各自设计了不同的协议。Sun公司想让Java应用程序能够跨数据库运行,提出了JDBC。说白了,JDBC就是Java为与数据库连接提供的一套标准通信技术(也有人认为,JDBC是Java连接数据库的API)。 有了它,我们所写的Java程序就可以很容易的不受具体数据库供应商的限制了。 (2) JDBC设计 ...原创 2009-08-26 16:22:58 · 172 阅读 · 0 评论 -
【总结】你所不知道的Java序列化
我们都知道,Java序列化可以让我们记录下运行时的对象状态(对象实例域的值),也就是我们经常说的对象持久化 。这个过程其实是非常复杂的,这里我们就好好理解一下Java的对象序列化。 1、 首先我们要搞清楚,Java对象序列化是将对象的实例域数据( 包括private私有域) 进行持久化存储。而并非是将整个对象所属的类信息进行存储。其实...2009-09-04 11:07:08 · 186 阅读 · 0 评论 -
【总结】杂谈Java异常处理
软件开发中一个古老的说法是:80%的工作使用20%的时间。80%是指检查和处理错误所付出的努力。在许多语言中,编写检查和处理错误的程序代码很乏味,并使应用程序代码变得冗长。原因之一就是它们的错误处理方式不是语言的一部分。尽管如此,错误检测和处理仍然是任何健壮应用程序最重要的组成部分。 Java 提供了一种很好的机制,用强制规定的形式来消除错误处理过程中随心所欲的因素:异常处理。它的优秀之处...原创 2009-07-19 03:51:30 · 114 阅读 · 0 评论 -
【解惑】让人头疼的"相等"关系
Java中判断相等关系一般有两种手段:(1) “==”关系操作符 (2) equals()方法。 显然,基本数据类型变量之间只能用"=="。而对象之间两种手段都是合法的。但是有很多初学者会在“判断Java的相等关系”上面犯错误,这里我们在JVM运行层面上彻底剖析其中的奥秘。如果你对JVM规范不太了解的话,在看本文前请先了解一下JVM运行程序时,在内存中管理的五个运行时数据区,特别是堆和Jav...2009-07-18 21:50:33 · 144 阅读 · 0 评论 -
【总结】Java与字符编码问题详谈
一、字符集和字符编码方式计算机只懂得0/1两种信号,而人类所使用的符号却无法尽数。要让计算机能够表示大千世界的符号,就一定要为每个符号指定一个唯一的整数。而这一套符号与整数的对应集合,就是我们经常谈论的字符集。而且,每一个字符所对应的整数用多少个计算机字节表示,也就涉及到了字符编码方式的问题。我们用比较规范的语言来定义这两个概念:(1) 字符集:抽象字符集合和整数集合之...原创 2009-12-30 09:11:40 · 214 阅读 · 0 评论 -
【解惑】理解java枚举类型
枚举类型是JDK5.0的新特征。Sun引进了一个全新的关键字enum来定义一个枚举类。下面就是一个典型枚举类型的定义:public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN}显然,enum很像特殊的class,实际上enum声明定义的类型就是一个类。而这些类都是类库中Enum类的子类(java.lang.Enum<E>)。...2009-09-26 09:37:27 · 323 阅读 · 0 评论 -
【解惑】深入jar包:从jar包中读取资源文件
我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。在单独运行的时候这些简单的处理当然不会有问题。但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了。看看下面的代码://源代码1:package edu.hxraid;import java.io.*;public class Resource { public vo...2009-10-08 21:13:42 · 3478 阅读 · 1 评论 -
【解惑】领略内部类的“内部”
内部类有两种情况:(1) 在类中定义一个类(私有内部类,静态内部类)(2) 在方法中定义一个类(局部内部类,匿名内部类) 1、私有内部类 —— 在方法之间定义的内部类,非静态 我们首先看看类中内部类的两个特点: (1) 在外部类的作用范围内可以任意创建内部类对象,即使内部类是私有的(私有内部类)。即内部类对包围它的外部类可见。//代码1...2009-10-19 15:38:29 · 194 阅读 · 0 评论 -
【解惑】剖析float型的内存存储和精度丢失问题
问题提出:12.0f-11.9f=0.10000038,"减不尽"为什么? 现在我们就详细剖析一下浮点型运算为什么会造成精度丢失? 1、小数的二进制表示问题 首先我们要搞清楚下面两个问题: (1) 十进制整数如何转化为二进制数 算法很简单。举个例子,11表示成二进制数: ...2009-10-26 15:10:19 · 698 阅读 · 0 评论 -
【总结】java命令解析以及编译器,虚拟机如何定位类
学Java有些日子了,一直都使用IDE来写程序。这样的好处就是能让我连如何用命令行编译,解释执行Java源代码都不知道,就更不清楚JDK中的编译器和虚拟机(包含字节码解释器)是如何定位到类文件的。悲哀呀.......1、安装JDK,配置环境变量。 不将JDK所在的目录配置到系统环境变量中,系统怎么能找到JDK中的编译器,解释器在哪呀?如果不指明...2009-11-01 16:25:05 · 555 阅读 · 0 评论 -
【解惑】数组向上转型的陷阱
问题提出: 有两个类Manager和Employee具有继承关系 Class Manager extends Employee (setBonus是Manager特有方法)。当Manager[] 数组向上转型成Employee[] 数组的时候,很容易出现下面一个陷阱://创建一个Manager数组Manager[] managers=new Manager[10];...原创 2009-11-03 11:44:05 · 349 阅读 · 0 评论 -
【总结】String in Java
作者:每次上网冲杯Java时,都能看到关于String无休无止的争论。还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸裸的站在我们这些Java色狼面前了。嘿嘿....众所周知,String是由字符组成的串,在程序中使用频率很高。Java中的String是一个类,而并非基本数据类型。 不过她却不是普通的类哦!!! 【镜头1】 String对象的创建 ...2009-11-21 17:52:28 · 313 阅读 · 0 评论 -
【解惑】真正理解了protected的作用范围
一提到访问控制符protected,即使是初学者一般都会很自信的认为自己在这方面的理解没有问题。那好,我们提一个问题出来看看..... 问题提出: 请看下面两端代码,其中包B中的猫和鼠都继承了动物类。//代码1:包A中有一个动物类package testa;public class Animal { protected void crowl(St...2009-11-21 18:00:01 · 199 阅读 · 0 评论 -
【JDK优化】 Integer 自动打包机制的优化
我们首先来看一段代码:Integer i=100;Integer j=100;System.out.println(i==j); //trueInteger i=200;Integer j=200;System.out.println(i==j); //false 差不多的两段代码,怎么结果完全不同呢。我们分两步来说明这个问题: 首先 Integer i...2010-03-12 19:14:48 · 172 阅读 · 0 评论 -
【解惑】正确的理解this 和 super
转载: 《无聊:正确的理解this 和 super》原创作者: ZangXT from 优快云 bolg this和super是Java的两个关键字。 先明确一个问题,有人错误的认为它们是对象里的“属性”,这只能怪老师没有讲清楚计算机的本质了。因为计算机的处理器只能用指令去处理数据,像C语言之类的容易理解,就...原创 2009-12-05 09:46:31 · 123 阅读 · 0 评论 -
【解惑】JVM如何理解Java泛型类
//泛型代码public class Pair<T>{ private T first=null; private T second=null; public Pair(T fir,T sec){ this.first=fir; this.second=sec; } ...原创 2009-12-16 11:08:12 · 332 阅读 · 0 评论 -
【解惑】 正确理解线程等待和释放(wait/notify)
对于初学者来说,下面这个例子是一个非常常见的错误。/** * 线程A: 循环50次后等待并放弃锁,让线程B执行。 */class ThreadA extends Thread{ //线程同步的公共数据区 Object oa=null; ThreadA(Object o){ this.oa=o; } //线程A执行逻辑 publi...原创 2009-12-29 13:40:33 · 170 阅读 · 0 评论 -
【总结】Java线程同步机制深刻阐述
全文转载:http://www.iteye.com/topic/164905作者: buaawhl 我们可以在计算机上运行各种计算机软件程序。每一个运行的程序可能包括多个独立运行的线程(Thread)。 线程(Thread)是一份独立运行的程序,有自己专用的运行栈。线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等。 当多个线程同时读写同一份共享...原创 2010-05-16 10:21:00 · 105 阅读 · 0 评论