C++与Java的语法区别
C++与Java的语法区别
首先,两个大的不同是主函数和怎样编译的不同,接下来是许多小的区别。
main 函数
C++
//自由浮动的函数
int main( int argc, char* argv[])
{
printf( "Hello, world" );
}
Java
// 每个函数都必须是一个类的一部分;当java <class>运行是一个特定类的主函数会被调用
// (因此你可以让每个类都有一个main函数,这在写单元测试是很有用)
class HelloWorld
{
public static void main(String args[])
{
System.out.println( "Hello, World" );
}
}
类的声明
除了 Java 不要求用分号外几乎是相同的。
C++
class Bar {};
Java
class Bar {}
方法声明
都相同的, 除了在Java,方法必须总是 某个类的一部分并且可能public/private/protected 作为修饰
构造函数和析构函数
构造函数都是相同的 (即类的名字), Java没有准确意义上的的析构函数
静态成员函数和变量
方法声明是相同的, 但 Java 提供静态初始化块来来初始化静态变量 (不需要在源文件中声明):
class Foo
{
static private int x;
// 静态初始化块
{ x = 5; }
}
对象的声明
C++
// 在栈中
myClass x;
//或者在堆中
myClass *x = new myClass;
Java
// 总是在对堆中声明
myClass x = new myClass();
继 承
C++
class Foo : public Bar
{ ... };
Java
class Foo extends Bar
{ ... }
访问级别 (abstraction barriers)
C++
public:
void foo();
void bar();
Java
public void foo();
public void bar();
虚函数
C++
virtual int foo(); // 或者非虚函数写作 int foo();
Java
// 函数默认的就是虚函数; 用final关键字防止重载
int foo(); // 或者, final int foo();
内存管理
大体上是相同的--new 来分配, 但是 Java没有 delete,因为它有垃圾回收器。
NULL vs null
C++
// 初始化一个指针为 NULL
int *x = NULL;
Java
// 编译器将捕获使用未初始化的引用
//但是如果你因需要初始化一个引用而赋一个null,那么这是无效的
myClass x = null;
布尔型
Java有一点罗嗦: 你必须写 boolean而不止是 bool.
C++
bool foo;
Java
boolean foo;
常 量
C++
const int x = 7;
Java
final int x = 7;
抛异常
首先,Java在编译器强制抛异常—如果你的方法可能会抛异常你必需明确报告
C++
int foo() throw (IOException)
Java
int foo() throws IOException
数 组
C++
int x[10];
// 或
int *x = new x[10];
// 使用 x,然后归还内存
delete[] x;
Java
int[] x = new int[10];
// 使用 x, 内存有垃圾回收器回收或
//或在程序生命周期尽头归还给系统
集合和迭代器
C++
迭代器是类的成员。范围的开始是<容器>.begin(), 结束是 <容器>.end()。 用++ 操作符递增, 用 *操作符访。
vector myVec;
for ( vector<int>::iterator itr = myVec.begin();
itr != myVec.end();
++itr )
{
cout << *itr;
}
Java
迭代器只是一个接口。 范围的开始是 <集合>.iterator,你必须用itr.hasNext()来查看是否到达集合尾。 使用itr.next()(是在C++中使用操作符++ 和*操作的结合)来获得下一个元素。
ArrayList myArrayList = new ArrayList();
Iterator itr = myArrayList.iterator();
while ( itr.hasNext() )
{
System.out.println( itr.next() );
}
// 或, 在Java 5中
ArrayList myArrayList = new ArrayList();
for( Object o : myArrayList ) {
System.out.println( o );
}
抽象类
C++
// 只需要包含一个纯虚函数
class Bar { public: virtual void foo() = 0; };
Java
// 语法上允许显示的声明!
abstract class Bar { public abstract void foo(); }
// 或者你也可以声明一个接口
interface Bar { public void foo(); }
// 然后让一个类继承这个接口:
class Chocolate implements Bar
{
public void foo() { /* do something */ }
}
引用 vs 指针
C++
//引用不可改变,通过使用指针来获得更多的灵活性
int bar = 7, qux = 6;
int& foo = bar;
Java
// 引用是可变的,仅存储对象地址;
//没有指针类型
myClass x;
x.foo(); // error, x is a null ``pointer''
// 注意你要总是用 . 来访问域
编 译
C++
// 编译
g++ foo.cc -o outfile
// 运行
./outfile
Java
// 编译foo.java文件中的类成<classname>.class javac foo.java
// 通过调用<classname>中的静态main方法来运行
java <classname>
注 释
两种语言是一样的 (// 和 /* */ 可以用)
转载自:http://blog.csdn.net/xylary/article/details/1678413
C++与Java的语法区别的更多相关文章
- java面向对象编程——第二章 java基础语法
第二章 java基础语法 1. java关键字 abstract boolean break byte case catch char class const continue default do ...
- java基础语法笔记
这段时间看了一些java,急了一些笔记,记下一遍以后复习用! 2016-07-24 15:12:40 java很多语法都跟C#类似,下面列举一些不同的地方******注意***** java中的系统方 ...
- Java基础语法(上篇)
Java基础语法(上篇) 知识概要: (1)关键字的表示与规范 (2)标示符 (3)注释 (4 ...
- Java基础语法入门01
Java基础语法入门01 学习java你要先进行去了解JDK,JRE,JVM JDK Java开发工具包 JRE Java语言开发的运行环境 JVM Java虚拟机,用于Java语言的跨平台所用. 当 ...
- Java 基本语法---流程控制
Java 基本语法---流程控制 0. 概述 三大流程控制语句:顺序.选择.循环. 选择结构: if 结构,if - else结构: 多重 if - else 语句 ; 嵌套 if - else 语句 ...
- C#与Java的语法差异
C#与Java的语法差异C与Java的语法差异前言程序结构基本语法数据类型字符串变量与常量运算符判断语句循环语句访问权限方法数组结构枚举类继承多态运算符重载接口命名空间预处理器指令正则表达式异常IO泛 ...
- JavaSE入门学习7:Java基础语法之语句(下)
继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...
- 第3天 Java基础语法
第3天 Java基础语法 今日内容介绍 引用数据数据类型(Scanner.Random) 流程控制语句(if.for.while.dowhile.break.continue) 引用数据类型 Scan ...
- 第1天 Java基础语法
Java基础语法 今日内容介绍 Java开发环境搭建 HelloWorld案例 注释.关键字.标识符 数据(数据类型.常量) Java开发环境搭建 Java概述 众所周知Java是一门编程语言,编程语 ...
随机推荐
- IOS开发之GCD---dispatch_semaphore
信号量是一个整形值并且具有一个初始计数值,并且支持两个操作:信号通知和等待.当一个信号量被信号通知,其计数会被增加.当一个线程在一个信号量上等待时,线程会被阻塞(如果有必要的话),直至计数器大于零, ...
- eclipse中mybatis_generator插件的安装与使用
git地址:https://github.com/mybatis/generator 下载后解压: 选择任意一个版本的jar放到eclipse的features目录下即可 选择任意一个版本的jar放到 ...
- opencv vs环境配置
1.新建环境变量 OPENCV = D:\Programss\opencv\build 2.%OPENCV%\x86\vc12\bin;加入Path环境变量 3.导入 VS属性表文件 cv2413.p ...
- java数据库连接池技术原理(浅析)
在执行数据库SQL语句时,我们先要进行数据连接:而每次创建新的数据库的连接要消耗大量的资源,这样,大家就想出了数据库连接池技术.它的原理是,在运行过程中,同时打开着一定数量的数据库连接,形成数据连接池 ...
- webpack ,gulp/grunt的介绍
http://www.jianshu.com/p/42e11515c10f# bfc的概念block formatting context http://www.cnblogs.com/dojo-lz ...
- JQuery实现table分页
1.直接贴代码: ; //每页显示的记录条数 ; //显示第curPage页 var len; //总行数 var page; //总页数 $(function(){ len =$(; //去掉表头 ...
- ftp put本地文件至ubuntu服务器报错
起因:我想把本地下载的安装包上传至服务器. 由于Mac的ftp图形化客户端还没找着合适的,就想着用命令也是一样的. 但是又进坑了. 下载能够正常运行: ftp> get 2.jpg /Users ...
- mongo 相关命令
mongo导入数据: 1. 先进入找到mongo 安装目录 执行 ./mongo 进入mongo 2. mongorestore -u 用户名 -p 密码 -d 数据库 —drop 文件存在路径 显示 ...
- WINDOWS7(vs2012+wdk7.6) 配置驱动开发环境
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 1.新建C ...
- 解决xftp远程连接中文乱码
更改乱码服务器的属性,使用UTF-8编码