网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.getUTCMinutes 方法.
.教你实现传说中Java7.0的XML嵌入.
.从XML到Java代码的数据绑定之一.
.在Java中实现DOM文档和XML文件互.
.Eclipse开发平台编程溯源寻根.
.与JBuilder2007的第一次亲密接触.
.内部类和上溯造型.
.用Java实现音频播放.
.简单介绍Java实时应用程序中的内.
.多媒体和网络时代中,C++,Delph.
.Sun复兴2大支柱:x86、Sparc服务.
.使用MIDP2.0开发游戏(7)设计Sche.
.线程池的介绍及简单实现.
.实战 J2EE 开发购物网站 创建数据.
.什么是 Enterprise JavaBeans 组.
.技巧:Java垃圾收集器使用小诀窍.
.技术摘要:如何编写安全的Java代.
.书评:Java的盛宴(上).
.用 JAAS 和 JSSE 实现Java 安全性.
.Web 应用程序模型及其Java实现之.

java和c++比较(1)--虚函数和指针

发表日期:2008-1-5


  
1.Java中有虚函数,但是没指针,那也许会有这样的问题,那java是怎么实现多态的?
java中可以肯定是有虚函数的,而且我们假如不申明为final形他默认就是虚函数.不用vitual申明.
"In Java, you do not need to declare a method as virtual. Dynamic binding is the default behavior. If you do not want a method to be virtual, you tag it as final"--from <core java2 :volum I>.
java中没显示的和c++中的指针,但是他有地址的概念的.而且所有我们申明的"对象"其实就是地址(或叫句柄),给他赋值就是把他指向一个内存单元.当然也可以改变他的指向.其实我们"对象"的赋值操作全是地址在变东,对象还是没有变的.那也许有人会说那样的话不是会产生很多没有"对象"(句柄)的内存区域.是的是会产生,但是java的垃圾收集机制会给我们回收这样的内存"泄漏".所以我们只关心我们操作的对象就行,其他的我们不用的对象的后事垃圾收集会给我们干.
明白了在java中的"对象"而非我们c++中理解的对象.而实际上是指针(句柄)那多态当然可以实现.
下面举个"对象"赋值(引用)的例子说明,全是地址在变,而非真的内存单元.
public class Number {
   private int number;

   public Number( int number ) {
      this.number = number;
   }

   public int getNumber() {
      return this.number;
   }

   public void setNumber( int number ) {
      this.number = number;
   }

   public static void main( String[] args ) {
      Number one = new Number( 1 );
      Number two = new Number( 2 );
      System.out.println( "Beginning: " );
      System.out.println( "One = " + one.getNumber() );
      System.out.println( "Two = " + two.getNumber() );

      // Assign two to one
      two = one;//在这里two这个句柄的值(即某个对象的地址)改成one这个句柄的值了.从而two和one指同时//向one以前指向的那个内存单元(对象).而two 以前指向的那个对象现在为没有句柄连接的对象了.可能要被垃圾收集
      System.out.println( "\nAfter assigning two to one: " );
      System.out.println( "One = " + one.getNumber() );
      System.out.println( "Two = " + two.getNumber() );

      // Change the value of two
      two.setNumber( 3 );//two和one指向同一个单元,所以他对改单元的改变,one能感知.
      System.out.println( "\nAfter modifying two: " );
      System.out.println( "One = " + one.getNumber() );
      System.out.println( "Two = " + two.getNumber() );
   }
}
运行结果:
Beginning:
One = 1
Two = 2
After assigning two to one:
One = 1
Two = 1
After modifying two:
One = 3
Two = 3
Press any key to continue...
java新手和学习c++的一点感受,如有不对之处,还望指出.
上一篇:java访问com组件_jacob使用指南 人气:2007
下一篇:JAVA构造函数运行解析 人气:1604
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐