c++与java的几个不同点
Java、C、C++在近两年一直稳居世界编程语言排行榜前三名。Java与c++都是面向对象的语言,但Java晚于C++发布,部分语法和思想也参考了C++,只是Java 没有头文件、指针、运算符重载、虚基类等等,算是c++语言的“纯净版”。如果学过C++,那学起Java来就不会感觉很难了,应当注意的是Java与c++有很多不同点。
1.命名空间
c++里可以用头文件,而Java里没有头文件,但是有比较类似的用法:import
Java里有package关键字的用法。当一个大型程序交由数个不同的程序人员开发时,很有可能用到相同的类名,所以在java程序开发中为了避免这个问题,提供了一个包的概念,只需要在写的程序第一行使用package关键字来声明一个包。包就是一个文件夹,它将源代码文件(.java)、编译后的文件(.class)和其他的一些用到的文件有组织的放在一起,这样一个大型程序就算是有相同类名,这些相同名字的类在不同包内就不用担心会出问题。
在c++里有一个经典的命名:using namespace std;这行代码使得我们在使用cin、cout、endl……时不用加std::的前缀。而在Java里有import关键字的用法,它同样能让我们在编写程序时省下写前缀的力气。import与#include有点相似但却不一样,编译器会在import导入的包里选择与类名对应的包,而#include则是编译器将其他文件的内容载入进来。Java里有一个java.lang包,里面的类经常用到,几乎没有类不用它的, 所以不管有没有写 import java.lang,编译器都会自动补上。
#include<iostream> //头文件
using namespace std; //命名空间
package java.xingchen; //声明所在包
import java.lang.*; //导包
2.代码格式
缩进、换行和{}这些是个人代码习惯,不算是代码格式的差异。
C/C++程序基本上是由n个函数组成,主函数调用其他函数实现所需功能。
Java程序是由n个类、m个方法组成,某个public类的主方法调用当前类的方法,或是调用其他类的公有(public)方法实现所需功能。
Java的m个方法类似于C/C++的n个函数,只不过是将这m个方法放到n个类里,目录结构更清晰一些。
c++程序基本格式如下:
#include<iostream> //头文件,必写
using namespace std; //命名空间
void hello(); //如果某个函数是在主函数之后定义的,那么必须在主函数之前声明,主函数才能调用这个函数
int main()
{
hello();
return ;
}
void hello()
{
cout << "Hello World!" << endl;
}
Java程序基本格式如下:
package java.xingchen; //说明在java/xingchen这个文件夹内
import java.lang.*; //导包语句,可不写,编译器自动加 //Java程序运行的是public类内的主方法
//文件名必须和public类类名一样(例如当前文件只能叫Xingchen.java),一个文件只能存在一个public类,主方法只能在public类内
//类只能由public修饰,即一个类只能是public class或class
public class Xingchen {
public static String out; //静态方法(static)调用该变量,那么该变量必须为静态变量(static)
public Xingchen(){ //空参构造方法,当前类实例化时如果未传参则执行此方法,一般空参构造方法可不写
this.out = "World"; //this是指当前类
}
public static void main(String[] args) {
new Test("Hello").hello(); //Test类创建匿名对象并执行类内的public方法
Xingchen x = new Xingchen();
x.hello();
}
public static void hello(){
System.out.println(out);
}
} class Test {
String out;
public Test(){} //如果一个类存在有参构造,那么必须定义空参构造方法
public Test(String str){ //有参构造方法,实例化时如果传入指定参数,则执行当前方法
this.out = str;
}
public void hello(){
System.out.println(this.out);
}
}
3.函数(方法)的声明与定义
声明是用来描述变量的类型等,定义是变量的实现。
C/C++里主函数内要使用的函数必须在主函数之前有过声明或定义,否则编译会不通过。即C/C++主方法要么写在所有调用函数的后面,要么在主函数之前就必须有所调用函数的声明。
Java则比较随意,只要语法没问题,主方法可以写在类内任意位置(当然肯定不能写在别的方法里面)。
4.编译结果
c/c++编译的最终结果是一个程序生成一个exe文件。
Java编译结果是一个程序中有多少类就生成多少个与类名相同的class文件。
5.录入输出
c++的录入输出靠输入流cin,输出流cout、cerr、clog实现,需要写#include<iostream>。
Java语言里没有像c++那样一个函数就完成录入,它的录入使用了一些基础类,比如:
首先导包
import java.util.Scanner;
然后在方法内使用以下语句进行录入
Scanner sc = new Scanner(System.in);
String a = sc.next(); //效果等同于String a = sc.nextLine();
int b = sc.nextInt();
float c = sc.nextFloat();
double d = sc.nextDouble();
boolean e = sc.nextBoolean();
sc.close(); //结束数据流。录入语句结束及时释放内存是个好习惯。
其实还有其他输入的方法,但是这种比较常用。Scanner类中没有nextChar方法,不能直接通过Scanner类从控制台读取char类型的变量,不能这样写
Scanner sc = new Scanner(System.in);
char a = sc.nextChar(); //这种方法是错的,Scanner类中没有nextChar方法
Java的输出语句用法很简单:System.out.println();或System.out.print();System.out.println语句结束后自动换行,System.out.print语句结束后不换行。
int age = 18;
String name = "张三";
System.out.println(age + "岁的" + name); //18岁的张三
6.数组
c++中定义数组格式是:数据类型 数组名[数组长度];
数组静态初始化格式:数据类型 数组名[] = {元素1,2,...};
int a[];
double b[] = {0.1,0.2}
在Java中,数组不是基本数据类型。
Java中定义数组格式是:数据类型[] 数组名 = new 数据类型[数组长度];
数组静态初始化格式:数据类型[] 数组名 = new 数据类型[]{元素1,2,...};
int[] a = new int[5]; //Java定义数组
double[] b = new double[]{0.1 2.3 4.5 6.7 8.9};
//可简写为double[] b = {0.1 2.3 4.5 6.7 8.9};
7.字符串
C++的字符串类型使用前必须有引用,而且声明变量类型时用的是string
#include <string>
//或#include <cstring>
string a = "";
在Java中,String字符串不是基本数据类型,它被当作类来处理,是引用数据类型。String类在java.lang包内,导包语句可忽略。创建字符串对象时用的是String
String a = new String("123");
//或简写成String a = "123";
8.引用和指针
c++有引用,有指针。
Java有引用,但是没有指针。
具体差别我也有些搞不清楚,参考博客https://blog.csdn.net/alpha_love/article/details/73695435
c++与java的几个不同点的更多相关文章
- Java与C++面向对象不同点
首先面向对象的语言有哪些?JAVA.C++.C#等等.但是呢很多人认为C#和C++有关系,其实一点关系都是没有滴.C#是仿Java做的,很多人都说是假Java,因为C#和Java太像了比如C#也有st ...
- java基础-java与c#接口不同点
1.接口中定义成员 C#,如图我在接口ITest添加了一个字段n,那么vs直接就显示红色的底线,而错误就是接口不能包含字段 java,如下图,编译也是报错但是并不是接口中不能包含而是缺少赋值,那么我们 ...
- Java企业实训 - 01 - Java前奏
前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...
- 对Java不能多继承,只能单继承,却可以实现多个接口的理解
1.java与C++的不同点在于多继承. Java:不能多继承,只能单继承,但可以实现多个接口 C++:可以实现多继承.例如: class A extends B implements C,D,E { ...
- Kotlin学习第一课:从对比Java开始
1. 介绍 今年初,甲骨文再次对谷歌所谓的安卓侵权使用Java提起诉讼,要求后者赔偿高达90亿美元.随后便传出谷歌因此计划将主力语言切换到苹果主导的Swift,不过这事后来没了跟进. 但谷歌在这两天的 ...
- Kotlin入门第一课:从对比Java开始
1. 介绍 今年初,甲骨文再次对谷歌所谓的安卓侵权使用Java提起诉讼,要求后者赔偿高达90亿美元.随后便传出谷歌因此计划将主力语言切换到苹果主导的Swift,不过这事后来没了跟进. 但谷歌在这两天的 ...
- Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python
Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python 1. 上传的几点要求2 1.1. 本地预览2 1.2 ...
- [Reprint]c++ 析构函数的调用
析构函数在调用默认的析构函数和用户自己覆写的析构函数的时候有点意识模糊呢.写段代码总结下 #include <iostream> using namespace std; class Bo ...
- C++中构造函数和析构函数调用的时机
今天看书忽然对这个地方有点模糊,尤其是析构函数在调用默认的析构函数和用户自己覆写的析构函数的时候有点意识模糊呢.写段代码总结下 #include <iostream> using name ...
随机推荐
- 第二节,surf特征检测关键点,实现图片拼接
初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移和合成,与图像内容无关:高级图像拼接也叫做基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接全景图. 实现步骤: 1.采 ...
- Python学习-环境搭建(IronPython)
一.IDE环境 VS2013 下安装 PTVS 2.2.2 VS 2013 VS2015 已经集成了Python的开发环境 二.安装 IronPython 下载地址:http://ironpytho ...
- Linux今日疑问
问题一:who -r没有反应 ========== 首先我查询了运行等级的含义. 0: 关机 1: 单用户 2: 无网络的多用户 3: 命令行模式 4: 未用 5: GUI(图形桌面 模式) 6 : ...
- Pytorch之验证码识别
本文主要实现了两个工作:1.验证码生成 2.Pytorch识别验证码 一. 验证码生成 方法1. 利用PIL库的ImageDraw实现绘图,此法参考博客实现: #!/usr/bin/env pyt ...
- Liunx 网络神器之抓包 --tcpdump
作者:邓聪聪 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中 ...
- HTTP协议07-通用首部字段
通用首部字段 通用首部字段是指,请求报文和响应报文双方都会使用的首部. 1)Cache-Control 通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制. 指令的参数可以多选, ...
- linux快速将磁盘额外空间扩展到某一挂载点
由于之前在创建用户时,为该用户目录分配的空间只有5G,在后续的开发,存放的东西越来越多,空间眼看就不够用了,网上查了一下,很多都是教我们将其余挂载点分配过多的空间分配到空间不足的挂载点,步骤还不算太复 ...
- ansible笔记(6):常用模块之命令类模块
ansible笔记():常用模块之命令类模块 command模块 command模块可以帮助我们在远程主机上执行命令 注意:使用command模块在远程主机中执行命令时,不会经过远程主机的shell处 ...
- 压缩JS的eclipse插件
主页:http://jscompressor.oncereply.me/ Update site: http://jscompressor.oncereply.me/update/
- Docker入门 - 006 Docker 多种数据库的安装
Docker 安装 MySQL 查找Docker Hub上的mysql镜像 root@VM_16_14_centos ~# docker search mysql INDEX NAME DESCRIP ...