博文
Java按字节长度截取字符串 广州疯狂JAVA培训(2012-05-25 17:06:00)
摘要:编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。
public static String substring(String str, int toCount,String more)
{
int reInt = 0;
String reStr = "";
if (str == null)
return "";
char[] tempChar = str.toCharArray();
for (int kk = 0; (kk < tempChar.length && toCount > reInt); kk++) {
String s1 = str.valueOf(tempChar[kk]);
byte[] b = s1.getBytes();
reInt += b.length;
reStr += tempChar[kk];
}
if (toCount == reInt || (toCount == reInt - 1))
reStr += more;
return reStr;
}
Web应用程序在浏览器中显示字符串时,由于显示长度的限制,常常需要将字符串截取后再进行显示。但目前很多流行的语言,如C#、Java内部采用的都是 Un......
JAVA中sleep()、wait()、yield()、join()方法浅析(2012-05-25 17:05:00)
摘要:线程退出最好自己实现,在运行状态中一直检验一个状态,如果这个状态为真,就一直运行,如果外界更改了这个状态变量,那么线程就停止运行。
1.sleep()方法
在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”。不推荐使用。
sleep()使当前线程进入阻塞状态,在指定时间内不会执行。
2.wait()方法
在其他线程调用对象的notify或notifyAll方法前,导致当前线程等待。线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁。
当前线程必须拥有当前对象锁。如果当前线程不是此锁的拥有者,会抛出IllegalMonitorStateException异常。
唤醒当前对象锁的等待线程使用notify或notifyAll方法,也必须拥有相同的对象锁,否则也会抛出IllegalMonitorStateException异常。
waite() 和notify()必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生 IllegalMonitorStateException的异常。
3.yield方法
暂停当前正在执行的线程对象。
yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。
yield()只能使同优先级或更高优先级的线程有执行的机会。
4.join方法
等待该线程终止。
等待调用join方法的线程结束,再继续执行。如:t.join();//主要用于等待t线程运行结束,若无此句,main则会执行完毕,导致结果不可预测。广州疯狂JAVA培训......
移动趋势报告:Android热情减退 云服务受青睐(2012-05-25 17:04:00)
摘要:
据国外媒体报道,跨平台程序开发商Appcelerator和市场调研机构IDC联合发布的移动行业趋势季度报告显示,移动开发者对谷歌旗下不同服务的网络效应更感兴趣,但是对于Android平台的开发热情却正在减退。另外报告显示,HTML5还远远没有普及,云服务受到越来越多开发者的青睐,移动行业也从“探索”阶段走到了“加速发展”时期。
谷歌和Facebook正在进行一场争夺用户对互联网关注的战争。这不仅仅是Google+与Facebook吸引多少眼球的争夺,而且是一场终端对终端(end-to-end)平台的竞争,这包括信息、应用开发、社交图谱以及内容等。所科技领域的其它竞争一样,这场斗争也转向了移动领域。在开发社交移动应用方面,谷歌或许比外界做得更好。
根据Appcelerator和IDC发布的报告,39%的开发人员认为,谷歌的总体资产比Facebook的社交图谱更加重要。Facebook在社交领域具有绝对的领先优势,而这个结论显然可以说是谷歌发起的巧妙反击。
2012年伊始,开发人员还对哪些方面感兴趣?HTML5正在发展,云服务成为热门,而开发者对Android的兴趣正在减退。
谷歌与Facebook之对比
开发人员对谷歌社交资产的兴趣其实与Google+没有太大关系,而是与谷歌旗下服务的网络效应密切联系,也就是谷歌的总资产与Facebook社交图谱的比较。谷歌拥有搜索、YouTube视频、Gmail电子邮件、谷歌地图、Android Market应用商店、Google Play商店、谷歌Docs、AdMob广告平台以及Google+社交服务。而Facebook拥有社交图谱及其开放图谱,大量的用户数据,一个广告平台以及4.25亿移动用户。
34%的受访者表示,他们并不完全理解Facebook的移动战略。对于这家即将启动IPO的公司来说,这是一个令人沮丧的比例。诚然,61%的开发者仍然对Facebook的社交移动应用更感兴趣,但其中90%的开发者表示,这是因为该平台现有的巨大用户基础。
61%的开发者仍然对Facebook的社交移动应用更感兴趣(腾讯科技配图)
Appcelerator首席移动战略家、前Gartner移动分析师迈克·金(Mike King......
IT专业人士口碑差的十大原因 广州疯狂java培训(2012-05-25 17:03:00)
摘要: IT 从业人员常常日夜操劳,整体与机器和代码为伍,号称码农,可是为什么在某些人那里却得不到好口碑呢?TR 的 Alan Norton 列举了十大缘由,请诸位给评评看,是不是这个道理。
1:报酬丰厚惹人嫌
IT 属于高薪行业是普遍共识(在中国未必如此?)。在美国,其薪资水平仅次于管理和法律专业。但是对于其他职业中赚得少的人来说。有的也许就会认为这样对自己不公平。在往往以金钱衡量个人价值的社会里,这会给别的职业的自我意识造成打击。
2:问题响应不及时
办公系统或者秘书的电脑宕机时,肯定需要尽快能修好。但有时候 IT 工程师就像酷热夏日里的空调维修员一样,手上的单子太多,客户必须排队等。但是,对于关键系统来说,哪怕几分钟的宕机时间也是不能忍受的。
3:尝试不可能任务
医生不可能通过电话对病人做出诊断,但这就是 IT 支持人员每天都在做的事情。对问题知之甚少的客户指望你通过电话就能远程诊断和修复问题。Alan 拿自己的老爹作为例子,说他曾花了 4 个多小时与 IT 支持人员通话来解决一个问题。这个过程令双方都沮丧不已,在无法直接接触到客户硬件的情况下,有时候问题的解决就相当于一个不可能完成的任务—哪怕你的耐 心和奉献精神再高 。如果你曾试过在电话上通话一个多小时来试图解决问题,你就会理解为什么技术支持人员常常被骂了。从短期看,这种情况仍难以得到改善,除非 IT 学会了如何更简便地收集相关信息。
......
Java 枚举使用小技巧 广州JAVA培训(2012-05-23 13:57:00)
摘要:
Java 枚举使用小技巧
下载源代码
〖 作者:lihzh 〗〖 大小:200k 〗〖 发布日期:2012-02-23 〗〖 浏览:1 〗
最近用到枚举,由于枚举变量比较多且存在一定的分组分类的关系,所以想能比较清晰的维护这些变量。今晚有空,简单研究了一下,分享出来,供大家讨论。
可供考虑的分类方式
/**
* 枚举接口
*
* @author lihzh(苦逼coder)
* @data 2012-2-21 下午8:51:39
*/
public interface EnumInter {
public enum EnumB implements EnumInter{
B1, B2, B3;
public enum EnumSubB implements EnumInter{
C1, C2, C3
}
}
}
调用方式和一些其他......
java新手求解编译问题(2012-05-23 13:55:00)
摘要:public class lmy_29 {
public static void main (String args[]){
boolean a[]=new boolean[500];
for(int i=0;i<a.length;i++){
a[i]=true;
}
int number=a.length;
int index=0;
int count=0;
while(a.length>1){
if(a[index]==true){
count++;
&nbs......
成为java高手的八大条件 广州疯狂JAVA培训(2012-05-23 13:52:00)
摘要:世界上并没有成为高手的捷径,但一些基本原则是可以遵循的。
1、扎实的基础
数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握它们,很难写出高水平的程序。程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策。因此多读一些计算机基础理论方面的书籍是非常有必要的。
2、丰富的想像力
不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,试试别人从没想过的方法。丰富的想像力是建立在丰富的知识的基础上,除计算机以外,多涉猎其他的学科,比如天文、物理、数学等等。开阔的思维对程序员来说很重要。
3、最简单的是最好的
这也许是所有科学都遵循的一条准则,复杂的质能转换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式:E=mc2。简单的方法更容易被人理解,更容易实现,也更容易维护。遇到问题时要优先考虑最简单的方案,只有简单方案不能满足要求时再考虑复杂的方案。
4、不钻牛角尖
当你遇到障碍的时候,不妨暂时远离电脑,看看窗外的风景,听听轻音乐,和朋友聊聊天。当我遇到难题的时候会去玩游戏,当负责游戏的那部分大脑细胞极度亢奋的时候,负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候,我会发现那些难题现在竟然可以迎刃而解。
5、对答案的渴求
人类自然科学的发展史就是一个渴求得到答案的过程,即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念,一定要找到问题的答案,你才会付出精力去探索,即使最后没有得到答案,在过程中你也会学到很多东西。
6、多与别人交流
三人行必有我师,也许在一次和别人不经意的谈话中,就可以迸出灵感的火花。多上上网,看看别人对同一......
Java线程基本概念(2012-05-23 13:49:00)
摘要:
1. 概念:
程序:一段静态代码,是应用软件执行的蓝本。
进程:是程序的一次动态执行,对应从代码的加载,执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到消亡的过程。
线程:是比进程更小的单位,一个进程在执行过程中,可以产生多个线程,形成多条执行线索,每个线程都有它自身的产生、存在和消亡的过程,是一个动态概念。
多线程:同时存在几个执行体,按几条不同的执行线索共同工作的情况。这可能会给人一种错觉:几个事件同时发生。但是不要忘了:任意时刻只能执行其中一个线程。
进一步了解线程和进程:操作系统采用分时管理各个进程,按时间片轮流执行每个进程。JAVA的多线程就是操作系统每次分时给JAVA程序一个时间片的CPU时间内,在若干个可独立控制的线程之间切换。若计算机有多个处理器,若JVM能充分利用这些CPU,那么程序在同一时刻就能获得多个时间片,程序就可以获得真实的同步线程执行效果。
每个进程都有一段专用的内存区域。与此不同的是线程间可以共享相同的内存单元,包括代码和数据,并充分利用这些共享单元实现数据交换、实时通信和必要的同步操作。
Java总是从main方法入口执行程序,这就启动一个线程,称为主线程,主线程中可以创建其他线程。如果Main方法中没有其它线程,当main方法返回时,JVM就结束JAVA程序;当MAIN方法中有其它线程时,那么JVM就要在主线程和其它线程间轮流切换。保证每个线程都能机会使用CPU资源,mian方法即使执行完最后一句,JVM也不会结束该程序,一直等到主线程中所有线程都结束后,才结束该JAVA应用程序。
2. 线程的状态和生命周期
a) 新建
当一个thread类或其子类的对象被声明并创建时,新生的线程线程对象处于新建状态。此时它有了相应的内存空间和资源,并被初始化
b) 就绪
处于新建状态的线程被启动,进入线程队列排队等候CPU时间片,此时它已经具备运行条件,一旦轮到它享有cpu......
浅谈Java线程的生命周期(2012-05-23 13:47:00)
摘要:创建Java线程
在Java程序中创建线程有几种方法。每个Java程序至少包含一个线程:主线程。其它线程都是通过Thread构造器或实例化继承类Thread的类来创建的。
51CTO编辑推荐:广州JAVA培训
Java线程可以通过直接实例化Thread对象或实例化继承Thread的对象来创建其它线程。在线程基础中的示例(其中,我们在十秒钟之内计算尽量多的素数)中,我们通过实例化CalculatePrimes类型的对象(它继承了Thread),创建了一个线程。
当我们讨论Java程序中的线程时,也许会提到两个相关实体:完成工作的实际线程或代表线程的Thread对象。正在运行的线程通常是由操作系统创建的;Thread对象是由JavaVM创建的,作为控制相关线程的一种方式。
创建线程和启动线程并不相同
在一个线程对新线程的Thread对象调用start()方法之前,这个新线程并没有真正开始执行。Thread对象在其线程真正启动之前就已经存在了,而且其线程退出之后仍然存在。这可以让您控制或获取关于已创建的线程的信息,即使线程还没有启动或已经完成了。
通常在构造器中通过start()启动线程并不是好主意。这样做,会把部分构造的对象暴露给新的线程。如果对象拥有一个线程,那么它应该提供一个启动该线程的start()或init()方法,而不是从构造器中启动它。(请参阅参考资料,获取提供此概念更详细说明的文章链接。)
结束Java线程
Java线程会以以下三种方式之一结束:
Java线程到达其run()方法的末尾。
Java线程抛出一个未捕获到的Exception或Error。
另一个Java线程调用一个弃用的stop()方法。弃用是指这些方法仍然存在,但是您不应该在新代码中使用它们,并且应该尽量从现有代码中除去它们。
当Java程序中的所有线程都完成时,程序就退出了。
加入Java线程
ThreadAPI包含了等待另一个线程完成的方法:join()方法。当调用Thread.join()时,调用线程将阻塞,直到目标线程完成为止。
Thread.join()通常由使用线程的程序使用,以将大问题划分成许多小问题,每个小问题分配一个线程。本章结尾处的示例创建了十个线程,启动它们,然后使用Thread.join()等待它们全部完成。
Java线程调度
除了......
java编程之银行调度系统(2012-05-21 18:23:00)
摘要:这个程序和前一个又不是相似之处,所以在看张孝祥老师的视频之前自己先试着做了一下,结果一做不要紧,从下午2:00多做到晚上快十点了。速度很慢,主要是设计经验不足,很多东西都得摸索,还有些不知道该怎么选择。但所幸最终还是做出来了。 主要用到三个类:WIndow,Consumer,BankSystem
Window:
主要用于对六个窗口的描述,里面提供了private String type;private String index;private boolean busy = false;这些成员变量,还有work(),及stop()方法。 广州疯狂JAVA
Consumer:
主要是提供了一个增加元素的方法addConsumer(),同时提供三个集合装三种Consumer.
BankSystem:
主调类。分别new了六个Window对象,和三个Consumer对象。所以相当于开启了9个线程。
BankSystem
import java.util.*;import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class BankDispatch { ArrayList<Window> windowLiabrary = Window.windowLiabrary;&nb......
