随笔分类 - Java编程
摘要:本篇主要介绍的是我们在日常开发中经常用到的JDK对象,这里进行了一些分类性总结和差异比较。由于这里涉及的很多工具类都是大家耳熟能详的,因此不会长篇大论的介绍每一个概念和细节,我们还是继续秉承该系列的风格,通过更多实用的可执行的示例代码和关键性注释来阐述他们的功能和技术细节,让我们现在就开始吧。 1. 大数值对象(BigDecimal): 和普通的原始类型相比,该类主要提供以下几点优势: 1) 可以表示任意大十进制数值; 2) 提供了基本的数学函数,同时也支持各种数学运算符; 3) 提供了与字符串(String)和原始数值类型之间的各种转换; 4) 与double和Double相比,在进行浮点.
阅读全文
摘要:Java编程语言是第一个设计成为全面支持国际化的语言。从一开始,它就具备了进行有效的国际化所必须的一个重要特征:使用Unicode来处理所有字符串。支持Unicode使得在Java编程语言中,编写程序来操作多种语言的字符串变得异常方便。多数程序员认为进行国际哈需要做的事情就是支持Unicode并在用户接口中对消息进行翻译。然而在实际的开发中,国际化一个程序所需要做的绝不仅仅是提供Unicode支持,它还包括日期、时间、货币和数字等格式上的差异。 1. Locales: 需要依赖国际化的两个主要格式化类为NumberFormat和DateFormat,它们在通过工厂方法获取其实现子类时,都会依.
阅读全文
摘要:JDBC是Sun公司发布的数据库连接API组件,使开发人员可以通过这个API接口连接到多种数据库,如Oracle、MySQL等,并使用SQL语句完成数据库的查询和更新等操作。JDBC主要分为两层,第一层为Java的接口层,主要面向Java的应用程序开发者,它定义了操作数据库的各种功能的接口,第二层为数据库驱动层,为数据库供应商提供了注册其数据库产品驱动程序的接口,两者之间是通过驱动管理器来负责协调和管理的。由于JDBC为所有支持的数据库提供了统一的API接口,因此在实际的开发中,如果软件产品被要求同时支持多种数据库平台,其间主要的差异将来自于不同数据库产品在特殊SQL语句方面的差异,至于调用.
阅读全文
摘要:Java主要提供了三种XML的解析和节点遍历模型,它们分别是DOM(最常用)、SAX(最高效)和XPath(最直接)。我们这里主要是通过实例的方式一步一步来了解其中主要的两种模型DOM和XPath。 1. 最简单的XML: 1 //1. 这个例子是通过Element的TagName(标签名)来直接获取元素对象实例的。 2 //然后再通过该Element访问其包含的数据。 3 //2. 这个例子中<RootElement>、<FirstElement>和<SecondElement>都被称为Element。 4 //3. "I am the firs
阅读全文
摘要:这一篇并不想过多的介绍Java中关于反射的概念,我想即便是对于Java的初学者而言也并不感到陌生,该篇将一如既往的为您提供大量的可执行示例代码和丰富的注释信息,尽可能覆盖Java反射的各个技术环节,从更多的视角为您剖析反射的机制和应用场景,以及它在效率方面的不尽如人意之处。 1. 类属性反射: 每一个Java对象都会包含一个描述其属性(metadata)信息的类对象,该对象将作为Java反射中最重要的一个入口点,几乎所有和反射相关的应用都是从这里开始的。 1) 反射类的名字: 1 public static void main(String[] args) { 2 S...
阅读全文
摘要:1. InputStream/OutputStream的字节流家族: 在C++的标准库中也同样存在这样一个流家族,他们是以iostream为接口,不同的子类提供不同的输出介质,如ifstream和ofstream分别是指向文件的输入输出流,然而C++的标准库为其开发者提供的接口功能也是相对有限的,因此很多的开发者经常会选择使用crt中提供的标准文件输入输出等,如fopen、fclose、fread和fwrite等。与此相比,Java的Framework确实更胜一筹,为其开发者提供了大量的实现类和接口功能,同时也精心设计整个输入输出框架,最为突出的就是基于装饰者(Decoration)模式的接.
阅读全文
摘要:1. Java集合类库中最重要的两个接口Collection<E>和Map<K,V>,其中Collection接口又再次划分为List和Set两大子接口,List中可以包含重复的元素,Set中则不可以。以下列举出一些常用的集合实现类,他们均分别继承自这两个接口: 1) ArrayList: 一种可以动态增长和缩减的索引序列(动态数组,类似于C++中的vector); 2) LinkedList: 一种可以在任何位置进行高效的插入和删除操作的有序序列(类似于C++中list); 3) ArrayDeque: 一种用循环数组实现的双端队列(类似于C++中的deque); 4
阅读全文
摘要:1. 第一个线程程序: 1 public static void main(String[] args) { 2 // 1. 创建了一个线程对象,同时创建了一个匿名内部类Runnable的实现类 3 // 2. Runnable实现类中的run方法是线程执行时的方法体。 4 Thread t1 = new Thread(new Runnable() { 5 @Override 6 public void run() { 7 for (int i = 0; i...
阅读全文
摘要:八、泛型程序设计: 1. 泛型类的定义,见如下代码: 1 public class Pair<T,U> { 2 public Pair() { first = null; second = null; } 3 public Pair(T first,U second) { this.first = first; this.second = second; } 4 5 public T getFirst() { return first; } 6 public U getSecond() { return ...
阅读全文
摘要:六、接口与内部类: 1. 接口和抽象类:Java通过interface关键字来表示接口,接口中不能包含非静态域字段,所有的域成员均是公有的抽象方法,如Comparable接口,如果希望利用Arrays.sort方法,数组的成员必须实现该接口。抽象类中包含抽象方法,和接口一样抽象类也不能被实例化。 1) 接口不能被实例化,但是可以声明接口的变量指向其实现类的对象。 2) 每个类只能有一个超类,但是可以实现多个接口。 以下为Java的接口和抽象类的定义方式: 1 public interface Comparable { 2 int compareTo(Object other); 3 } 4 5
阅读全文
摘要:四、枚举: 枚举的是在Java 1.5SE 中开始支持的,以下为Java枚举的基本概念和应用技巧: 1. 所有的enum对象均是由class对象作为底层支持的,该对象继承自JDK中的Enum<E>,但是该底层类确实final类,既不能再被其他的类继承。 2. 枚举的出现完全替代了原有的"public static final"常量表示法,枚举以一种更加合理、优雅和安全的方式替换了原有的方案。其最基本的声明方式如下:1 public enum Color {2 RED, BLUE, BLACK, YELLOW3 } 3. Enum<E>中构造函数的原型
阅读全文
摘要:一、基本程序设计结构: Java的基本程序结构、关键字、操作符都和C/C++非常相似,以下为主要的几点区别: 1. Java的原始数值型数据类型中不包含无符号类型,如c中的unsigned int。 2. 在进行移位运算时,当向左边移动时,如1 << 35, 对于int类型,由于其占有4个bytes(32bits), 因此在Java中,大于32的移位将对32取模,即1 << 35的结果等于1 << 3,以此类推,long将会对64取模。对于int类型而言,如果确实需要获取32位以上的移位,需要将返回值的类型提升到long即可。 3. 在c语言中,可以通过判断
阅读全文
摘要:12. 明确的告诉java 2d你将要完成的绘制,而不是使用一个更为通用的方式,这样能够带来更好的性能。 1 //画线的bad way 2 Shape line = new Line2D.Double(LINE_X, BAD_Y, LINE_X + 50, BAD_Y + 50); 3 g2d.draw(line); 4 5 //画线的good way 6 g.drawLine(LINE_X, GOOD_Y, LINE_X + 50, GOOD_Y + 50); 7 8 //画rectangle的bad way 9 S...
阅读全文
摘要:1. main函数不要通过直接调用JFrame子类的构造来启动窗体程序,因为main本身并非运行于EDT中,因此可能会给UI带来同步问题,建议使用一下方式运行: 1 public static void main(String args[]) { 2 Runnable doCreateAndShowGUI = new Runnable() { 3 @Override 4 public void run() { 5 //该方法为该类的私有静态方法,用于启动JFrame的主界面。 6 ...
阅读全文