Java语言深入

Java语言深入

Java线程同步的使用

Synchronized,顾名思义,代表线程同步。那么,在java编程中如何使用它呢?

  我们首先来看这样一个情况:对于同一个变量synDemo,我们分别在2个不同的线程中调用synDemo.synMethord1()与synDemo.synMethord2()。
[code]
  package com.cnblogs.gpcuster;/** * * @author Aaron.Guo * */

  public class Tester {public static void main(String[] args) {final SynDemo synDemo = new SynDemo();Thread thread1 = new Thread() {@Overridepublic void run() {// TODO Auto-generated method stub

  super.run();synDemo.synMethord1();}};Thread thread2 = new Thread() {@Overridepublic void run() {// TODO Auto-generated method stub

处理鼠标和键盘事件的方法

 Java中的鼠标和键盘事件

  1、使用MouseListener借口处理鼠标事件

  鼠标事件有5种:按下鼠标键,释放鼠标键,点击鼠标键,鼠标进入和鼠标退出

  鼠标事件类型是MouseEvent,主要方法有:

  getX(),getY() 获取鼠标位置

  getModifiers() 获取鼠标左键或者右键

  getClickCount() 获取鼠标被点击的次数

  getSource() 获取鼠标发生的事件源

  事件源获得监视器的方法是addMouseListener(),移去监视器的方法是removeMouseListener()

  处理事件源发生的时间的事件的接口是MouseListener 接口中有如下的方法

  mousePressed(MouseEvent) 负责处理鼠标按下事件

  mouseReleased(MouseEvent) 负责处理鼠标释放事件

  mouseEntered(MouseEvent) 负责处理鼠标进入容器事件

  mouseExited(MouseEvent) 负责处理鼠标离开事件

  mouseClicked(MouseEvent) 负责处理点击事件

16进制和字节数组互转程序

[code]public static String stringToHexString(String strPart) {

  String hexString = "";

  for (int i = 0; i < strPart.length(); i++) {

  int ch = (int) strPart.charAt(i);

  String strHex = Integer.toHexString(ch);

  hexString = hexString + strHex;

  }

  return hexString;

  }

  private static String hexString="0123456789ABCDEF";

  /*

  * 将字符串编码成16进制数字,适用于所有字符(包括中文)

  */

  public static String encode(String str)

  {

  // 根据默认编码获取字节数组

  byte[] bytes=str.getBytes();

  StringBuilder sb=new StringBuilder(bytes.length*2);

获取内部类静态成员的方法

最近需要些一个可配置的索引构建程序,需要在运行时调用Lucene包的如下类及其成员:

  引用

  Nested Class Summary

  static class Field.Index

  Specifies whether and how a field should be indexed.

  static class Field.Store

  Specifies whether and how a field should be stored.

  static class Field.TermVector

  Specifies whether and how a field should have term vectors.

  lucene api中称之为Nested Class,意为嵌套类,而嵌套类内部的File.Index的成员又是静态成员。

  引用
[code]
  Field Summary

  static Field.Index ANALYZED

  Index the tokens produced by running the field's value through an Analyzer.

公告栏文字滚动效果代码

首先要掌握一个概念:一个字符串在计算机屏幕中所占的像素,比方说取一个JLabel里面的Text所占的宽和高,方法如下: (主要用到FontMetrics类)

  import java.awt.FontMetrics;

  import javax.swing.JLabel;

  JLabel label = new JLabel("test Label ");

  FontMetrics metrics = label.getFontMetrics(label.getFont());

  int textH = metrics.getHeight();   //字符串的高,只和字体有关

  int textW = metrics.stringWidth(label.getText());   //字符串的宽

  通常情况下,一个空格占3个像素。

  具体代码如下:
[code]
  Test.java

  import java.awt.BorderLayout;

  import java.awt.Color;

  import java.awt.Dimension;

  import java.awt.FontMetrics;

几行代码轻松实现urlrewrite

实现urlrewrite不用自己HttpHandle,也不用自己实现HttpModule,用几行代码就可以轻松实现。

具体做法如下:打开global.asax.cs,定位到protected void Application_BeginRequest(Object sender, EventArgs e)。从方法名我想也能猜到它是做什么的。输入如下代码:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
   string oldUrl = HttpContext.Current.Request.RawUrl ;

   string pattern = @"^(.+)default/(\d+)\.aspx(\?.*)*$";
   string replace = "$1default.aspx?id=$2";

   if(Regex.IsMatch(oldUrl, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled))
   {
        string newUrl = Regex.Replace(oldUrl, pattern, replace, RegexOptions.Compiled | 
RegexOptions.IgnoreCase);
        this.Context.RewritePath(newUrl);
   }
}

有了上边这段代码,我访问一个类似:

编写高级JScript代码步骤

1、创建高级对象

使用构造函数来创建对象

构造函数是一个函数,调用它来例示并初始化特殊类型的对象。可以使用 new 关键字来调用一个构造函数。下面给出了使用构造函数的新示例。

var myObject = new Object(); // 创建没有属性的通用对象。 

var myBirthday = new Date(1961, 5, 10); // 创建一个 Date 对象。 

var myCar = new Car(); // 创建一个用户定义的对象,并初始化其属性。 

通过构造函数将一个参数作为特定的 this 关键字的值传递给新创建的空对象。然后构造函数负责为新对象执行适应的初始化(创建属性并给出其初始值)。完成后,构造函数返回它所构造的对象的一个参数。

编写构造函数

可以使用 new 运算符结合像 Object()、Date() 和 Function() 这样的预定义的构造函数来创建对象并对其初始化。面向对象的编程其强有力的特征是定义自定义构造函数以创建脚本中使用的自定义对象的能力。创建了自定义的构造函数,这样就可以创建具有已定义属性的对象。下面是自定义函数的示例(注意 this 关键字的使用)。

[code]

如何更合理利用Java中的throw error

以前,我觉得编程语言中最让人不解的部分就是它能够创建错误。当时我对Java语言中的throw关键字的第一反应就是“啊,这也太傻了,为什么我们想要引发一个错误(error)?”我觉得错误是我的敌人,应当避免的,所以创建错误是毫无用处甚至是危险的。我认为在JavaScript中加入这样的关键字是多此一举。但随着我编程经验的丰富,我逐渐变成了throw我的error粉丝。合理的使用它们会让对代码的调试和维护大大简化。

在编程的时候,Error通常出现在不期望的事情发生时。可能是传入函数的参数值不正确,或者是运算符的操作数不合法。为此编程语言定义了一个基本的规则:当上述情况发生时,就产生一个错误来让编程人员对代码进行修复。如果这些错误不被抛出或反馈给你,那么调试程序几乎是不可能的。如果所有的错误都“悄悄地”发生,那么你很难在第一时间发现问题所在,并将其修复。因此Error是开发者的朋友,而不是敌人。

Error的问题所在是它们会在错误的时间和错误的地点发生。更糟的是,默认的错误信息通常晦涩难懂,很难解释哪里出了问题。JavaScirpt的错误信息更是不包含任何有价值的信息,而且还很隐蔽(尤其是在IE里运行时)。想象一下如果能有这样的错误提示出现“因为某件事情发生导致某个函数调用失败”,那么立刻我们的调试任务就变得简单了,这就是throw自己的error的好处。

提高开发水平的十大要诀

【转】在当今的IT就业市场,有人欢喜有人忧。有人对目前的工作和薪水很满意,有人目前正面临着下岗,或者已经下岗……

可能你是公司里唯一谙熟某项关键技术的高手,缺了你,公司便玩不转了;也可能你所在的公司对你现有的专业技能高枕无忧,认为你在任期内足以胜任公司给你的开发任务(当然就不会再花银子去培训你啦)。

不要告诉我你们公司对原来用VB3开发的业务处理系统很满意,而你呢,也认为自己除了用C语言开发程序以外,不会再去做别的什么事情。

你是不是对.NET和Java为争夺开发工具市场撕破脸皮而熟视无睹,你是不是对XML将要取代关系数据库而无动于衷以及不屑一顾。你是不是认为你能用汇编或C开发任何东西,所以觉得其它开发工具都不再重要……

如果真是这样,那么你离失业的日子不远了

俗话说--未雨绸缪……

想一想如果你现在失业没有工作会怎么样,

想一想现在还有如此之多的弟兄们为了找一个饭碗而四处奔波。

想一想如果现在你们公司为了抢占市场,突然要进行技术转向,你该怎么办?

想一想你现在为了自己的前途,突然需要改变技术领域,你该怎么办?或者你不满足于现在自己的知识结构,想要再充实一下,但又不知选择那些内容来学习。那么继续往下看,并一起参加讨论吧,相信会有收获的。

如何搭建JSP动态网站环境

Sun推出的JSP(Java Server Pages)是一种执行于服务器端的动态网页开发技术,它基于Java技术。执行JSP时需要在Web服务器上架设一个编译JSP网页的引擎。配置 JSP 环境可以有多种途径,但主要工作就是安装和配置Web服务器和JSP引擎。

下面就以Tomcat作为JSP引擎,配合Tomcat、Apache、IIS这三种Web服务器来讲述3种搭建JSP运行环境的方案。

一、相关软件介绍

1、 J2SDK:Java2的软件开发工具,是Java应用程序的基础。JSP是基于Java技术的,所以配置JSP环境之前必须要安装J2SDK。

2、 Apache服务器:Apache组织开发的一种常用Web服务器,提供Web服务。

同步内容