小魔女 发表于 2015-1-18 11:36:21

了解下JAVA的java承继和finalize()

C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱.
经由过程“分解”办法创立新类时,永久不用忧虑对谁人类的成员对象的扫尾事情。每一个成员都是一个自力的对象,以是会失掉一般的渣滓搜集和扫尾处置——不管它是否是不本人某个类一个成员。但在举行初始化的时分,必需掩盖衍生类中的finalize()办法——假如已计划了某个特别的扫除历程,请求它必需作为渣滓搜集的一部分举行。掩盖衍生类的finalize()时,务必记着挪用finalize()的基本类版本。不然,基本类的初始化基本不会产生。上面这个例子即是明证:
//:Frog.java
//Testingfinalizewithinheritance

classDoBaseFinalization{
publicstaticbooleanflag=false;
}

classCharacteristic{
Strings;
Characteristic(Stringc){
s=c;
System.out.println(
"CreatingCharacteristic"+s);
}
protectedvoidfinalize(){
System.out.println(
"finalizingCharacteristic"+s);
}
}

classLivingCreature{
Characteristicp=
newCharacteristic("isalive");
LivingCreature(){
System.out.println("LivingCreature()");
}
protectedvoidfinalize(){
System.out.println(
"LivingCreaturefinalize");
//Callbase-classversionLAST!
if(DoBaseFinalization.flag)
try{
super.finalize();
}catch(Throwablet){}
}
}

classAnimalextendsLivingCreature{
Characteristicp=
newCharacteristic("hasheart");
Animal(){
System.out.println("Animal()");
}
protectedvoidfinalize(){
System.out.println("Animalfinalize");
if(DoBaseFinalization.flag)
try{
super.finalize();
}catch(Throwablet){}
}
}

classAmphibianextendsAnimal{
Characteristicp=
newCharacteristic("canliveinwater");
Amphibian(){
System.out.println("Amphibian()");
}
protectedvoidfinalize(){
System.out.println("Amphibianfinalize");
if(DoBaseFinalization.flag)
try{
super.finalize();
}catch(Throwablet){}
}
}

publicclassFrogextendsAmphibian{
Frog(){
System.out.println("Frog()");
}
protectedvoidfinalize(){
System.out.println("Frogfinalize");
if(DoBaseFinalization.flag)
try{
super.finalize();
}catch(Throwablet){}
}
publicstaticvoidmain(String[]args){
if(args.length!=0&&
args.equals("finalize"))
DoBaseFinalization.flag=true;
else
System.out.println("notfinalizingbases");
newFrog();//Instantlybecomesgarbage
System.out.println("bye!");
//Mustdothistoguaranteethatall
//finalizerswillbecalled:
System.runFinalizersOnExit(true);
}
}///:~
DoBasefinalization类只是复杂地包容了一个标记,向分级布局中的每一个类指出是不是应挪用super.finalize()。这个标记的设置创建在命令行参数的基本上,以是可以在举行和不举行基本类扫尾事情的条件下检察举动。
分级布局中的每一个类也包括了Characteristic类的一个成员对象。人人能够看到,不管是不是挪用了基本类扫尾模块,Characteristic成员对象都一定会失掉扫尾(扫除)处置。
每一个被掩盖的finalize()最少要具有对protected成员的会见权利,由于Object类中的finalize()办法具有protected属性,而编译器不同意我们在承继过程当中打消会见权限(“友爱的”比“遭到回护的”具有更小的会见权限)。
在Frog.main()中,DoBaseFinalization标记会失掉设置,并且会创立独自一个Frog对象。请记着渣滓搜集(出格是扫尾事情)大概不会针对任何特定的对象产生,以是为了强迫接纳这一举动,System.runFinalizersOnExit(true)增加了分外的开支,以包管扫尾事情的一般举行。若没有基本类初始化,则输入了局是:
notfinalizingbases
CreatingCharacteristicisalive
LivingCreature()
CreatingCharacteristichasheart
Animal()
CreatingCharacteristiccanliveinwater
Amphibian()
Frog()
bye!
Frogfinalize
finalizingCharacteristicisalive
finalizingCharacteristichasheart
finalizingCharacteristiccanliveinwater
从中能够看出的确没无为基本类Frog挪用扫尾模块。但假设在命令行到场“finalize”自变量,则会取得下述了局:
CreatingCharacteristicisalive
LivingCreature()
CreatingCharacteristichasheart
Animal()
CreatingCharacteristiccanliveinwater
Amphibian()
Frog()
bye!
Frogfinalize
Amphibianfinalize
Animalfinalize
LivingCreaturefinalize
finalizingCharacteristicisalive
finalizingCharacteristichasheart
finalizingCharacteristiccanliveinwater
只管成员对象依照与它们创立时不异的按次举行扫尾,但从手艺角度说,并没有指定对象扫尾的按次。但关于基本类,我们可对扫尾的按次举行把持。接纳的最好按次恰是在这里接纳的按次,它与初始化按次恰好相反。依照与C++顶用于“损坏器”不异的情势,我们应当起首实行衍生类的扫尾,再是基本类的扫尾。这是因为衍生类的扫尾大概挪用基本类中不异的办法,请求基本类组件仍旧处于举动形态。因而,必需提早将它们扫除(损坏)。
Java到底会发战成什么样,让我们拭目以待吧,我始终坚信着java会更好。以上都是俺个人看法,欢迎大家一起交流.

因胸联盟 发表于 2015-1-21 10:50:36

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

透明 发表于 2015-1-27 06:08:52

是一种使网页(Web Page)产生生动活泼画面的语言

老尸 发表于 2015-2-2 22:09:31

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

仓酷云 发表于 2015-2-8 11:03:22

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

小妖女 发表于 2015-2-25 09:42:16

是一种使用者不需花费很多时间学习的语言

乐观 发表于 2015-3-6 05:34:49

Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站

山那边是海 发表于 2015-3-6 18:06:51

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

兰色精灵 发表于 2015-3-7 08:49:03

是一种使用者不需花费很多时间学习的语言

再现理想 发表于 2015-3-11 09:09:19

是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能

灵魂腐蚀 发表于 2015-3-18 02:11:19

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

蒙在股里 发表于 2015-3-20 21:04:32

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

冷月葬花魂 发表于 2015-3-25 07:27:17

Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站

柔情似水 发表于 2015-4-3 04:29:03

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

简单生活 发表于 2015-4-8 09:34:36

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。

只想知道 发表于 2015-4-13 19:26:37

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

活着的死人 发表于 2015-4-16 20:10:30

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

谁可相欹 发表于 2015-4-21 06:30:47

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

深爱那片海 发表于 2015-4-27 19:16:31

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

分手快乐 发表于 2015-4-29 20:37:14

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
页: [1] 2
查看完整版本: 了解下JAVA的java承继和finalize()