Java 和 C++ 语法之间的区别

2023-05-16

main 方法

Java

//java 的函数必须写在类里
class HelloWorld{
    public static void main(String args[]){
        System.out.println( "Hello, World" );
    }
}复制代码

C++

//C++ 的函数可以写在任意地方 没有限制
int main( int argc, char* argv[])
{
    printf( "Hello, world" );
}复制代码

编译

Java

// 编译成 HelloWorld.class
javac HelloWorld.java
//直接运行HelloWorld.java 中的main 方法
java HelloWorld复制代码

C++

//编译生产helloworld
g++ helloworld.cpp -o helloworld
//运行
./helloworld复制代码

注释

Java 和 C++ 注释的方法都是一样的分别为行注释// 和块注释/* */

类的声明

大部分是一样的但是C++ 需要分号结尾而Java 则不需要

Java

class Foo{
 
}复制代码

C++

class Foo{
 
};复制代码

函数的声明

大部分一样,在Java中函数必须定义在类中,并且可以使用 public ,private,protected 作为前缀,而在C++ 中函数可以单独定义(比如 一个cpp 文件中就一个函数).

构造函数

构造函数基本一致 都是类的名字为构造函数名。但是C++ 中还有个析构函数 这个函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

静态方法

Java 是通过类名.来调用静态方法的

C++ 是通过类名::来调用静态方法的

Java

class HelloWorld{
    public static void hello(){//声明
        //helloworld....
    }
}
 
//调用
HelloWorld.hello();复制代码

C++

class HelloWorld
{
    public:
    static void hello(){
        //helloworld....
    }
};
//调用
HelloWorld::hello();复制代码

对象的声明

Java

//直接在堆(heap)上分配内存
HelloWorld helloWorld = new HelloWorld();复制代码

C++

//在堆栈(stack)上
HelloWorld helloworld;
 
//或者在堆(heap)上
HelloWorld *helloworld = new HelloWorld;复制代码

访问对象中的属性

Java

HelloWorld helloWorld = new HelloWorld();
//Java 中 使用. 来调用对象中的属性
helloWorld.my_field;复制代码

C++

// 基于堆栈的对象的需要用.来访问对象中的属性
HelloWorld helloworld;
helloworld.my_field;
 
//使用指针时使用箭头运算符(->)来访问类的字段
HelloWorld *helloworld = new HelloWorld;
helloworld->my_field;复制代码

引用(References)和指针(pointers)

Java

//Java 中的引用是可变的 并且只存储对象的地址。 Java 中没有指针
HelloWorld helloWorld;
helloWorld.hello();//会报空指针异常复制代码

C++

//引用是不可变的,指针是灵活的
int x = 7,y = 6;
int& z = x;复制代码

继承

Java 只能单继承,C++ 可以多继承(对这个比较头疼,还有环形继承更搞不懂什么鬼。有点难以理解,有兴趣的可以去找找资料)

Java

//java 的继承使用关键字 extends(当然java 中的对象默认都是继承Object 对象的)
class HelloWorld extends Object{
    ...
}复制代码

C++

//C++ 使用 : 表示继承
class HelloWorld : public Foo
{
    ...
};复制代码

访问修饰符

Java

//对所有类可见。
public void print();
//在同一类内可见。
private void print();
// 对同一包内的类和所有子类可见。
protected void print();
//默认修饰符(default) 在同一包内可见。
void print();复制代码

C++

//类的外部是可访问,跟Java类似
public:
    void print();
//私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的
private:
    void print();
//默认情况下,类的所有成员都是私有的
void print();
//保护成员变量或函数与私有成员十分相似,但有一点不同,保护成员在派生类(即子类)中是可访问的
protected:
    void print();复制代码

抽象类

Java

//java 可以明确制定为抽象类 子类必须实现print() 函数
abstract class HelloWorld{
    public abstract void print();
}
//或者你可以定义个接口
interface HelloWorld{
    public void print();
}
//然后你可以实现这个接口
class HelloWorlImp implements HelloWorld{
    public void print(){
        ...
    }
}复制代码

C++

//只需要定义一个纯虚函数
class HelloWorld
{
    public:
        virtual void print()=0;
}复制代码

关于纯虚函数和虚函数有什么区别可以点这里看看www.runoob.com/w3cnote/cpp…

内存管理

都是通过new 来分配内存的,C++ 需要自己来管理内存 释放,Java 则不需要管,有垃圾回收

布尔类型的定义

Java

boolean foo;复制代码

C++

bool foo;复制代码

常量定义

Java

final int x = 8;复制代码

C++

const int x = 8;复制代码

异常

Java

void print() throw IOException{
    ...
}
 
try{
    print();
}catch(IOException e){
    ...
}复制代码

C++

void print(){
    throw "Exception!!!";
}
 
try{
    print();
}catch(...){//使用省略号表示让 catch 块能够处理 try 块抛出的任何类型的异常
    ...
}复制代码

数组

Java

//直接定义使用 不用管回收问题
int [] x = new int[10];复制代码

C++

int x[10];
//或者
int *x = new x[10];
//用x 然后释放调
delete[] x;复制代码

集合和迭代

Java

ArrayList list = new ArrayList();
Iterator iterator = list.iterator();
while(iterator.hasNext()){
    System.out.println( itr.next() );
}
//或者
for(Object o: list){
    System.out.println(o);
}复制代码

C++

vector myVec;
for ( vector<int>::iterator itr = myVec.begin();itr != myVec.end();++itr )
{
    cout << *itr;
}


作者:zhang523
链接:https://juejin.cn/post/6844903694144651277

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 和 C++ 语法之间的区别 的相关文章

  • 连接 Netbeans 和 MySQL 但出现大整数错误

    所以我正在尝试向我的 Netbeans 数据库 即 MySQL 添加新连接 但我遇到了大整数转换错误 有人可以帮助我吗 详细地 我右键单击现有的MySQL 服务器位于 localhost 3306 root 已断开连接 gt gt 选择co
  • 如何让我的程序等到 JavaFX 窗口关闭后再继续?

    我有一个显示结果条形图的程序 我想等到用户关闭条形图才能继续执行下一行代码 该代码询问他们是否要为图表输入新信息 Scene scene BarGraph getBarChart primaryStage setScene scene pr
  • 如何从另一个 Flux 中排除 Flux 中的所有元素

    我有两个Flux一个用于成功元素 另一个用于保存错误元素 Flux
  • Java中使用正则表达式确定字符串是否为URL [重复]

    这个问题在这里已经有答案了 可能的重复 检查字符串是否为有效 URL 的最佳正则表达式是什么 https stackoverflow com questions 161738 what is the best regular express
  • 在循环中使用 if 语句? - 加工

    假设我必须在 for 循环中使用 if 语句 并且 for 循环在特定条件下触发 而 if 语句仅在 for 循环达到特定阶段时触发 例如 条件是一个计数器 当发生特定事件 例如球从屏幕上掉下来 时 该计数器会进行计数 每次球穿过屏幕时 都
  • 搜索 JTable 时 - 未获得正确的 ID

    所以我尝试在搜索名称后单击表 然后在其他表中编辑它 问题是我没有获得正确的 ID 而只获得第一个 ID JTable https i stack imgur com TnNIq png 搜索行动 https i stack imgur co
  • Spring 应用程序启动前的 Spring Boot 设置日志记录

    我有一个项目 在启动 SpringApplication 之前需要日志记录机制 我怎样才能做到这一点 我尝试设置自己的日志记录机制 LogManager getLogManager readConfiguration 但在 Spring 应
  • 如何修复XSS漏洞

    我们正在使用 fortify 扫描 java 源代码 它抱怨以下错误 Method abc sends unvalidated data to a web browser on line 200 which can result in th
  • 如何仅使用命令行运行 Maven 创建的 jar 文件

    我需要一些帮助来尝试使用命令行运行以下 Maven 项目 https github com sarxos webcam capture https github com sarxos webcam capture webcam captur
  • 在 Java/Android 中查找 UTF-8 字符串中的字符数

    我试图找出字符串以 UTF 8 存储时的长度 我尝试了以下方法 String str Charset UTF8 CHARSET Charset forName UTF 8 byte abc str getBytes UTF8 CHARSET
  • Android-如何在指定时间后台下载数据

    我提前很抱歉没有发布任何代码 主要是因为我一生都无法弄清楚我需要如何做我需要做的事情 基本上 在一天中的指定时间间隔 例如下午 5 点 我希望我的应用程序从我的服务器下载一些数据并将其存储在设备上 这是为了减少每次运行应用程序时下载数据对我
  • Java:字符串连接和变量替换的最佳实践[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在 Java 中连接字符串和添加变量值的方法有太多 我应该如何选择一个 优点 缺点 最佳用例等 MessageFormat forma
  • 使用电子邮件、用户名和密码进行 Firebase 身份验证

    我想知道是否可以使用电子邮件和用户 ID 密码登录 我有一个项目 我希望用户添加一个唯一的号码 实际上是我们公司提供的工作识别号码 以便能够签名参与该计划的人员将继续留在公司就业 即使电子邮件和密码正确但用户 ID 错误 我也需要 fire
  • 使用 Arrays.copyOf 复制不同类型的数组时出现问题

    我正在尝试创建一个方法 该方法几乎将任何内容作为参数 并返回带有某些分隔符的值的串联字符串表示形式 public static String getConcatenated char delim Object names String st
  • CellTables 和 css (GWT)

    有人可以帮我设置 CellTable 行的背景吗 拜托 我整晚都在努力做这件事 但一直失败 这是 让我发疯 我尝试过调用setRowStyles 但是那个 似乎不起作用 我读到你无法更改 设置样式后 CellTable 的样式 作为默认样式
  • 在java中的super调用之前创建一个对象

    考虑到简单的java代码是行不通的 public class Bar extends AbstractBar private final Foo foo new Foo bar public Bar super foo 我需要在之前创建一个
  • 注意通知持续时间

    是否可以将抬头通知的持续时间设置为无限 现在它只显示 5 秒 已经尝试过不同的事情 例如更改类别 但持续时间始终为 5 秒 这是我的代码 Notification notification notificationBuilder setCa
  • 在Android中创建自定义按钮类

    我正在尝试为我的 Android 应用程序创建自定义按钮类 public class TicTacButton extends Button 我已经在里面设置了所有构造函数TicTacButton并创建了自定义方法和属性 在我的主要活动中
  • 使用 Jsoup 选择没有类的 HTML 元素

    考虑一个像这样的 html 文档 div p p p p p class random class name p div 我们怎样才能选择所有p元素 但不包括p元素与random class name class Elements ps b
  • Jsplitpane 自动调整大小

    我有一个 JSPlitPane 它们之间有 50 的分隔线 这工作正常 但是 当我在右侧添加一些 JLabels 时 jsplitpane 会忽略我的 50 分隔符 左侧窗格会增加其大小 并会挤压右侧窗格 为什么会发生这种情况以及如何解决

随机推荐

  • 添加自定义的section

    一 基本知识点 编译出来的程序 xff08 o so exe ko等等 xff09 都是以elf格式进行排列保存的 elf文件分析情况 xff1a https blog csdn net edonlii article details 87
  • 如何打印堆栈

    一 打印堆栈可以方便问题定位 xff0c 找到具体的函数调用流程 二 打印堆栈的方法 2 1 用户态 include lt stdio h gt include lt stdlib h gt include lt stddef h gt i
  • 内存飞踩问题的几点思考

    1 程序编译 xff0c 链接后生成二进制可执行程序 二进制可执行文件以elf格式实现排列 可以通过readelf S xxxx查看具体section的划分 xff0c 粗略划分如下图所示 在这些section中 xff0c 代码段是只读的
  • CFS调度算法

    1 CFS调度算法 xff0c 顾名思义就是完全公平调度策略 比方说 xff0c 调度延迟时间是10ms xff0c 存在两个进程A和B xff0c 那么两个进程分别占用CPU的时间是5ms 然而 xff0c 阶级总是存在的 xff0c 毕
  • ARM处理器的异常模式

    1 ARM处理器有各种异常模式 xff0c 用于应对ARM出现的不同状态 出现异常时 xff0c 会随即进入相关的异常向量 xff0c 同时CPSR的寄存器也会设置成具体的模式 例 xff1a 当出现中断时 xff0c 不管是哪种中断 xf
  • 内核态和用户态相关的内存泄漏

    应用程序通过系统调用进入内核态代码 假如内核态代码存在内存泄漏 xff0c 此内存泄漏属于内核态还是用户态 xff1f 查看内核态和用户态的统计信息
  • 为什么在telnet登入界面下没有日志输出?

    1 每个进程的输入输出导向目标都可以在进程号下的fd软链接上查看 如 569号进程的输出目标是 dev console xff0c 即串口 其中0是标准输入 xff0c 1是标准输出 xff0c 2是标准错误输出 2 因此我们只需要查看te
  • 【无标题】

    1 将虚拟地址传入到内核态 xff0c 借助内核态中mm struct结构体的pgd页表基地址成员 xff0c 经过查页表的方式最终获取到物理地址 这种方法虽然很直观 xff0c 但是一会内核态 xff0c 一会用户态 xff0c 操作起来
  • C#串口=>发送和接收

    作用 xff1a 串口发送命令后 xff0c 等待下位机应答帧 代码 xff1a 一旦读取到数据就立即返回给上层 public string TXandRX byte buffer string data 发送 RS485专用 start
  • kprobe功能的代码实现

    1 可以借助 sys kernel debug tracing目录下的文件 xff0c linux提供了kprobes功能 xff0c 抓取内核函数中的入参和返回值 kprobes xff0c 强大的调试工具 sydyh43的博客 CSDN
  • 上位机使用C++通过ADS协议与倍福PLC通信例程-通过变量名方式读写浮点数

    前言 建议初学者先看这一章节内容 xff0c 里面包括一些基础的环境配置和项目建立流程 xff0c 以后开发项目这些流程是通用的 xff0c 务必掌握并熟练 链接 上位机使用C 43 43 通过ADS协议与倍福PLC通信例程 布尔变量的读取
  • 弄清USART串口的使能位(UE、TCIE、RXNEIE)和标志位(TC、RXNE)

    下面通过485半双工的通信过程 xff0c 记录USART串口的几个使能位 标志位 说明 xff1a USART IT TC 和 USART IT RXNE是一个常量 xff0c 并不代表 xff08 TC RXNE 这两位 define
  • 机器人视觉检测+跟踪:行人跟随过程中对目标提取特征+匹配

    今天上午也是没有很大的成效 xff0c 一直到下午睡醒 xff08 论好的睡眠的重要性 xff09 xff0c 在一篇帖子中看到一种新的写法 xff0c opencv3将IplImage转换为Mat格式的写法 xff0c 在我们的代码中采用
  • ubuntu firefox打不开网页

    检查ubuntu右上角联网开关是否打开 xff1a 需要勾选Enable Networking 如果能ping通其它主机地址 xff0c 浏览器却上不了网 xff0c 很有可能是dns域名解析的问题 查看域名配置文件 xff1a cat e
  • Java如何利用JNI调用C++(简略介绍及步骤)

    Java如何利用JNI调用C 43 43 xff08 简略介绍及步骤 xff09 文章目录 Java如何利用JNI调用C 43 43 xff08 简略介绍及步骤 xff09 一 原理介绍二 详细步骤步骤一 xff1a 编写Java类步骤二
  • HttpParser解析节点遇到的不解问题

    HttpParser遇到table时 xff0c 解析时 xff0c 直接抽取th或者td xff0c thead和tbody解析或出现异常 比如 lt table gt lt thead gt lt tr gt 相关内容 lt tr gt
  • CMakeLists 理解

    CMakeLists 理解 最近发现其实之前对CMakeLists 理解不是很全面 xff0c 零零散散在网上看到的一些教程 xff0c 其实都是为了解决某个命令的问题 xff0c 要不然就是对一些命令的翻译理解 xff0c 实际上是很劝退
  • sip协议之注册说明

    注册是SIP协议中重要的功能 xff0c 所谓注册 xff0c 就是用户A客户端将自己的联系地址告知服务器 xff0c 以便后续有其它用户呼叫用户A时 xff0c 服务器能够将呼叫转接到用户A SIP协议中的联系地址是指由账号 IP POR
  • 9v输入7.4v电路充电IC

    9v输入7 4v电路充电IC 两节串联的锂电池 xff0c 一般电压是7 4V xff0c 最高电压到8 4V xff0c 最低放电到6V左右 如果需要6V 8 4V降压到5V的DC DC降压芯片 xff0c 一般是用FS2953 如果需要
  • Java 和 C++ 语法之间的区别

    main 方法 Java java 的函数必须写在类里 class HelloWorld public static void main String args System out println 34 Hello World 34 复制