`

Java杂谈(五)

    博客分类:
  • java
阅读更多

 
   1. Java关于XML的解析   
   相信大家对XML都不陌生,含义是可扩展标记语言。本身它也就是一个数据的载体以树状表现形式出现。后来慢慢的数据变成了信息,区别是信息可以包括可变的状态从而针对程序硬编码的做法变革为针对统一接口硬编码而可变状态作为信息进入了XML中存储。这样改变状态实现扩展的唯一工作是在XML中添加一段文本信息就可以了,代码不需要改动也不需要重新编译。这个灵活性是XML诞生时候谁也没想到的。  
 
   当然,如果接口要能提取XML中配置的信息就需要程序能解析规范的XML文件,Java中当然要提高包对这个行为进行有利支持。笔者打算讲到的两个包是org.w3c.dom和javax.xml.parsers和。(大家可以浏览一下这些包中间的接口和类定义)  
     
   Javax.xml.parsers包很简单,没有接口,两个工厂配两个解析器。显然解析XML是有两种方式的:DOM解析和SAX解析。本质上并没有谁好谁不好,只是实现的思想不一样罢了。给一个XML文件的例子:  
   <?xml version=”1.0” encoding=”UTF-8” >  
   <root >  
<child name=”Kitty” >   
   A Cat   
   </child >  
   </root >  
     
   所谓DOM解析的思路是把整个树状图存入内存中,需要那个节点只需要在树上搜索就可以读到节点的属性,内容等,这样的好处是所有节点皆在内存可以反复搜索重复使用,缺点是需要消耗相应的内存空间。  
     
   自然SAX解析的思路就是为了克服DOM的缺点,以事件触发为基本思路,顺序的搜索下来,碰到了Element之前触发什么事件,碰到之后做什么动作。由于需要自己来写触发事件的处理方案,所以需要借助另外一个自定义的Handler,处于org.xml.sax.helpers包中。它的优点当然是不用整个包都读入内存,缺点也是只能顺序搜索,走完一遍就得重来。  
     
   大家很容易就能猜到,接触到的J2ee框架用的是哪一种,显然是DOM。因为类似Struts,Hibernate框架配置文件毕竟是很小的一部分配置信息,而且需要频繁搜索来读取,当然会采用DOM方式(其实SAX内部也是用DOM采用的结构来存储节点信息的)。现在无论用什么框架,还真难发现使用SAX来解析XML的技术了,如果哪位仁兄知道,请让笔者也学习学习。  
 
   既然解析方式有了,那么就需要有解析的存储位置。不知道大家是否发现org.w3c.dom这个包是没有实现类全部都是接口的。这里笔者想说一下Java如何对XML解析是Jdk应该考虑的事,是它的责任。而w3c组织是维护定义XML标准的组织,所以一个XML结构是怎么样的由w3c说了算,它不关心Java如何去实现,于是乎规定了所有XML存储的结构应该遵循的规则,这就是org.w3c.dom里全部的接口目的所在。在笔者看来,简单理解接口的概念就是实现者必须遵守的原则。  
 
   整个XML对应的结构叫Document、子元素对应的叫做Element、还有节点相关的Node、NodeList、Text、Entity、CharacterData、CDATASection等接口,它们都可以在XML的语法中间找到相对应的含义。由于这里不是讲解XML基本语法,就不多介绍了。如果大家感兴趣,笔者也可以专门写一篇关于XML的语法规则帖与大家分享一下。  
 
   2. Java Swing  
   Swing是一个让人又爱又恨的东西,可爱之处在于上手很容易,较AWT比起来Swing提供的界面功能更加强大,可恨之处在于编复杂的界面工作量实在是巨大。笔者写过超过3000行的Swing界面,感觉用户体验还不是那么优秀。最近又写过超过6000行的,由于功能模块多了,整体效果还只是一般般。体会最深的就一个字:累! 所以大家现在都陆续不怎么用Swing在真正开发的项目上了,太多界面技术可以取代它了。笔者去写也是迫于无奈组里面大家都没写过,我不入地域谁入?  
     
   尽管Swing慢慢的在被人忽略,特别是随着B/S慢慢的在淹没C/S,笔者倒是很愿意站出来为Swing正身。每一项技术的掌握绝不是为了流行时尚跟风。真正喜欢Java的朋友们还是应该好好体会一下Swing,相信在校的很多学生也很多在学习它。很可能从Jdk 1.1、1.2走过来的很多大学老师可能是最不熟悉它的。  
Swing提供了一组轻组件统称为JComponent,它们与AWT组件的最大区别是JComponent全部都是Container,而Container的特点是里面可以装载别的组件。在Swing组件中无论是JButton、JLabel、JPanel、JList等都可以再装入任何其他组件。好处是程序员可以对Swing组件实现“再开发”,针对特定需求构建自己的按钮、标签、画板、列表之类的特定组件。  
 
   有轻自然就有重,那么轻组件和重组件区别是?重组件表现出来的形态因操作系统不同而异,轻组件是Swing自己提供GUI,在跨平台的时候最大程度的保持一致。  
那么在编程的时候要注意一些什么呢?笔者谈谈自己的几点经验:  
 
   a. 明确一个概念,只有Frame组件才可以单独显示的,也许有人会说JOptionPane里面的静态方法就实现了单独窗口出现,但追寻源代码会发现其实现实出来的Dialog也需要依托一个Frame窗体,如果没有指定就会默认产生一个然后装载这个Dialog显示出来。  
 
   b. JFrame是由这么几部分组成:  
   最底下一层JRootPane,上面是glassPane (一个JPanel)和layeredPane (一个JLayeredPane),而layeredPane又由contentPane(一个JPanel)和menuBar构成。我们的组件都是加在contentPane上,而背景图片只能加在layeredPane上面。 至于glassPane是一个透明的覆盖了contentPane的一层,在特定效果中将被利用到来记录鼠标坐标或掩饰组件。  
 
   c. 为了增强用户体验,我们会在一些按钮上添加快捷键,但Swing里面通常只能识别键盘的Alt键,要加入其他的快捷键,必须自己实现一个ActionListener。  
 
   d. 通过setLayout(null)可以使得所有组件以setBounds()的四个参数来精确定位各自的大小、位置,但不推荐使用,因为好的编程风格不应该在Swing代码中硬编码具体数字,所有的数字应该以常数的形式统一存在一个静态无实例资源类文件中。这个静态无实例类统一负责Swing界面的风格,包括字体和颜色都应该包括进去。  
 
   e. 好的界面设计有一条Golden Rule: 用户不用任何手册通过少数尝试就能学会使用软件。所以尽量把按钮以菜单的形式(不管是右键菜单还是窗体自带顶部菜单)呈现给顾客,除非是频繁点击的按钮才有必要直接呈现在界面中。  

分享到:
评论

相关推荐

    JAVA杂谈

    ### JAVA杂谈:深入探索Java的核心机制与实践 #### 动态加载机制解析 Java的动态加载机制是其面向对象编程(OOP)理念的核心体现之一,它使得Java能够在运行时根据需要加载类,而非在程序启动之初加载所有类。这种...

    java杂谈

    ### Java杂谈:深入理解Java的关键概念 #### 动态加载机制:理解OOP思想的桥梁 Java作为一种纯粹的面向对象编程语言,其设计之初便致力于简化和优化面向对象编程(OOP)的概念,使之更加直观易懂。动态加载机制便是...

    java杂谈——一个计算机专业学生几年的编程经验汇总谈

    ### Java杂谈——一个计算机专业学生几年的编程经验汇总谈 #### 一、关于动态加载机制 在Java中,动态加载机制是实现高效资源管理的关键之一。它允许Java虚拟机(JVM)根据需要加载类,而不是一次性加载所有的类。...

    Java学习杂谈1-12

    Java学习杂谈系列涵盖了许多关于Java编程的基础概念和机制,以下是对这些知识点的详细解读: 1. **动态加载机制**: 动态加载机制是Java语言的一个关键特性,它使得程序在运行时才能确定哪些类需要加载。当你声明...

    java学习杂谈

    ### Java学习杂谈:深入解析Java的动态加载机制、类搜索原理及JDK与JRE的区别 #### 动态加载机制解析 Java的学习者往往在掌握面向对象编程(OOP)概念时,会遇到“动态加载机制”这一关键点。相较于C++中面向过程...

    java杂谈-一个计算机专业学生几年的编程经验汇总谈.pdf

    Java编程语言是计算机科学中的一个重要组成部分,尤其对于计算机专业的学生来说,掌握Java的基础和高级概念至关重要。本文主要围绕Java的一些核心概念进行讨论,旨在帮助读者更好地理解和应用Java。 首先,我们来看...

    java杂谈-一个计算机专业学生几年的编程经验汇总谈实用.pdf

    在本文中,作者分享了作为一名计算机专业学生的编程经验,主要关注Java语言。文章分为三个部分,分别讨论了Java的动态加载机制、查找class文件的原理以及JDK和JRE的区别。 1. 动态加载机制: Java的动态加载机制...

    java陷阱--面试(题集)杂谈

    第五,HashMap和Hashtable都是Java中的散列表实现,但有几点关键区别:HashMap是非同步的,而Hashtable是同步的;HashMap允许null键和值,Hashtable不允许;HashMap的迭代顺序是不确定的,而Hashtable的迭代顺序是...

    程序设计经验杂谈,程序设计,经验杂谈

    例如,Python有PEP 8,Java有Google Java Style Guide,这些都是值得遵循的编码规范。 最后,项目管理在大型项目中扮演着重要角色。了解敏捷开发理念,如Scrum或Kanban,可以帮助团队有效地组织和管理任务。同时,...

    JAVA面试题解惑系列合集

    .31 1.6 JAVA面试题解惑系列(六)——字符串(String)杂谈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36 1.7 JAVA面试题解惑系列(七)——日期和时间的处理 . . . . . . . . . . . ....

    2009年Java认证考试重点指导

    [学习资料] 09年Java认证考试:JFreeChart做题杂谈 [学习资料] 09年Java认证考试:struts2.0的标签库(简介) [考试试题] 09年Java认证考试:5道JAVA题 [考试试题] 09年Java认证考试:传递引用的经典 [学习资料] 09...

    臧圩人--JAVA面试题解惑系列合集.pdf

    **1.6 JAVA面试题解惑系列(六)——字符串(String)杂谈** - **知识点**:深入探讨字符串处理技术,包括字符串拼接、比较、格式化等常见操作的内部实现,以及性能优化建议。 **1.7 JAVA面试题解惑系列(七)——...

    java陈国君(第二版)课件

    《Java陈国君(第二版)课件》是一本备受推崇的Java入门教材,由资深Java专家陈国君精心编著,旨在帮助初学者系统、全面地掌握Java编程技术。这本书以深入浅出的方式介绍了Java的核心概念和实战技巧,对于想要踏入...

    Java面试题解惑系列

    来自网络,主要包括以下内容:1、类初始化的顺序;...6.String杂谈;7.日期与时间的处理;8.基本类型总结;9.继承,多态,重载,重写;10.多线程;11.运算符总结。 适合将要笔试面试Java的朋友参考。

    关于Java的几个经典问题

    到底创建了几个String对象(三)——变量(属性)的覆盖 (四)——final、finally和finalize的区别 (五)——传了值还是传了引用(六)——字符串(String)杂谈 (七)——日期和时间的处理 (八)——聊聊基本...

    JAVA面试题解惑系列(六)——字符串(String)杂谈[收集].pdf

    Java中的字符串(String)是编程面试中的热门话题,其特性与操作是面试官常常用来考察候选人基础知识的手段。本文将深入探讨String对象的一些关键知识点。 首先,我们要了解`String`类的`length()`方法。这个方法返回...

Global site tag (gtag.js) - Google Analytics