- 浏览: 441553 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (538)
- C/C++ Primer (69)
- Objective-C Primer (102)
- Python Primer (19)
- JavaScript Primer (1)
- Java Primer (37)
- PHP Primer (17)
- 泛 Linux (37)
- Shell Script (21)
- APUE (21)
- UNP__1&2 (19)
- NetWork (7)
- Oracle周边 (38)
- Mysql里边 (6)
- Windows技 (9)
- 简单算法 & 数据结构 (14)
- 设计模式 (6)
- GTK历程 (12)
- 工具使用 (25)
- 杂事 (23)
- 一些概念 (17)
- Web方面 (10)
- myCodeTools (9)
- ^未 竟$ (13)
- 硬件通信 (2)
- Games (1)
最新评论
原文地址:http://hi.baidu.com/aezealer/blog/item/fb8fdd438113c8169213c6c5.html
在Java程序中,很多main方法前面都会被标记上static修饰符。现在,我们要讨论一下static这个修饰符在Java和C++这两中语言中的含义。
术语“static”有段不寻常的历史。起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。在C中static实际通常有两种含义:一是在声明局部变量时,表示该局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有的值,就是上一次函数调用结束时的值;另一种含义是表示不能被其他文件访问的全局变量和函数。后来,C++重用了这个关键字,并赋予它一种新的含义:表示属于一个类而不是属于此类的任何一个特定对象的变量和函数。这种含义同在Java中是一样的。
首先先说一下这个修饰符的具体含义。当我们在设计一个类时,类中的有些字段或方法,并不是其每个对象都要实现一个拷贝的。
例如在Java中,当我们定义一个Employee时:
classEmployee
{
……
privateintid;
privateintnoOfEmployee=1;
}
这样定义一个类后,每一个雇员有一个ID号码,和一个雇员数。但实际雇员数是没有必要在每个雇员中都保留一份的。对于一个类Eemployee只需一个雇员数就可以了。而且每一个雇员有一个雇员数,当雇员数变化时,还要更新每一个雇员内的字段,比较麻烦。而static正式解决这个问题的一种方法。无论在Java还是在C++中,若将一个数据成员还是方法声明为staic。无论类有多少个实例,这个数据成员或方法只有一个。下面,我们在Java和C++中分别讨论它。
在Java中,静态变量并不常见,最长使用的是静态常量。如在Math类中定义了一个静态常量。
publicclassMath
{
……
publicstaticfinaldoublePI=3.14159265358979323846;
……
}
在程序中可以使用Math.PI来访问此常量。如果关键字static被省略,那么PI则是Math类的一个实例字段。也就是说如果要访问PI,需要通过Math类的一个对象,而且每个对象都有自己的一份PI拷贝。
在C++中,静态数据成员通常放在类的内部实现部分中定义。定义时,需要用类名引导。在对静态数据成员访问时,使用类名或对象名都可以。通常静态数据成员用的较多的场合为:
·用于保存流动变化的对象个数。
·作为一个标记,指示一个特定的动作是否发生。
·一个指向一个链表第一个或最后一个成员的指针。
无论在Java中还是在C++中,静态方法是不向对象施加操作的方法。可以把静态方法看作是没有this参数的方法(在C++中即为没有this成员指针的函数)。因为静态方法并不操作对象,所以不能用静态方法类访问实例字段。但是它可以访问自身类中的静态字段。
通常在以下良两种情况下需要使用静态方法:1.该方法不需要访问对象的状态,其所需的参数都通过显示参数提供。2.该方法只需要访问类的静态字段。
静态方法在Java中还有另外一个用途是工厂方法。工厂方法用于产生同一类的对象。许多工厂方法如:
NumberFormate.getNumberInstance()
NumberFormate.getCurrencyInstance()
这些方法都是使用类,而不是对象去调用它们,因此都是静态方法。还有,Java中的main方法也是静态方法。Main方法并不地任何对象施加操作。事实上,程序开始执行时还不存在任何对象。静态main方法执行并构造程序所需的对象。
总之,static解决了如何处理那些属于类但不属于对象的变量或方法的问题。无论在Java中还是在C++中,其功能基本上是相同的。有差异的不过是语法上的表现。
================================
Java中的泛型与C++模板的比较2007年09月18日星期二17:00
泛型本质上是提供类型的"类型参数",它们也被称为参数化类型(parameterizedtype)或参量多态(parametricpolymorphism)。其实泛型思想并不是Java最先引入的,C++中的模板就是一个运用泛型的例子。
GJ(GenericJava)是对Java语言的一种扩展,是一种带有参数化类型的Java语言。用GJ编写的程序看起来和普通的Java程序基本相同,只不过多了一些参数化的类型同时少了一些类型转换。实际上,这些GJ程序也是首先被转化成一般的不带泛型的Java程序后再进行处理的,编译器自动完成了从GenericJava到普通Java的翻译。
GJ程序的语法在表面上与C++中的模板非常类似,但是二者之间有着本质的区别。
首先,Java语言中的泛型不能接受基本类型作为类型参数――它只能接受引用类型。这意味着可以定义List<Integer>,但是不可以定义List<int>。
其次,在C++模板中,编译器使用提供的类型参数来扩充模板,因此,为List<A>生成的C++代码不同于为List<B>生成的代码,List<A>和List<B>实际上是两个不同的类。而Java中的泛型则以不同的方式实现,编译器仅仅对这些类型参数进行擦除和替换。类型ArrayList<Integer>和ArrayList<String>的对象共享相同的类,并且只存在一个ArrayList类。
发表评论
-
float equal
2013-05-23 18:21 781- (BOOL)floatA:(float)f1 equalB ... -
C++序列化
2012-07-12 09:51 540http://hi.baidu.com/ewook/item/ ... -
C++著名内裤
2011-12-02 14:00 7721、C++各大有名库的介绍 ... -
C++写C
2011-09-06 17:23 591在C++中写C,标准头文件写法 #ifndef __AB ... -
errno.h
2011-05-05 14:27 653#define EPERM 1 ... -
__cplusplus
2011-04-21 15:09 706http://www.cnblogs.com/stonecra ... -
Pthread__常用
2011-04-21 11:46 813http://blogold.chinaunix.net/u/ ... -
常用预编译
2011-04-21 10:32 614#if defined(WIN32) || defined ... -
C++__容器
2011-04-18 10:16 526http://apps.hi.baidu.com/share/ ... -
C++模板
2011-03-29 14:27 596内容主要来至《钱能C++程序设计教程》&《C++ Pr ... -
交叉引用、前置声明
2011-03-02 09:40 773有两个类相互引用了,编译器报错。 原因是两个类交叉引用: A ... -
typedef的四个用途和两个陷阱
2010-12-14 12:34 613http://hi.baidu.com/changfeng01 ... -
第五届开源小组招新题目
2010-12-03 21:56 706这是学校的开源小组招新题。 08年时我是第二届的组长,不知不觉 ... -
string const char*
2010-12-02 16:13 737http://topic.csdn.net/u/2008092 ... -
CPP Container
2010-11-10 09:20 651延后整理。。。 -
C语言运算符优先级
2010-11-02 17:45 749优先级 运算符 ... -
point point
2010-11-02 17:23 584http://learn.akae.cn/media/ch23 ... -
位运算
2010-11-01 11:33 751千百年来,位运算始终没出现在我写的代码里,今天终于出现了。 ... -
Unix环境下操作特大文件
2010-11-01 11:03 573http://hi.baidu.com/jiangfeng11 ... -
GCC在C语言中内嵌汇编
2010-10-22 14:48 1333http://hi.baidu.com/liu_bin0101 ...
相关推荐
在此过程结束时,包含原始方法的.class文件中不会保留原始方法的信息。 Before public class App { public static void main(String args[]) { System.out.println("Hello, world!"); } } After public ...
Java的设计者曾说过,设计这门语言的灵感主要来自于C++。 世上先有C++,然后才有Java,整个Java语言的发展历史是一部对C++的填坑史。... 2、Java类除static和final外其他函数定义默认是虚函数,而C++用v
通 过 颁发 许 可 证 的 办 法 来 允 许 各 家 公 司 把Java虚 拟 机 和 Java的Applets类库 嵌 入 他 们 开 发 的 操 作 系 统 ,这 样 各 类 开 发 人 员 就 能更 容易 地 选 择 多种 平 台 来 使 用 Java语 言 编 ...
附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 寻找瓶颈 D.2.1 安插自己的测试代码 D.2.2 JDK性能评测[2] D.2.3 特殊工具 D.2.4 性能评测的技巧 D.3 提速方法 D.3.1 常规手段 D.3.2 依赖...
6.成员变量和成员方法前加static的作用是什么? 7.using和new有什么区别? 8.如何理解面向对象的多态性? 9.有一个泛型类class List<T>{},则正确实例化该泛型类的语句是( )。 A)List t=new List(); ...
1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发...
附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 寻找瓶颈 D.2.1 安插自己的测试代码 D.2.2 JDK性能评测[2] D.2.3 特殊工具 D.2.4 性能评测的技巧 D.3 提速方法 D.3.1 常规手段 D.3.2 依赖...
Java编程语言的语法类似于C++,但是相比C++更简洁和易于理解。它采用了“一次编写,到处运行”的原则,即一次编写的程序可以在不同的操作系统上运行,这得益于Java虚拟机(JVM)的存在。JVM是Java的核心组成部分,它...
在Java中,可以使用以下格式定义一个数组: int[] x=new int[10]; 或 int[] x; x=new int[10]; 1 2 3 4 2.8.2 Arryas工具类 Arrays是一个专门用于操作数组的工具类,该类位于java.util包中。Arrays工具类提供了大量的...
如果你学习过C++语言,你会感觉Java很眼熟,因为Java中许多基本语句的语法和C++一样,像常用的循环语句、控制语句等和C++几乎一样,但不要误解为Java是C++的增强版,Java和C++是两种完全不同的语言,他们各有各的...
在本课程中您将学会JAVA语言的语法。如何使用JAVA来创建图形用户界面(GUI),事件处理机制,例外处理,通过设计与开发各种JAVA程序来获得实际的编程经验。您也将学到文件输入/输出/(I/O)。多线程和网络的知识(本...
Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的...
Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的...
Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的...
3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner ...
Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的...
Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的...
Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的...
Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的...
编译:生成可执行文件,如C++中利用g++生成a.out,效率高,但不跨平台 解释:解释器把源文件逐行解释,跨平台但效率不高 在java中:先编译后解释,把.java文件编译成.class字节码文件 Java源代码文件(.java...