??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV成人精品网站在线播放,亚洲区日韩精品中文字幕,久久久亚洲精品蜜桃臀 http://www.tkk7.com/ldwblog/category/38803.html态度军_一?/description>zh-cn Tue, 07 Jan 2020 10:49:22 GMT Tue, 07 Jan 2020 10:49:22 GMT 60 个h公众受Java爱好者社区」高质量原创文章持箋输出Q欢q各位小d?/title> http://www.tkk7.com/ldwblog/archive/2019/10/30/434887.htmlDavid1228 David1228 Wed, 30 Oct 2019 06:10:00 GMT http://www.tkk7.com/ldwblog/archive/2019/10/30/434887.html http://www.tkk7.com/ldwblog/comments/434887.html http://www.tkk7.com/ldwblog/archive/2019/10/30/434887.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/434887.html http://www.tkk7.com/ldwblog/services/trackbacks/434887.html q且blogjava|站发布的文章是在博客园首页看不到的?br />blogjava|站首页能看刎ͼ你可以点L题进入可以看到图片二l码信息?br />Java爱好者社?/strong> 公众号内容简介:专注于分享Java后端相关技术、老司机实战干货,不限于JVM、ƈ发、设计模式、性能优化、分布式&微服务、云原生、大数据相关主题?/span>希望x的你停下脚步Q定有所收获?/span> 以前的个人博客内容不好迁U,所以我打算Ҏ自己的多q经验,不断整理输出有h值的内容?br />目前公众号内Ҏ关于SpringCloudQ微服务框架Q、SkywalkingQAPM监控调用链)、JVMQGC分析、内存泄漏分析)、ƈ发编E?/span>相关原创实战文章已出炉?br /> 最q刚开始已l有不少伙伴关注了Q期待能有幸搜烦到本博客的同学,可以扫码x一下,不胜感激?br />大家有Q何技术、职场、面试上的问题都可以与我交流?br />方式一Q?/strong> 扫码以下公众号二l码Q?/strong> 方式二:在微信上直接搜烦Q?nbsp; javatech_cbo 感谢各位伙伴的支持Q后l会在该公众号上输出大量的有价值的实战q货 Q期待与你一同进步与成长?br />
]]> [转]Linux与JVM的内存关pd?/title> http://www.tkk7.com/ldwblog/archive/2017/09/04/432799.htmlDavid1228 David1228 Mon, 04 Sep 2017 08:33:00 GMT http://www.tkk7.com/ldwblog/archive/2017/09/04/432799.html http://www.tkk7.com/ldwblog/comments/432799.html http://www.tkk7.com/ldwblog/archive/2017/09/04/432799.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/432799.html http://www.tkk7.com/ldwblog/services/trackbacks/432799.html 阅读全文 ]]> Java IO与NIO技术体pd?/title> http://www.tkk7.com/ldwblog/archive/2017/08/02/432714.htmlDavid1228 David1228 Wed, 02 Aug 2017 03:41:00 GMT http://www.tkk7.com/ldwblog/archive/2017/08/02/432714.html http://www.tkk7.com/ldwblog/comments/432714.html http://www.tkk7.com/ldwblog/archive/2017/08/02/432714.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/432714.html http://www.tkk7.com/ldwblog/services/trackbacks/432714.html 阅读全文 ]]> Elasticsearch服务重启故障解决q程 http://www.tkk7.com/ldwblog/archive/2017/07/24/432681.htmlDavid1228 David1228 Mon, 24 Jul 2017 11:10:00 GMT http://www.tkk7.com/ldwblog/archive/2017/07/24/432681.html http://www.tkk7.com/ldwblog/comments/432681.html http://www.tkk7.com/ldwblog/archive/2017/07/24/432681.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/432681.html http://www.tkk7.com/ldwblog/services/trackbacks/432681.html 阅读全文 ]]> JAVA应用CPU占用100%|内存泄漏分析ȝ http://www.tkk7.com/ldwblog/archive/2016/12/22/432166.htmlDavid1228 David1228 Thu, 22 Dec 2016 15:01:00 GMT http://www.tkk7.com/ldwblog/archive/2016/12/22/432166.html http://www.tkk7.com/ldwblog/comments/432166.html http://www.tkk7.com/ldwblog/archive/2016/12/22/432166.html#Feedback 2 http://www.tkk7.com/ldwblog/comments/commentRss/432166.html http://www.tkk7.com/ldwblog/services/trackbacks/432166.html 阅读全文 ]]> CPU利用?00%定位q程 http://www.tkk7.com/ldwblog/archive/2016/11/04/431955.htmlDavid1228 David1228 Fri, 04 Nov 2016 15:44:00 GMT http://www.tkk7.com/ldwblog/archive/2016/11/04/431955.html http://www.tkk7.com/ldwblog/comments/431955.html http://www.tkk7.com/ldwblog/archive/2016/11/04/431955.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/431955.html http://www.tkk7.com/ldwblog/services/trackbacks/431955.html 阅读全文 ]]> jstack Dump 日志文g中的U程状?/title> http://www.tkk7.com/ldwblog/archive/2016/07/28/431364.htmlDavid1228 David1228 Thu, 28 Jul 2016 09:57:00 GMT http://www.tkk7.com/ldwblog/archive/2016/07/28/431364.html http://www.tkk7.com/ldwblog/comments/431364.html http://www.tkk7.com/ldwblog/archive/2016/07/28/431364.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/431364.html http://www.tkk7.com/ldwblog/services/trackbacks/431364.html 阅读全文 ]]> [转] JVM调优ȝ + jstat 分析 http://www.tkk7.com/ldwblog/archive/2016/01/03/428906.htmlDavid1228 David1228 Sun, 03 Jan 2016 15:26:00 GMT http://www.tkk7.com/ldwblog/archive/2016/01/03/428906.html http://www.tkk7.com/ldwblog/comments/428906.html http://www.tkk7.com/ldwblog/archive/2016/01/03/428906.html#Feedback 2 http://www.tkk7.com/ldwblog/comments/commentRss/428906.html http://www.tkk7.com/ldwblog/services/trackbacks/428906.html 阅读全文 ]]> Thrift RPC框架介绍 http://www.tkk7.com/ldwblog/archive/2014/12/03/421011.htmlDavid1228 David1228 Wed, 03 Dec 2014 15:56:00 GMT http://www.tkk7.com/ldwblog/archive/2014/12/03/421011.html http://www.tkk7.com/ldwblog/comments/421011.html http://www.tkk7.com/ldwblog/archive/2014/12/03/421011.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/421011.html http://www.tkk7.com/ldwblog/services/trackbacks/421011.html 阅读全文 ]]> Maven及NexusU服搭徏 http://www.tkk7.com/ldwblog/archive/2013/11/19/406529.htmlDavid1228 David1228 Tue, 19 Nov 2013 03:48:00 GMT http://www.tkk7.com/ldwblog/archive/2013/11/19/406529.html http://www.tkk7.com/ldwblog/comments/406529.html http://www.tkk7.com/ldwblog/archive/2013/11/19/406529.html#Feedback 1 http://www.tkk7.com/ldwblog/comments/commentRss/406529.html http://www.tkk7.com/ldwblog/services/trackbacks/406529.html 阅读全文 ]]> 源代码分析之HashMap http://www.tkk7.com/ldwblog/archive/2013/11/18/406488.htmlDavid1228 David1228 Mon, 18 Nov 2013 10:01:00 GMT http://www.tkk7.com/ldwblog/archive/2013/11/18/406488.html http://www.tkk7.com/ldwblog/comments/406488.html http://www.tkk7.com/ldwblog/archive/2013/11/18/406488.html#Feedback 4 http://www.tkk7.com/ldwblog/comments/commentRss/406488.html http://www.tkk7.com/ldwblog/services/trackbacks/406488.html 阅读全文 ]]> 分n一道Java面试?/title> http://www.tkk7.com/ldwblog/archive/2013/10/31/405857.htmlDavid1228 David1228 Thu, 31 Oct 2013 09:32:00 GMT http://www.tkk7.com/ldwblog/archive/2013/10/31/405857.html http://www.tkk7.com/ldwblog/comments/405857.html http://www.tkk7.com/ldwblog/archive/2013/10/31/405857.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/405857.html http://www.tkk7.com/ldwblog/services/trackbacks/405857.html 阅读全文 ]]> 详解Java GC的工作原?Minor GC、FullGC http://www.tkk7.com/ldwblog/archive/2013/07/24/401919.htmlDavid1228 David1228 Wed, 24 Jul 2013 08:11:00 GMT http://www.tkk7.com/ldwblog/archive/2013/07/24/401919.html http://www.tkk7.com/ldwblog/comments/401919.html http://www.tkk7.com/ldwblog/archive/2013/07/24/401919.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/401919.html http://www.tkk7.com/ldwblog/services/trackbacks/401919.html 阅读全文 ]]> Q{Q定时且周期性的d研究I--Timer ---- d研究II--ScheduledThreadPoolExecutor http://www.tkk7.com/ldwblog/archive/2013/03/18/396615.htmlDavid1228 David1228 Mon, 18 Mar 2013 10:58:00 GMT http://www.tkk7.com/ldwblog/archive/2013/03/18/396615.html http://www.tkk7.com/ldwblog/comments/396615.html http://www.tkk7.com/ldwblog/archive/2013/03/18/396615.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/396615.html http://www.tkk7.com/ldwblog/services/trackbacks/396615.html 阅读全文 ]]> 设计模式之Composite模式 http://www.tkk7.com/ldwblog/archive/2012/10/12/389470.htmlDavid1228 David1228 Fri, 12 Oct 2012 08:20:00 GMT http://www.tkk7.com/ldwblog/archive/2012/10/12/389470.html http://www.tkk7.com/ldwblog/comments/389470.html http://www.tkk7.com/ldwblog/archive/2012/10/12/389470.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/389470.html http://www.tkk7.com/ldwblog/services/trackbacks/389470.html 假设您今天要开发一个动ȝ辑程式,动画由媄|FrameQ组成,C影格l合为动L单,动画清单也可以由其它已完成的动画清单l成Q也可以在动L单与清单之间加入个别影格。无论是影格或动L单都可以播放Q而动L单负责的是l合影格或动L单,所以可以这么设计:对于Frame而言QPlaylist是一个容器,然而Playlist也实作PlayableQ所以它也可以播放,您可以进一步地Playlistl合臛_一个Playlist中,以Ş成更长的播放清单。以Java实现的话?br /> 以Java實現的話?br /> import java.util.*; interface Playable { void play(); } class Frame implements Playable { private String image; Frame(String image) { this.image = image; } public void play() { System.out.println("播放 " + image); } } class Playlist implements Playable { private List<Playable> list = new ArrayList<Playable>(); public void add(Playable playable) { list.add(playable); } public void play() { for(Playable playable : list) { playable.play(); } } } public class Main { public static void main(String[] args) { Frame logo = new Frame("片頭 LOGO"); Playlist playlist1 = new Playlist(); playlist1.add(new Frame("Duke 左揮?)); playlist1.add(new Frame("Duke x?)); Playlist playlist2 = new Playlist(); playlist2.add(new Frame("Duke 走左?)); playlist2.add(new Frame("Duke 走右?)); Playlist all = new Playlist(); all.add(logo); all.add(playlist1); all.add(playlist2); all.play(); } } 以Python實現的話Q?br />class Frame: def __init__(self, image): self.image = image def play(self): print("播放 " + self.image) class Playlist: def __init__(self): self.list = [] def add(self, playable): self.list.append(playable); def play(self): for playable in self.list: playable.play() logo = Frame("片頭 LOGO") playlist1 = Playlist() playlist1.add(Frame("Duke 左揮?)) playlist1.add(Frame("Duke x?)) playlist2 = Playlist() playlist2.add(Frame("Duke 走左?)) playlist2.add(Frame("Duke 走右?)) all = Playlist() all.add(logo) all.add(playlist1) all.add(playlist2) all.play(); 以UML来表CComposite模式的结构: h层次性或l合性的物g可以使用Composite模式Q像是电路元件、视H元件等Q用Composite模式可以大大减低q些元g设计的复杂度Q以Java标准API中AWT视窗元gZQ?/small>Component上有个paint()ҎQ可以进行元件的l制Q?/small>Container可以容纳ComponentQ如Button、Label{)Q而Containerl承ComponentQ所以Container也可以容UContainerQ这也是Composite模式的实际例子: from Q?nbsp;http://caterpillar.onlyfun.net/Gossip/index.html ]]> Queue http://www.tkk7.com/ldwblog/archive/2012/03/19/372191.htmlDavid1228 David1228 Mon, 19 Mar 2012 06:45:00 GMT http://www.tkk7.com/ldwblog/archive/2012/03/19/372191.html http://www.tkk7.com/ldwblog/comments/372191.html http://www.tkk7.com/ldwblog/archive/2012/03/19/372191.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/372191.html http://www.tkk7.com/ldwblog/services/trackbacks/372191.html 在Set中有一个排序的集合SortedSetQ用来保存按照自焉序排列的对象。Queue中同样引入了一个支持排序的FIFO模型?/p>
public static void main(String[] args){}函数诠释 http://www.tkk7.com/ldwblog/archive/2010/08/30/330301.htmlDavid1228 David1228 Mon, 30 Aug 2010 08:15:00 GMT http://www.tkk7.com/ldwblog/archive/2010/08/30/330301.html http://www.tkk7.com/ldwblog/comments/330301.html http://www.tkk7.com/ldwblog/archive/2010/08/30/330301.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/330301.html http://www.tkk7.com/ldwblog/services/trackbacks/330301.html public static void main(String[] args){…}
下面分别解释q些关键字的作用Q?/p>
Q?Qpublic关键字,q个好理解,声明dCؓpublic是告诉其他的类可以讉Kq个函数?/p>
Q?Qstatic关键字,告知~译器main函数是一个静态函数。也是说main函数中的代码是存储在静态存储区的,卛_定义了类以后q段代码已l存在了。如果main()Ҏ没有使用static修饰W,那么~译不会出错Q但是如果你试图执行该程序将会报错,提示main()Ҏ不存在。因为包含main()的类q没有实例化Q即没有q个cȝ对象Q,所以其main()Ҏ也不会存。而用static修饰W则表示该方法是静态的Q不需要实例化卛_使用?/p>
Q?Qvoid关键字表明main()的返回值是无类型?/p>
**Q?Q参数String[] argsQ这是本文的重点?/p>
W一、程序用者可以在命o行状态下向某个类传递参数。看下面的例子:
public class ArgsDemo {
public static void main(String[] args) {
String str = new String();
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
str += args[i];
}
System.out.println(str);
}
}
使用javac ArgsDemo.java命o生成ArgsDemo.class文gQ然后?#8220;java ArgsDemo 参数一 参数?参数?…”的格式向ArgsDemocM递参数。该CZE序首先输出参敎ͼ然后输出所有参数的和。比如java ArgsDemo a b c,得到这L输出Q?/p>
a
b
c
abc
需要注意的是,如果q里的@环条件不是i <args.lengthQ而是i <5Q则在命令行中输入的参数必须?个,否则会报错Q错误类型ؓQ?/p>
Exception in thread “main” java.lang.ArrayIndexOutOfBoundException:3
at ArgsDemo.main(ArgsDemo.java:5)
W二、可以在另一个类中向包含main()的类传递参敎ͼ如下例:
public class A {
public static void main(String[] args)
{
for(int i=0;i <args.length;i++)
System.out.println(args[i]);
}
}
public class B {
public static void main(String[] args)
{
c = new A();
String[] b = {"111","222","333"};
c.main(b);
}
}
首先定义一个class AQ在A中定义一个main()函数Q在该函C输出参数args。然后定义一个classBQ在B中初始化一个A的实例cQ然后向c传递参敎ͼq且调用c的mainҎ打印Z入的参数倹{输出结果如下:
111
222
333
׃main()函数是静态函敎ͼ即不需要实例化也能使用Q所以B使用下面的写法也能完成相同的功能Q?/p>
public class B {
public static void main(String[] args)
{
//A c = new A();
String[] b = {"111","222","333"};
A.main(b);
}
}
ȝQ参数args的主要作用是为程序用者在命o行状态下与程序交互提供了一U手Dc此外在其他cM直接使用main()函数Qƈ传递参C是可行的Q虽然这U方法不太常用,但毕竟ؓ我们提供了一U选择?/p>
]]>获取执行旉D늚工作日和周末..... http://www.tkk7.com/ldwblog/archive/2010/08/30/330271.htmlDavid1228 David1228 Mon, 30 Aug 2010 05:52:00 GMT http://www.tkk7.com/ldwblog/archive/2010/08/30/330271.html http://www.tkk7.com/ldwblog/comments/330271.html http://www.tkk7.com/ldwblog/archive/2010/08/30/330271.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/330271.html http://www.tkk7.com/ldwblog/services/trackbacks/330271.html
* 获取指定日期之间的所有日期list 工作日和周末
* @param start
* @param end
* @return List<List>
*/
private Map getDaysMap(Date start,Date end){
Map rsmap = new HashMap();
List gzrList = new ArrayList();//工作?br />
List zmList = new ArrayList();//周末
long ldays = 0;
if(start!=null && end!=null){
Calendar c = Calendar.getInstance();
c.setTime(start);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
start = c.getTime();
//
c.setTime(end);
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.MINUTE, 59);
c.set(Calendar.SECOND, 59);
c.set(Calendar.MILLISECOND, 999);
end = c.getTime();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if(start.getTime()<=end.getTime()){
//判断盔R的天?br />
ldays = (end.getTime()-start.getTime())/(1000*24*60*60) + 1;
for(int i=0;i<ldays;i++)
{
Date d = getNextDay(start,i);
String str = df.format(d);
System.out.print(str);
c.setTime(d);
int dw = c.get(Calendar.DAY_OF_WEEK);
if(dw==Calendar.SUNDAY || dw==Calendar.SATURDAY){
zmList.add(transToStr(d));
System.out.println(" 周末");
}
else{
gzrList.add(transToStr(d));
System.out.println(" 工作?);
}
}
}
}
rsmap.put("1", gzrList);
rsmap.put("2", zmList);
return rsmap;
}
]]> 查找2个有序整数数l的合集 http://www.tkk7.com/ldwblog/archive/2010/08/23/329636.htmlDavid1228 David1228 Mon, 23 Aug 2010 03:37:00 GMT http://www.tkk7.com/ldwblog/archive/2010/08/23/329636.html http://www.tkk7.com/ldwblog/comments/329636.html http://www.tkk7.com/ldwblog/archive/2010/08/23/329636.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/329636.html http://www.tkk7.com/ldwblog/services/trackbacks/329636.html
public static void main(String[] args) {
int [] a = { 1 , 5 , 8 , 10 , 14 , 15 , 17 , 18 , 20 , 22 , 24 , 25 , 28 };
int b[] = { 2 , 4 , 6 , 8 , 10 , 12 };
int i = 0 ;
int j = 0 ;
while (i < a.length && j < b.length) {
if (a[i] < b[j]) {
i++;
} else if (a[i] == b[j]) {
System.out.println(a[i]);
i++;
j++;
} else {
j++;
}
}
}
}
~
]]> JVM沙箱&框架 http://www.tkk7.com/ldwblog/archive/2010/08/17/329074.htmlDavid1228 David1228 Tue, 17 Aug 2010 02:35:00 GMT http://www.tkk7.com/ldwblog/archive/2010/08/17/329074.html http://www.tkk7.com/ldwblog/comments/329074.html http://www.tkk7.com/ldwblog/archive/2010/08/17/329074.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/329074.html http://www.tkk7.com/ldwblog/services/trackbacks/329074.html RMI|唆得太多了Q实在是力x它说清楚Q希望对大家有帮助。最后的最后,l大家简单讲一下JVM框架Q我们叫做Java沙箱。Java沙箱的基本组件如下:
a) c装载器l构
b) class文g验器
c) 内置于Java虚拟机的安全Ҏ?br />
d) 安全理器及Java API
其中c装载器?个方面对Java沙箱起作用:
a. 它防止恶意代码去q涉善意的代?br />
b. 它守护了被信ȝcd边界
c. 它将代码归入保护域,定了代码可以进行哪些操?br />
虚拟Zؓ不同的类加蝲器蝲入的cL供不同的命名I间Q命名空间由一pd唯一的名U组成,每一个被装蝲的类有一个名字,q个命名I间是由Java虚拟Zؓ每一个类装蝲器维护的Q它们互怹间甚至不可见?br />
我们常说的包QpackageQ是在Java虚拟机第2版的规范W一ơ出玎ͼ正确定义是由同一个类装蝲器装载的、属于同一个包、多个类型的集合。类装蝲器采用的机制是双亲委z模式。具体的加蝲器框架我在Java杂谈Q一Q中已经解释q了Q当时说最外层的加载器是AppClassLoaderQ其实算上网l层的话AppClassLoader也可以作为parentQ还有更外层的加载器URLClassLoader。ؓ了防止恶意攻ȝURL加蝲q来的类文g我们当然需要分不同的访问命名空_q且制定最安全的加载次序,单来说就是两点:
a. 从最内层JVM自带cd载器开始加载,外层恶意同名cd不到先加载而无法?br />
b. ׃严格通过包来区分了访问域Q外层恶意的c通过内置代码也无法获得权限访问到内层c,破坏代码p然无法生效?br />
附:关于Java的^台无x,有一个例子可以很明显的说明这个特性:
一般来_C或C++中的int占位宽度是根据目标^台的字长来决定的Q这意味着针对不同的^台编译同一个C++E序在运行时会有不同的行为。然而对?Java中的int都是32位的二进制补码标识的有符h敎ͼ而float都是遵守IEEE 754点标准?2位QҎ?br />
PS: q个弟最q也没时间l研I下MQ只是想抛砖引玉的提供给大家一个初步认识JVM的印象。有Z了解一下JVM的内部结构对今后做Java开发是很有好处的?/font>
]]>Java中的RMI机制 http://www.tkk7.com/ldwblog/archive/2010/08/17/329072.htmlDavid1228 David1228 Tue, 17 Aug 2010 02:30:00 GMT http://www.tkk7.com/ldwblog/archive/2010/08/17/329072.html http://www.tkk7.com/ldwblog/comments/329072.html http://www.tkk7.com/ldwblog/archive/2010/08/17/329072.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/329072.html http://www.tkk7.com/ldwblog/services/trackbacks/329072.html
q程Ҏ调用是EJB实现的支柱,建立分布式应用的核心思想。这个很好理解,再拿上面的计加法例子,A只知道去call计算机B的方法,自己q没有B的那些功能,所以A计算机端无法看到B执行q段功能的过E和代码Q因为看都看不到Q所以既没有ZH取也没有机会去改动Ҏ代码。EJB正式Zq样的思想来完成它的Q务的。当单的加法变成复杂的数据库操作和电子商务交易应用的时候,q样的安全性和分布式应用的便利性就表现出来优势了?br />
好了Q回到细节上Q要如何实现q程Ҏ调用呢?我希望大家学习Q何技术的时候可以试着依赖自己的下意识判断Q只要你的想法是合理健壮的,那么很可能实际上它就是这么做的,毕竟真理都蕴藏在q_的生zȝ节中。这样只要带着一些薄qJava基础来思考RMIQ其实也可以惛_个大概来?br />
a) 需要有一个服务器角色Q它拥有真正的功能代码方法。例如BQ它提供加法服务
b) 如果惌E用B的功能,需要知道B的IP地址
c) 如果惌E用B的功能,q需要知道B中那个特定服务的名字
我们很自然可以想到这些,虽然不完善,但已l很接近正确的做法了。实际上RMI要得以实现还得意于Java一个很重要的特性,是Java反射机制。我们需要知道服务的名字Q但又必隐藏实现的代码Q如何去做呢Q答案就是:接口Q?br />
举个例子Q?br />
public interface Person(){
public void sayHello();
}
Public class PersonImplA implements Person{
public PersonImplA(){}
public void sayHello(){ System.out.println(“Hello!”);}
}
Public class PersonImplB implements Person{
public PersonImplB(){}
public void sayHello(){ System.out.println(“Nice to meet you!”);}
}
客户端:Person p = Naming.lookup(“PersonService”);
p.sayHello();
p几段代码包含了几乎所有的实现技术,大家怿么?客户端请求一个say hello服务Q服务器q行时接到这个请求,利用Java反射机制的Class.newInstance()q回一个对象,但客L不知道服务器q回的是 ImplAq是ImplBQ它接受用的参数{是PersonQ它知道实现了Person接口的对象一定有sayHello()ҎQ这意味着客户端ƈ不知道服务器真正如何d现的Q但它通过了解Person接口明确了它要用的服务方法名字叫做sayHello()?br />
如此cLQ服务器只需要暴露自q接口出来供客LQ所有客L可以自己选择需要的服务。这像馆只要拿出自己的菜单出来让客户选择Q就可以在后台厨房一道道的按需做出来,它怎么做的通常是不让客L道的Q(传菜谱吧,^_^Q?br />
最后一Ҏ我调用lookupQ查找一个叫PersonService名字的对象,服务器只要看到这个名字,在自q目录Q相当于电话)中找到对应的对象名字提供服务可以了Q这个目录就叫做JNDI (Java命名与目录接口)Q相信大家也听过的?br />
有兴的朋友不妨自己做个RMI的应用,很多前辈的博客中有简单的例子。提CZ下利用Jdk的bin目录中rmi.exe?rmiregistry.exe两个命o可以自己徏起一个服务器Q提供远E服务。因Z子很Ҏ找,我就不自׃D例子了!
]]> Java关于XML的解?/title> http://www.tkk7.com/ldwblog/archive/2010/08/17/329069.htmlDavid1228 David1228 Tue, 17 Aug 2010 02:15:00 GMT http://www.tkk7.com/ldwblog/archive/2010/08/17/329069.html http://www.tkk7.com/ldwblog/comments/329069.html http://www.tkk7.com/ldwblog/archive/2010/08/17/329069.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/329069.html http://www.tkk7.com/ldwblog/services/trackbacks/329069.html
当然Q如果接口要能提取XML中配|的信息需要程序能解析规范的XML文gQJava中当然要提高包对q个行ؓq行有利支持。笔者打讲到的两个包是 org.w3c.dom和javax.xml.parsers和。(大家可以览一下这些包中间的接口和cd义)
Javax.xml.parsers包很单,没有接口Q两个工厂配两个解析器。显然解析XML是有两种方式的:DOM解析和SAX解析。本质上q没有谁好谁不好Q只是实现的思想不一LŞ了。给一个XML文g的例子:
<?xml version=”1.0” encoding=”UTF-8” >
<root >
<child name=”Kitty” >
A Cat
</child >
</root >
所谓DOM解析的思\是把整个树状囑֭入内存中Q需要那个节点只需要在树上搜烦可以读到节点的属性,内容{,q样的好处是所有节点皆在内存可以反复搜索重复用,~点是需要消耗相应的内存I间?br />
自然SAX解析的思\是Z克服DOM的缺点,以事件触发ؓ基本思\Q顺序的搜烦下来Q碰CElement之前触发什么事Ӟ到之后做什么动作。由于需要自己来写触发事件的处理ҎQ所以需要借助另外一个自定义的HandlerQ处于org.xml.sax.helpers包中。它的优点当然是不用整个包都d内存Q缺点也是只能顺序搜索,走完一遍就得重来?br />
大家很容易就能猜刎ͼ接触到的J2ee框架用的是哪一U,昄是DOM。因为类似StrutsQHibernate框架配置文g毕竟是很的一部分配置信息Q而且需要频J搜索来dQ当然会采用DOM方式Q其实SAX内部也是用DOM采用的结构来存储节点信息的)。现在无论用什么框Ӟq真隑֏C?SAX来解析XML的技术了Q如果哪位仁兄知道,误W者也学习学习?br />
既然解析方式有了Q那么就需要有解析的存储位|。不知道大家是否发现org.w3c.domq个包是没有实现cd部都是接口的。这里笔者想说一下Java 如何对XML解析是Jdk应该考虑的事Q是它的责Q。而w3cl织是维护定义XML标准的组l,所以一个XMLl构是怎么L由w3c说了,它不兛_ Java如何d玎ͼ于是乎规定了所有XML存储的结构应该遵循的规则Q这是org.w3c.dom里全部的接口目的所在。在W者看来,单理解接口的概念是实现者必遵守的原则?br />
整个XML对应的结构叫Document、子元素对应的叫做Element、还有节点相关的Node、NodeList、Text、Entity?CharacterData、CDATASection{接口,它们都可以在XML的语法中间找到相对应的含义。由于这里不是讲解XML基本语法Q就不多介绍了。如果大家感兴趣Q笔者也可以专门写一关于XML的语法规则帖与大家分享一下?br />
2Q?Java Swing
Swing是一个让人又爱又恨的东西Q可׃处在于上手很ҎQ较AWT比v来Swing提供的界面功能更加强大,可恨之处在于~复杂的界面工作量实在是巨大。笔者写q超q?000行的Swing界面Q感觉用户体验还不是那么优秀。最q又写过过6000行的Q由于功能模块多了,整体效果q只是一般般。体会最q׃个字Q篏! 所以大家现在都陆箋不怎么用Swing在真正开发的目上了Q太多界面技术可以取代它了。笔者去写也是迫于无奈组里面大家都没写过Q我不入地域谁入Q?br />
管Swing慢慢的在被h忽略Q特别是随着B/S慢慢的在ҎC/SQ笔者倒是很愿意站出来为Swing正n。每一Ҏ术的掌握l不是ؓ了流行时跟风。真正喜ƢJava的朋友们q是应该好好体会一下SwingQ相信在校的很多学生也很多在学习它。很可能从Jdk 1.1?.2走过来的很多大学老师可能是最不熟悉它的?br />
Swing提供了一l轻lgl称为JComponentQ它们与AWTlg的最大区别是JComponent全部都是ContainerQ?Container的特Ҏ里面可以装蝲别的lg。在Swinglg中无论是JButton、JLabel、JPanel、JList{都可以再装入Q何其他组件。好处是E序员可以对Swinglg实现“再开?#8221;Q针对特定需求构q按钮、标{、画ѝ列表之cȝ特定lg?br />
有轻自然有重,那么ȝ件和重组件区别是Q重lg表现出来的Ş态因操作pȝ不同而异Q轻lg是Swing自己提供GUIQ在跨^台的时候最大程度的保持一致?br />
那么在编E的时候要注意一些什么呢Q笔者谈谈自q几点l验Q?br />
a. 明确一个概念,只有Framelg才可以单独显C的Q也许有Z说JOptionPane里面的静态方法就实现了单独窗口出玎ͼ但追L代码会发现其实现实出来的Dialog也需要依托一个FrameH体Q如果没有指定就会默认生一个然后装载这个Dialog昄出来?br />
b. JFrame是由q么几部分组成:
最底下一层JRootPaneQ上面是glassPane (一个JPanel)和layeredPane (一个JLayeredPane)Q而layeredPane又由contentPane(一个JPanel)和menuBar构成。我们的lg都是加在 contentPane上,而背景图片只能加在layeredPane上面。至于glassPane是一个透明的覆盖了contentPane的一层,在特定效果中被利用到来记录鼠标坐标或掩饰组件?br />
c. Z增强用户体验Q我们会在一些按钮上d快捷键,但Swing里面通常只能识别键盘的Alt键,要加入其他的快捷键,必须自己实现一个ActionListener?br />
d. 通过setLayout(null)可以使得所有组件以setBounds()的四个参数来_定位各自的大、位|,但不推荐使用Q因为好的编E风g应该在Swing代码中硬~码具体数字Q所有的数字应该以常数的形式l一存在一个静态无实例资源cL件中。这个静态无实例cȝ一负责Swing界面的风|包括字体和颜色都应该包括q去?br />
e. 好的界面设计有一条Golden Rule: 用户不用M手册通过数试p学会使用软g。所以尽量把按钮以菜单的形式Q不是右键菜单q是H体自带剙菜单Q呈现给֮Q除非是频繁点击的按钮才有必要直接呈现在界面中?br />
其实Swing的功能是相当强大的,只是现在应用不广泛,专门ȝI大概是要花不少旉的。笔者在各网站论坛浏览关于Swing的技巧文章还是比较可信的Q自己所学非常有限,各h体会对Swing各个lg的掌握就是一个实늧累的q程。笔者只用到q以上这些,所以只能谈谈部分想法,q望大家见谅Q?
]]> 关于Java的多U程~程 http://www.tkk7.com/ldwblog/archive/2010/08/17/329063.htmlDavid1228 David1228 Tue, 17 Aug 2010 01:48:00 GMT http://www.tkk7.com/ldwblog/archive/2010/08/17/329063.html http://www.tkk7.com/ldwblog/comments/329063.html http://www.tkk7.com/ldwblog/archive/2010/08/17/329063.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/329063.html http://www.tkk7.com/ldwblog/services/trackbacks/329063.html
a. A对象实现Runnable接口QA.start()q行后所谓的U程对象是谁Q是A么?
b. U程的wait()、notify()Ҏ到底是做什么时候用的,什么时候用Q?br />
c. Z么线E的suspendҎ会被标注q时Q不推荐再用,U程q能挂v么?
d. Z同步我们会对U程Ҏ声明Synchronized来加锁在对象上,那么如果父类的f()Ҏ加了SynchronizedQ子c重写f()Ҏ必须也加Synchronized么?如果子类的f()Ҏ重写时声明Synchronizedq调用super.f()Q那么子cd象上到底有几把锁呢?会因为竞争生死锁么Q?br />
呵呵Q各位能回答上来几道呢?如果q些都能{上来,说明对线E的概念q是满清晰的Q虽说还q远不能精通。笔者这里一一做回{,于幅的原因,W者尽量说得简介一点,如果大家有疑惑的Ƣ迎一赯论?br />
首先W一点,U程跟对象完全是两回事,虽然我们也常说线E对象。但当你用run()和start()来启动一个线E之后,U程其实跟这个承了 Thread或实CRunnable的对象已l没有关pMQ对象只能算内存中可用资源而对象的Ҏ只能内存正文区可以执行的代码段而已。既然是资源和代码段Q另外一个线E当然也可以去访问,main函数执行p会启动两个U程Q一个我们称之ؓȝE,q一个是垃圾攉器的U程Q主U程l束意味着E序l束Q可垃圾攉器线E很可能正在工作?br />
W二点,wait()和sleep()cMQ都是让U程处于d状态暂停一D|_不同之处在于wait会释攑ֽ前线E占有的所有的锁,?sleep不会。我们知道获得锁的唯一Ҏ是进入了Synchronized保护代码D,所以大家会发现只有SynchronizedҎ中才会出?waitQ直接写会给警告没有获得当前对象的锁。所以notify跟wait配合使用Qnotify会重新把锁还l阻塞的U程重而其l执行,当有多个对象wait了,notify不能定唤醒哪一个,必经锁只有一把,所以一般用notifyAll()来让它们自己Ҏ优先U等竞争那唯一的一把锁Q竞争到的线E执行,其他U程只要l箋wait?br />
从前Java允许在一个线E之外把U程挂vQ即调用suspendҎQ这L操作是极不安全的。根据面向对象的思想每个对象必须对自q行ؓ负责Q而对自己的权力进行封装。如果Q何外步对象都能ɾU程被挂赯阻塞的话,E序往往会出现乱导致崩溃,所以这LҎ自然是被毙掉了啦?br />
最后一个问题比较有意思,首先回答的是子类重写f()Ҏ可以加Synchronized也可以不加,如果加了而且q内部调用了super.f ()的话理论上是应该对同一对象加两把锁的,因ؓ每次调用SynchronizedҎ都要加一把,调用子类的f首先加了一把,q入Ҏ内部调用父类?f又要加一把,加两把不是互斥的么?那么调父cf加锁不就必须永远{待已经加的锁释放而造成死锁么?实际上是不会的,q个机制叫重q入Q当父类的fҎ试图在本对象上再加一把锁的时候,因ؓ当前U程拥有q个对象的锁Q也可以理解为开启它的钥匙,所以同一个线E在同一对象上还没释放之前加W二ơ锁是不会出问题的,q个锁其实根本就没有加,它有了钥匙,不管加几把还是可以进入锁保护的代码段Q畅通无阻,所以叫重进入,我们可以单认为第二把锁没有加上去?br />
总而言之,Synchronized的本质是不让其他U程在同一对象上再加一把锁?
]]> 关于jdk和jre?? http://www.tkk7.com/ldwblog/archive/2010/08/16/328987.htmlDavid1228 David1228 Mon, 16 Aug 2010 06:39:00 GMT http://www.tkk7.com/ldwblog/archive/2010/08/16/328987.html http://www.tkk7.com/ldwblog/comments/328987.html http://www.tkk7.com/ldwblog/archive/2010/08/16/328987.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/328987.html http://www.tkk7.com/ldwblog/services/trackbacks/328987.html
大家肯定在安装JDK的时候会有选择是否安装单独的jreQ一般都会一起安装,我也大家q样做。因h能帮助大家弄清楚它们的区别:
Jre 是java runtime environment, 是javaE序的运行环境。既然是q行Q当然要包含jvmQ也是大家熟悉的虚拟机啦,q有所有javacd的class文gQ都在lib目录下打包成了jar。大家可以自己验证。至于在windows上的虚拟机是哪个文g呢?学过MFC的都知道什么是dll文g吧,那么大家看看jre/bin/client里面是不是有一个jvm.dll呢?那就是虚拟机?br />
Jdk 是java development kitQ是java的开发工具包Q里面包含了各种cd和工兗当然也包括了另外一个Jre. 那么Z么要包括另外一个Jre呢?而且jdk/jre/bin同时有client和server两个文g夹下都包含一个jvm.dll。说明是有两个虚拟机的。这一点不知道大家是否注意C呢?
怿大家都知道jdk的bin下有各种javaE序需要用到的命oQ与jre的bin目录最明显的区别就是jdk下才有javacQ这一点很好理解,因ؓ jre只是一个运行环境而已。与开发无养I正因为如此,具备开发功能的jdk自己的jre下才会同时有client性质的jvm和server性质?jvmQ?而仅仅作行环境的jre下只需要client性质的jvm.dll够了?br />
记得在环境变量path中设|jdk/bin路径麽?q应该是大家学习Java的第一步吧Q老师会告诉大家不讄的话javac和java是用不了的。确实jdk/bin目录下包含了所有的命o。可是有没有人想q我们用的java命oq不?jdk/bin目录下的而是jre/bin目录下的呢?不信可以做一个实验,大家可以把jdk/bin目录下的java.exe剪切到别的地方再q行 javaE序Q发C什么?一切OKQ?br />
那么有h会问了?我明明没有设|jre/bin目录到环境变量中啊?
试想一下如果javaZ提供l大多数Z用,他们是不需要jdk做开发的Q只需要jre能让javaE序跑v来就可以了,那么每个客户q需要手动去讄环境变量多麻烦啊Q所以安装jre的时候安装程序自动帮你把jre的java.exedCpȝ变量中,验证的方法很单,大家看到了系l环境变量的 path最前面?#8220;%SystemRoot%\system32;%SystemRoot%;”q样的配|,那么再去Windows/system32下面ȝ看吧Q发C什么?有一个java.exe?br />
如果能够把jdk/bin挪到system32变量前面Q当然也可以q使用jdk/jre里面的javaQ不q除非有必要Q我不徏议大家这么做。用单独的jre跑javaE序也算是客L境下的一U测试?br />
q下大家应该更清楚jdk和jre内部的一些联pd区别了吧Q?br />
PS: 其实q有满多感想可以ȝ的,一ơ写多了怕大家扔砖头砸死我,怪我太罗唆。大家应该更加踏实更加务实的d一些研Iƈ互相分n心得Q大方向和太前沿的技术讨论是必要的但最好不要太多,毕竟自己基础都还没打好,什么都讲最新版本其实是q步的一大障!
]]> JAVA对List的排?/title> http://www.tkk7.com/ldwblog/archive/2010/08/11/328547.htmlDavid1228 David1228 Wed, 11 Aug 2010 08:15:00 GMT http://www.tkk7.com/ldwblog/archive/2010/08/11/328547.html http://www.tkk7.com/ldwblog/comments/328547.html http://www.tkk7.com/ldwblog/archive/2010/08/11/328547.html#Feedback 0 http://www.tkk7.com/ldwblog/comments/commentRss/328547.html http://www.tkk7.com/ldwblog/services/trackbacks/328547.html
{
public int compare(TCmsFormDTO o1, TCmsFormDTO o2)
{
return new BeanComparator().compare(o1.getName(), o2.getName());
}
});
]]> Java之LinkedList链表试 http://www.tkk7.com/ldwblog/archive/2009/08/18/291587.htmlDavid1228 David1228 Tue, 18 Aug 2009 00:33:00 GMT http://www.tkk7.com/ldwblog/archive/2009/08/18/291587.html // 如果想通过iteratorq行集合的添加、删除、修Ҏ作,可以使用java.util.ListIterator接口Q该接口实现了java.util.Iterator接口Q同时还增加了一些额外的ҎQ方便用,如add、remove、set、nextIndex(调用nextҎq回元素的烦引|intcd)、previousIndex(调用previousҎq回元素的烦引|intcd)?nbsp; List<String> staff = new LinkedList<String>(); staff.add("Amy"); staff.add("Bob"); staff.add("Carl"); // 删除Ҏ很特D,真正删除的是iter左边的元? cM于退格键?/span> ListIterator<String> iter = staff.listIterator(); iter.next(); iter.remove(); // 遍历. for (Iterator<String> iterator = staff.iterator(); iterator.hasNext();) { String s = (String) iterator.next(); System.out.println("-------------->" + s); }ConcurrentModificationException异常什么时候会发生Q?/div>
List<String> staff = new LinkedList<String>(); staff.add("Amy"); staff.add("Bob"); staff.add("Carl"); // ConcurrentModificationException异常什么时候会发生Q?/span> ListIterator<String> iter = staff.listIterator(); ListIterator<String> iter2 = staff.listIterator(); // 当有多个iterator对同一个listq代Q如果有q代器对listq行了诸如add或remove的操作时Q则另一个P代器会发生该异常?br /> // 因ؓiterator会负责检所他自q索引变化跟所q代集合的变化是否是一致的Q如果不一致就会抛?/span>ConcurrentModificationException异常?/span> // 如果有进行setҎ的操作,则不会发生该异常?/span> iter.add("yyy"); iter.remove(); iter2.next(); // 按顺序添加到集合? for (Iterator<String> iterator = staff.iterator(); iterator.hasNext();) { String s = (String) iterator.next(); System.out.println("-------------->" + s); }
Java之LinkedList集合l合listIterator的用案?
package com.javacore;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.ListIterator;public class LinkedListTest3 { public static void main(String[] args) { List<String> a = new LinkedList<String>(); a.add("a-Amy"); a.add("a-Bob"); a.add("a-Carl"); List<String> b = new LinkedList<String>(); b.add("b-xxx"); b.add("b-yyy"); b.add("b-zzz"); ListIterator<String> aIter = a.listIterator(); Iterator<String> bIter = b.iterator(); // b集合插入/合ƈ到a集合?/span> while (bIter.hasNext()) { if (aIter.hasNext()) { aIter.next(); } aIter.add(bIter.next()); } // 输出a集合 System.out.println(a); // 从b中删除第二个元素 bIter = b.iterator(); while (bIter.hasNext()) { bIter.next(); // 跌W一个元?/span> if (bIter.hasNext()) { bIter.next(); // 跌下一个元?/span> bIter.remove(); // 删除那个元素 } } // 输出b集合 System.out.println(b); // 删除集合b a.removeAll(b); System.out.println(a); } }
]]>
l承对序列化的媄?/title> http://www.tkk7.com/ldwblog/archive/2009/04/05/263979.htmlDavid1228 David1228 Sun, 05 Apr 2009 04:13:00 GMT http://www.tkk7.com/ldwblog/archive/2009/04/05/263979.html 阅读全文 ]]>
վ֩ģ壺
ŷŷɫ |
岻Ƶ |
պav |
˳һվ߲ |
Сxxxxɫ |
AVһ
|
йŮר |
֮4δɾ |
Ʒվ |
91avѹۿ |
Ƭ91Ʒѿ3 |
Ƶһ |
þþþƷϵ |
Ʒ99þ |
þþþƷС˵
|
˻ɫ |
AVһӰ |
þþþŮʦһ |
˾ƷƵȫ鶹 |
Av߲ |
AVһҳƷ |
ŷƷ˾þԻ |
99re6߾Ʒѹۿ |
ĻƵ |
ƷһƷƷƷ |
˾Ʒձַ |
ˬaëƬ |
žƷƵ |
պAvҹҹˬ |
պһѲ |
߹ۿav |
Ʒ |
վɫƵѹۿ45 |
Ƶ |
ƷҺ |
Ʒһ߹ۿ |
hƵѹۿ |
žžAVƬ |
һ**ƬƵ |
ձ˻ʿxxxxƵ |
Ʒպרsilk |