用三种方法来实现字符串的反转
/**
* @(#)ReverseString.java
*
* ReverseString application
*
* @author
* @version 1.00 2010/4/20
*/
import java.util.*;
import java.io.*;
public class ReverseString {
public static void main(String[] args) throws IOException{
// TODO, add your application code
String orginal;
System.out.println("Please input the string to reverse:\n");
Scanner in=new Scanner(System.in);
orginal=in.nextLine();
char[] ch=orginal.toCharArray();
//采用直接反转
/*
char[] b=new char[ch.length];
for(int i=0;i<ch.length;i++){
b[i]=ch[ch.length-1-i];
}
for(int i=0;i<ch.length;i++){
System.out.print(b[i]);
}
*/
/*
char temp;
for(int i=0;i<ch.length/2;i++){
temp=ch[i];
ch[i]=ch[ch.length-1-i];
ch[ch.length-1-i]=temp;
}
for(int i=0 ......
英文网站
http://www.javaalmanac.com - Java开发者年鉴一书的在线版本,想要快速查到某种Java技巧的用法及示例的代码这是一个不错的去处.
http://www.onjava.com - O'Reilly的Java网站. 每周都有新文章.
http://java.sun.com - 官方的Java开发者网站 - 每周都有新文章发表.
http://www.developer.com/java - 由Gamelan.comJavar技术文章网站.
http://www.java.net - Sun公司维护的一个Java社区网站
http://www.builder.com - Cnet的Builder.com网站 - 所有的技术文章, 以Java为主.
http://www.ibm.com/developerworks/java - IBM的Developerworks技术网站; 这是其中的Java技术主页.
http://www.javaworld.com - 最早的一个Java站点. 每周更新Java技术文章.
http://www.devx.com/java - DevX维护的一个Java技术文章网站.
http://www.fawcette.com/javapro - JavaPro在线杂质网站
http://www.sys-con.com/java - Java Developers Journal的在线杂志网站.
http://www.javadesktop.org - 位于Java.net的一个Java桌面技术社区网站.
http://www.theserverside.com - 这是一个讨论所有Java服务端技术的网站. m
http://www.jars.com - 提供Java评论服务. 包括各种frame ......
本文出自 “唐大老师” 博客,请务必保留此出处http://tscjsj.blog.51cto.com/412451/84561
public class Bubble {
// 冒泡排序函数1
public static void bubbleSort1(Comparable []data){
int position,scan;
Comparable temp;
for(position = data.length-1;position>=0;position--){
for(scan=0;scan<=position-1;scan++){
if(data[scan].compareTo(data[scan+1])<0){
temp = data[scan];
data[scan] = data[scan+1];
data[scan+1]=temp;
}
}
}
}
// 冒泡排序函数2
public static int[] bubbleSort2(int[] m){
int intLenth = m.length;
/*执行intLenth次*/
for (int i=0;i<intLenth;i++){
/*每执行一次,将最小的数排在后面*/
for (int j=0; j<intLenth-i-1;j++)
{
int a = m[j];
int b = m[j + 1];
if (a < b)
{
m[j] = b;
m[j + 1] = a;
}
}
}
return m;
}
public ......
一般,有3种使用锁进行同步的方法
a.方法同步,例如public synchronized void xxx()...
b.静态方法同步,例如public static synchronized void xxx()...
c.程序块同步,例如
...
synchronized(object oLock) //注意:object不一定是该类的实例
{
...
}
在用法a中,当某线程执行方法xxx时,jvm会锁定该类的实例,直到方法xxx执行完毕。执行xxx的过程看看成是这样的:
*请求得到类实例的实例锁,假如有其他线程在执行,则等待;
*得到实例锁,执行xxx;
*执行完毕,释放实例锁;
注意,这个过程是jvm完成的,我们只需要把某个对象方法声明为synchronized即可,实例锁可以理解为实例本身。
......
由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。
需要明确的几个问题:
1)synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)身上。
2)无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问。
3)每个对象只有一个锁(lock)与之相关联。
4)实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
1、synchronized关键字的作用域有二种:
1)是某个对象实例内,synchronized aMethod(){ ......
Java设计模式之Facade模式 GOF《设计模式》一书对Facade模式是这样描述的:
为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。
大致意思是说:使用一种比原有方式更简单的办法与系统交互。例如,我们把一个很重要的文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个
抽屉里,我们要想取出这个文件,第一步肯定要拿到第一个抽屉的钥匙,然后打开它再拿出第二个抽屉的钥匙,最后打开第二个抽屉取出文件。
我就上面说的那个情形写一下实现代码,首先我们要实现二个子系统,呵呵,把抽屉比喻成系统,有点夸张了(DrawerOne、DrawerTwo):
class DrawerOne {
public void open(){
System.out.println("第一个抽屉被打开了");
getKey();
}
public void getKey(){
System.out.println("得到第二个抽屉的钥匙");
}
}
class DrawerTwo{
public void open(){
System.out.println("第二个抽屉被打开了");
getFile();
}
public void getFile(){
System.out.println("得到这个重要文件& ......