C、C++、Java、go的语法区别

首先,两个大的不同是主函数和怎样编译的不同,接下来是许多小的区别。

main 函数
C、C++

//自由浮动的函数
int main( int argc, char* argv[])
{
    printf( "Hello, world" );
}
Java
// 每个函数都必须是一个类的一部分;当java <class>运行时一个特定类的主函数会被调用,java类文件名需要与main函数所在类的名字相同
// (因此你可以让每个类都有一个main函数,这在写单元测试是很有用)
class HelloWorld
{
    public static void main(String args[])
    {
        System.out.println( "Hello, World" );
    }
}

 go

//自由浮动的函数

func main() {
    var a int
    var b string

    fmt.Printf("a = %d\n", a)
    fmt.Printf("b = %s\n", b)
}

类的声明
除了 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>

运行时

反射

包管理
    
注   释
两种语言是一样的 (// 和 /* */ 可以用)

时间: 2024-08-26 20:48:46

C、C++、Java、go的语法区别的相关文章

C++与Java的语法区别

C++与Java的语法区别 首先,两个大的不同是主函数和怎样编译的不同,接下来是许多小的区别. main 函数C++//自由浮动的函数int main( int argc, char* argv[]){    printf( "Hello, world" );}Java// 每个函数都必须是一个类的一部分;当java <class>运行是一个特定类的主函数会被调用// (因此你可以让每个类都有一个main函数,这在写单元测试是很有用)class HelloWorld{   

groovy与java语法区别

groovy与java语法区别 Groovy试图对Java开发人员尽可能地兼容.在设计Groovy时,遵循最不意外的原则,尤其是对于那些来自Java背景的开发人员. 这里我们列出了Java和Groovy之间的所有主要区别. 1.额外的关键字 Groovy中比Java多一些关键字,不要将它们用于变量名称等. as def in trait 2.数组初始化 在Groovy中,{...}块保留用于闭包.这意味着您无法使用以下语法创建数组字面量: // java初始化 int[] array = { 1

java与c#的语法区别详细介绍(一)

由C#转入Java一段时间了,总结下个人认为的Java同C#语法之间的不同之处,有不同意见之处还望各位海涵 刚学Java时觉得语法同C#大致是相同的(应该说C#同Java大致相同,毕竟人家微软的C#是有意模仿Java的语法习惯的) 比尔.盖茨曾经说过:"Java是最卓越的程序设计语言" 言归正传,下面探讨Java同C#的语法不同之处... 1,命名空间与包 C#为了把实现相似功能的类组织在一起,引入了命名空间的概念(namespace) Java中与此对应的东西叫做包(package)

Java JDK 版本的区别

jdk6和jdk5相比的新特性有: 1.instrumentation 在 Java SE 6 里面,instrumentation 包被赋予了更强大的功能:启动后的 instrument.本地代码 instrument,以及动态改变 classpath 等等. 2.Http有所增强 3. Java 管理扩展(JMX) 架构及其框架,以及在 Java SE 5 中新引入的 JMX API -- java.lang.management 包 4.JDK 6 中新增加编译器 API(JSR 199)

java与javax的区别分析(转)

Java是一种受C语言影响的编程语言.Java和Javax本质上是与Java编程语言的上下文一起使用的包.实际上Java和Javax没有区别.这只是不同的名字. Java是一种编程语言,受到C语言的影响.它源自C和C++的大部分语法,但是它的低级别设施比其中任何一个都要少.Java是一种通用编程语言,旨在与以前的语言相比具有较少的实现依赖性.它是并发的,基于类的,面向对象的语言. Java由Sun Microsystems的James Gosling开发,并于1995年发布.它最初作为Sun M

【Java】基础语法

虽然说Java又是一门新的编程语言,但基础的语法部分还都是可以和之前学习的编程语言一样的. 既然被称之为语法,那就必然有一定的规则.其中,在标识符和关键字部分,我们就可以很明显的看出一些强制性的要求. 关键字不能作为标识符,标识符为小写字母等,这有着一系列的规则,然而我们也并不需要去记,按着常规走,结合自身的以往的一些经验,就没什么问题. 学习了这么久的编程语言,也是总结过很多次关于数据的知识点.而这一次,一层一层,把它们之间的关系联系的更紧密了. 数据在程序中是少不了的.而我们如何获取数据或者

python语法区别

python语法区别: 大小写敏感 (动态语言:python)变量不用声明 p.s: 静态语言(Java)必须声明变量 语句末尾可以不打分号 可以直接进行数学计算 复制.粘贴功能失效,粘贴到别的地方的代码需要重新检查缩进是否正确 整数没有大小限制 浮点数也没有大小限制,但超出一定范围直接表示为inf(无限大) 原文地址:https://www.cnblogs.com/musecho/p/11666538.html

Python2和Python3的一些语法区别

Python2和Python3的一些语法区别 python Python2和Python3的一些语法区别 1.print 2.input 3. python3版本相对2版本的部分其他区别 问题:为何会出现乱码的情况 问题:如何获取编码方式的信息? 问题:在控制台上看到的到底是什么? 1.print 在版本2的使用方法是: print 'this is version 2 也可以是 print('this is version 2') 但到了3,就只能加上括号,像一个函数一样来使用 print:

Java的基本语法

Java的基本语法 ·String是字符串类型关键字,属于引用数据类型,不能通过强制类型转换的方式转换为基本数据类型: 但是可以通过方法的方式进行转换: ·进制 1,对于整数,有四种表示方式: 二进制->0.1,满2进1,以0b或0B开头表示 十进制->0-9,满10进1 八进制->0-7,满8进1,以数字0开头表示 十六进制->0-9及A-F,满16进1,以0x或0X开头表示,其中A-F不区分大小写 所有的数字在计算机的底层都是以二进制的形式存在的,计算机以补码的形式保存所有的整

java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别

java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别 以前一直没有注意过这个问题,前两天机缘巧合上网查了一下,然后自己测试验证了一下.虽然网上说法很多,但是关于NoClassDefFoundError并没有给出一个样例,所以一直无法理解,索性自己验证了一下,收获还不少. ClassNotFoundException ClassNotFoundException这个错误,比较常见也好理解. 原因:就是找不到指定的cla