本文仅以记录 Java 与 C++ 不同之处,以备随时查询。

Java 程序运行机制

  Java 是一门编译解释型的语言,即它在运行的过程中既需要编译也需要解释。如下图表示的是 Java 程序运行机制:

  

  上图中,*.java 是用 Java 程序设计语言编写的源程序,通过 javac 命令编译成 *.class 文件,在操作系统之上是由 Java 虚拟机来运行以 .class 为结尾的文件。这里的 class 文件在 Java 中称之为可执行类文件;或者对于虚拟机而言其实就是字节码文件,也就是0、1代码,即计算机能够直接读懂的二进制代码。

main 函数

  对于 Java 程序而言,(跟 C++ 一样)也是从 main 函数开始执行,不过有很大不同。以一个例子来说明:

 public class HelloWorld{

     public static void main(String[] args) {
System.out.println("Hello World!");
} }

  该程序的执行要 Java 虚拟机来调用执行,即由 Java 虚拟机调用 HelloWorld 类中的 main 函数。作为对外接口,类 HelloWorld 是要声明为 public (一个 Java 源文件最多只能有一个声明为 public 的类,而该类就作为该源文件对外的接口。而在该源文件中的其他类则不能被其他源文件的类调用,只能被同一源文件的类调用。);因为 Java 虚拟机要调用,所以 main 函数要声明为 public;另外,Java 虚拟机在执行 main 函数的时候不必创建对象(即通过 HelloWorld.main(args) 调用),所以该方法必须是 static 的。

  这跟 C++ 在程序在编译链接成可执行文件后,由操作系统加载并最后将程序指针指向 main 函数是完全不一样的。

数据类型

  在 Java 中,

  1. 除了 boolean,其他基础类型都是有符号的,不存在无符号的基础数据类型;

  2. 数据存储顺序默认是小端,这跟 C++ 默认是大端的不同;

  2. char 是两个字节大小的;

  3. float 变量初始化时,数值最后要加 f。

一些关键字

static

  在 Java 中,(static 同样可以修饰 成员变量和成员函数)跟 C++ 不一样的是可以修饰静态代码块,如下例:

 class Person{
public Person(){
System.out.println("Constructor");
}
static {
System.out.println("Static");
}
private String name;
private int age;
} public class Main { public static void main(String[] args) {
new Person();
} }

  上例中 static 静态代码块会优先与构造函数执行。这种代码块可以用来初始化。

final

  在 Java 中,final 关键字有如下作用:

  1. final 标记的类不能被继承(C++ 通过将构造函数或析构函数设为私有来达到);

  2. final 标记的方法不能被覆写;

  3. final 标记的变量(成员变量或局部变量)即为常量,只能赋值一次。

权限

  类中的成员变量或成员函数默认是 public 的(C++ 是 private 的);

  类继承默认也是 public 继承(实际只有 public 继承,不像 C++ 中还有 private、protected 继承)。

继承

接口

参考资料

  《Java 程序设计教程(入门篇)》 徐翠娟等编。

Java 与 C++ 不一样的地方(持续更新中...)的更多相关文章

  1. Java的一些良好习惯及细节------持续更新中...

    1.在做条件判断时,不要将变量放在判断符的左边,这样做可以防止出现空指针异常,以字符串比较为例: String name = "Tom"; //这种方式不推荐,如果变量name为空 ...

  2. java数据结构——递归(Recursion)例题持续更新中

    继续学习数据结构递归,什么是递归呢?字面理解就是先递出去,然后回归,递归核心思想就是直接或间接调用本身,好比从前有座山,山里有位老和尚,在给小和尚讲故事,讲的是从前有座山,山里有位老和尚,在给小和尚讲 ...

  3. java视频教程 Java自学视频整理(持续更新中...)

    视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...

  4. HBase常见问题答疑解惑【持续更新中】

    HBase常见问题答疑解惑[持续更新中] 本文对HBase开发及使用过程中遇到过的常见问题进行梳理总结,希望能解答新加入的HBaser们的一些疑惑. 1. HTable线程安全吗? HTable不是线 ...

  5. 中国.NET:各地微软技术俱乐部汇总(持续更新中...)

    中国.NET:各地微软技术俱乐部汇总(持续更新中...)   本文是转载文,源地址: https://www.cnblogs.com/panchun/p/JLBList.html by ​史记微软. ...

  6. fastadmin 后台管理框架使用技巧(持续更新中)

    fastadmin 后台管理框架使用技巧(持续更新中) FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架,具体介绍,请查看文档,文档地址为:https://doc. ...

  7. 前端深入之js篇丨Array数组操作从入门到成神Up Up Up,持续更新中

    写在前面 随着前端深入的不断学习,发现数组这个数据结构在前端中有着相当大的存在感,由于我初学前端的时候并没有系统性的学习数组,所以我将通过这篇文章同你一起学习数组,希望我们能一起进步,学会熟练操作数组 ...

  8. IDEA 2019.2破解激活教程(激活到2089年8月,亲测有效,持续更新中...)

    本来笔者这边是有个正版激活码可以使用的,但是,2019.9月3号的时候,一些小伙伴反映这个注册码已经失效了,于是拿着自己的 IDEA, 赶快测试了一下,果不其然,已然是不能用了. 好在,笔者又找到了新 ...

  9. IntelliJ IDEA 2019.2.1 破解教程, 最新激活码(激活到2089年8月,亲测有效,持续更新中...)

    当前最新版本 IDEA 2019.2.1 本来笔者这边是有个正版激活码可以使用的,但是,2019.9月3号的时候,一些小伙伴反映这个注册码已经失效了,于是拿着自己的 IDEA, 赶快测试了一下,果不其 ...

  10. 史上最全的spark面试题——持续更新中

    史上最全的spark面试题——持续更新中 2018年09月09日 16:34:10 为了九亿少女的期待 阅读数 13696更多 分类专栏: Spark 面试题   版权声明:本文为博主原创文章,遵循C ...

随机推荐

  1. R语言集合操作

    熟练运用R语言的集合操作在很多时候可以省去for循环,从而提升数据处理效率.废话不多说,集合操作相对简单,贴一段代码就懂了! > A<-: > A [] > B<-,,) ...

  2. 代理delegate

    1>代理的用处是什么? 监听那些不能通过addTarget监听的事件 主要用开负责在两个对象之间,发生某些事件时,传递或发送消息 当我们需要 监听某些事件时,但苹果没有提供相关监听方法(addt ...

  3. android ActionBarActivity设置全屏无标题

    新建的Activity继承自ActionBarActivity,设置全屏无标题本来很简单的事,但是没想到app竟然无缘无故的挂,要么就是白屏一片,要么就是黑屏.坑了我一个多小时!!! 原因是Actio ...

  4. Dynamics CRM 构建IN查询

    CRM中有3种查询数据的方式,分别是QueryExpression.fetchxml.linq,本篇讲述的条件IN的查询只支持前两种,linq并不支持. QueryExpression的写法如下,示例 ...

  5. 新浪微博Oauth2.0授权认证及SDK、API的使用(Android)

    ---------------------------------------------------------------------------------------------- [版权申明 ...

  6. 对于给定的整数集合S,求出最大的d,使得a+b+c=d。

    对于给定的整数集合S,求出最大的d,使得a+b+c=d.a,b,c,d互不相同,且都属于S.集合的元素个数小于等于2000个,元素的取值范围在[-2^28,2^28 - 1],假定可用内存空间为100 ...

  7. Spark技术内幕:Shuffle Map Task运算结果的处理

    Shuffle Map Task运算结果的处理 这个结果的处理,分为两部分,一个是在Executor端是如何直接处理Task的结果的:还有就是Driver端,如果在接到Task运行结束的消息时,如何对 ...

  8. 18 UI美化transition 图片过渡

    让两张图片在一定时间过渡 在工程文件res/drawable/transition文件 <?xml version="1.0" encoding="utf-8&qu ...

  9. (一二三)基于GCD的dispatch_once实现单例设计

    要实现单例,关键是要保证类的alloc和init只被调用一次,并且被自身强引用防止释放. 近日读唐巧先生的<iOS开发进阶>,受益匪浅,通过GCD实现单例就是收获之一,下面把这个方法与大家 ...

  10. 皮尔森相似度计算举例(R语言)

    整理了一下最近对协同过滤推荐算法中的皮尔森相似度计算,顺带学习了下R语言的简单使用,也复习了概率统计知识. 一.概率论和统计学概念复习 1)期望值(Expected Value) 因为这里每个数都是等 ...