Java概述

Java是Sun Stanford Universiy Network 斯坦福大学网络公司1995推出。

Java语言的三种架构:

J2EE企业版 Java 2 Platform Enterprise Edition    用于WEB应用开发

J2SE标准版 Java 2 Plaftorm Standard Edition   用于桌面应用开发

J2ME小型版 Java 2 Platform Micro Edition      用于小型嵌入式设备等开发

JRE Java Runtime Environm Ent  Java运行环境

包括Java虚拟机JVM Java Virtual Machine和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。

JDK Java Development Kit  Java开发工具

JDK是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK就不用再安装JRE,其中的开发工具如,编译工具:Java.exe 打包工具:Jar.exe。

数据类型

  八种基本类型 boolean, byte, char, short, int, long, float, double。 类型可以在类成员位置上指定默认值,如果不指定默认值为0,而非C++中的随机值,其值全部以二进制为0的形式被初始化,引用变量为null。

  java中舍去了无符号修饰符unsigned所以byte的取值范围只能在127到-128之间(byte代表IP地址段还要做负数转换晕倒)所有类型最大取值范围瞬间减少一半啊。

  bool被加了三个字母boolean有点不顺手。

  char2个字节,这点挺爽的不用再折腾恶心的字符集了,告别_T _W。

  基本类型之间转换内存排列顺序一样的可以从bit少的类型直接转为bit多的类型。如byte char short int 转向long,float转向double。

  java中将boolean内置为一个特殊的字符串,并非C++中非0为真,0为假的位设定,所以boolean不可以与任何类型之间做转换,这点挺不好的。

  不同类型之间运算会自动提升为其中字节占位最高的类型,就是short num = 1;num = num + 1;都不行因为 num + 1 结果会自动提升为int 再赋值给short时jvm不给通过。须要num = (short)(num + 1)有点烦。好在++ -- += -= 之类的可以用。

  所有记录对象的均为引用类型,三种引用类型分别是,类,接口和数组。java中的引用非C++引用,引用不再是常量指针,指向是可以被修改的。java中无法进行传址操作,引用被传递进函数后为其复本。

  class本身,以及java中的interface类型,还有void在java中也被看做是一个类型。一个数组也是以对象的形势出现的。

基本语法

  有必要提一下的就是break与continue可以在java中直接跳到外层循环,方法为外循环前面制定标记符,如:

     mark:for (int i = 0; i < args.length; i++) {
for (int j = 0; j < args.length; j++) {
if (condition) {
break mark;//condition条件一但满足直接跳出外层循环
}
}
}

  switchr的条件值默认为int所以能够自动提供为int的类型都可做为判断条件,如long double不可直接提升为int所以不能做为判断条件。

  final代替了const用法上也有差异,可以写在class前类不被继承,写在函数返回类型前函数不可被子类覆盖,写在引用类型前,该引用指向不可变,但指向的对象内容可以变,也就是说不再存在C++中的指向变量的常指针。C++中的修饰函数体后确保函数内不可改变成员变量的特性被剔除。

  除了保留C++中的this外多了一个super父类关键词,用法基本同C++但其为引用,而不是指针。

  java中的异常格式。try异常产生区,catch异常处理区,finally异常必定执行区。throw异常抛出作用在函数体内。throws异常抛出作用在函数名后,将函数体内产生的异常抛出到调用处。 

  package必须为程序第一行,定义文件所在包。import用于导入一个包。java中的包应该是为了解决namespace命名空间问题的。将类的划分更精细包与包之间的访问取决于类的public或是默认修饰符。

  高级for循环,Java中对数组或集合定义了一种循环的简便写法,定义一个变量每循环一次接收数组或集合中一个元素的拷贝到变量中,并将位置下移,直到数组或集合为空。这种循环在内部使用的是Iterable迭代器专用接口,而Iterable内部使用的其实还是Iterator。注意条件中的是:而不是;。虽然简化了写法,但每次都要做无谓的临时变量拷贝,得不偿失,只能用在一些特定的时刻下才值得。

     Integer[] arrs = {1,2,3,4,5};
for(Integer arr : arrs){
//这里对temp的操作不影响数组本身,除非arr是个引用类型
//那么通过该引用的复本可以改变引用指向对象的成员
}

  

  可变参数,Java在1.5版本更新后加入了函数可变参数设置,其原理只是将可变参数自动封装成一个数组类型,所以传递参数时也可以直接传递一个数组。定义如下:

 void func(int ... arr){
//在这里可以对arr操作如同操作数组一样
}

  与C++不同的是,Java中函数可变参数可以单独存在,也就是说可以只有一个可变参数,而且可以不为可变参数传递任何东西,视为传递了0个元素的数组。

  如果有其它参数,必须在可变参数左边

命名与注释命

  名规则同C++,命名规范(开始有点蛋痛...现在已经习惯了哈哈)如下:

  包名:    多单词组成时所有字节小写。

  类与接口:  多单词组成时所有单词首字母大写。

  变量名函数名:多单词组成时第一个单词字母小写后面的单词首字母大写(最蛋痛的,一个变量名num相应的函数名getNum(),一个num一个Num很容易误解为获取的不是num的值而是Num的值)

  常量名:   所有字符大写,单词以下划线分隔。

  除了C++注释处还有一个 /** 文字*/ 文档注释。主要是可以被javadoc工具提取。另外有注释类,相应的以@开头。可使用/** 文字*/为 类注释,也可为函数注释,然后使用javadoc工具生成html格式的class帮助文档。

  要生成帮助文档的类必须是public修饰

     //类区域可使用 
@author 作者 
@version   版本
//函数区域可使用
@throws 该函数抛出的异常
@param  参数名参数作用类型描述等信息
@return 返回值类型作用描述等信息

运算符

  字符串可以与任意八种基本类型相加,基本类型会自动提升为字符串,这个挺爽。如:

     String str = "abc" + 5.8;
System.out.println(str);//打印abc5.8

  位运算多了一个>>>无符号右移,也就是位移中缺位以0补,而非以原有位补。这个挺好对于位移运算方便很多

  因为Java中剔除了运算符重载和指针概念,两个对象间的逻辑比较灵活性很差。Java中使用equals方法用来比较两个对象是否相等,equals方法被定义在Object类中,因此Java中所有类均拥有该方法,覆盖该方法后,即可建立对象独有的比较过程。该方法在Object中的声明原型为 public boolean equals(Object obj)  。我觉得Object内应该再有一个compare方法是最好的,可惜没有,只有一个Comparable外部接口类,想要类具备比较性,需要实现于这个接口!

  Java中的引用类型支持 == 与 != 运算符,用C++的说法就是内置重载了的== 与 != 运算符。用指针的说法就是,左右两边是否都指向上同一块内存地址,其实就是比较两个引用的值。因为Java中屏蔽一切指针地址操作,所以无法对地址做基本运算除了== 与 !=其它运算符在引用类型上无效。

  instanceof用来比较左值对象是否属于右值类型的实例(类型包括对象的所有基类)

其它须要注意的部分

  函数没有默认参数值,有参数的函数必须接受相应参数。

  成员数据可以初始化,为对象建立时成员数据默认值。

  总结:从基本类型和语法上来看,java更严谨更快捷,但占用内存上就有点郁闷了,至今没发现有内存对齐的方法,以空间换时间吧。

Java和C++基本类型与语法的区别相关推荐

  1. Java 10:局部变量类型推断

    Java 10:局部变量类型推断 在本文中,我们将深入研究Java 10中引入的局部变量类型推断的新特性.我们将讨论使用局部变量类型推断的范围和局限性. 此功能是作为JEP(JDK增强提案)的一部分提 ...

  2. python语法与java语法的区别_Python语言与java语法的异同之处

    本文主要向大家介绍了Python语言与java语法的异同之处,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.变量 java中定义变量,int a=0;而python中为 a= ...

  3. 使用 var 关键字在 Java 中使用动态类型

    在本文中,我们将讨论 Java 10 的一项很酷的特性--在 Java 中引入 var 关键字 . 扫码关注<Java学研大本营>,加入读者群,分享更多精彩 Java 获得了 var 关键 ...

  4. Java基础篇-基本类型

    文章目录 初入JAVA 1.什么是基本类型 2.基本类型的分类.长度和默认值 3.拆箱和装箱 初入JAVA java学习都是从基本类型开始的,日常工作中基本类型也是经常用的东西.不过基本类型的知识点确 ...

  5. mysql数据库 布尔类型_MySql数据库类型bit等与JAVA中的对应类型【布尔类型怎么存】...

    用char(1):可以表示字符或者数字,但是不能直接计算同列的值.存储消耗1个字节 用tinyint:只能表示数字,可以直接计算,存储消耗2个字节 用bit: 只能表示0或1,不能计算,存储消耗小于等 ...

  6. Java中的Type类型详解

    概述 在JDK1.5之前之一原始类型.此时,所有的原始类型都通过字节码文件类Class进行抽象.Class类的一个具体对象就代表一个指定的原始类型. JDK1.5加入了泛型类,扩充了数据类型,从只有原 ...

  7. java与javaScript 语法的区别

    目录 前言 一.java和javaScript是什么?有何不同? 1.java简介 2.javaScript简介 二,语法区别 -1.语法基础 java语言基础 Js语法基础 -2.数据类型 java ...

  8. java c语言语法对比_c语言和java语法有区别吗?

    c语言和java语法有区别吗? c语言和java在语法上有区别,区别是: 1.C语言有指针,java没有指针: C语言的语法比较简单,但是它的亮点指针很容易出错,想要好好的运用指针是件很难的事情,用好 ...

  9. Java方法返回值类型归纳

    Java方法返回值类型归纳 我们再调用一个方法时,将方法体内产生的一条数据输出到方法体外使用,这条数据我们叫做返回值. 返回值类型分为两大类:第一类,无返回值类型:void.第二类,有返回值类型,返回 ...

最新文章

  1. spring boot jpa 整合
  2. Java基础-常量,变量,成员变量,局部变量
  3. 解决Visual Code安装中文插件失败问题
  4. solaris迅速查找手册
  5. 你绝对能懂的“机器学习”(一)
  6. mybatis-generator自动生成mapper
  7. html 行内超出隐藏,css如何设置文字不换行超出隐藏?
  8. 瞒不住了,难怪.NET进大厂这么难!
  9. 扎心了,程序员2017到2019经历了什么?
  10. python pandas n行求和,Python 的 Pandas 对矩阵的行进行求和
  11. python selenium 打开新窗口
  12. 【翻译】什么是最重要的机器学习技术?
  13. 如何长时间保存记忆,分享我的数据备份大法
  14. 论智能的起源、进化与未来
  15. 关于Virtual的英语含义
  16. 【RASA】NLU模块组件分析
  17. XAML C# WPF
  18. 6个大厂Offer,牛逼!
  19. 【739】单调栈应用
  20. vivado综合出现“PID not specified”问题的参考解决方法

热门文章

  1. 规则引擎Drools使用 第十二篇 Drools 的高级语法之RHS加强
  2. 高中时候的三大主科成绩如果提不上来直接影响整体成绩
  3. 【工利其器】必会工具之 Source Insight篇
  4. 【智能商业】看十年·曾鸣书院公开课:未来的商业是智能商业
  5. 最新饿了么、美团、大众点评技术面面试难点整理,看完长点心
  6. python2练习题——迭代出1~100以内8的倍数
  7. 简易切换图片效果和简易年历
  8. VB中上传下载文件到SQL数据库
  9. HDCP @HMAC-SHA256[基于mbedtls]
  10. 上海旅游班车线路一览