与c++不同,java是纯面向对象的编程语言,java中的所有内容都包含在类中,包括数据成员和业务逻辑。而c++是支持面向对象的语言,c++即包括面向过程的特点,也支持面向对象的特点。在java中,类是最基础的元素。
Java源代码文件以.java作为后缀,文件名与文件中的public类相同,一个java源文件中只能有一个public类,可以有多个非public类,只有public类才可以被程序的其他部分访问,非public类无法被非同一文件下的程序访问。.java文件被编译器编译后生成字节码文件,以.class作为后缀,执行时jvm调用解释器来执行字节码文件。Java应用程序都应该有main方法。在java中,函数被称为方法而不是函数。Java中所有的方法都应该属于某个类。Java程序没有返回值,当程序正常退出是返回值为0,如果想要返回其他值需要调用System.exit方法。Java同c++一样使用花括号“{”和“}”来分割块。
Java中的基本数据类型
Java是一种强类型语言,所谓强类型语言是指一个变量必须在声明时指定类型,一经确定类型,除非强制类型转换,否则变量的类型不变。(即使是强制类型转换,也只是转换到另一个变量,本身类型并不改变。)java中有8种基本的数据类型,分别是4种整型,2种浮点型,1中表示unicode字符编码的字符型char和1种表示真值的boolean型。
整型:表示没有小数部分的数值,可以表示负数。
int型:4字节;short型:2字节;long型:8字节 ;byte型:1字节,其中int型最常用,short型和byte型用于特殊的领域,比如底层的文件处理或者需要控制占用存储空间量的大数据组。Java中基本数据类型大小相同,与机器无关。同时java中没有无符号类型。
Ps:与c/c++相比,java中的整型统一,而c/c++中整型的大小与平台相关。
浮点型:表示有小数部分的数值,包括正负数。
浮点数有两种类型,float和double类型。其中float为4字节,表示6~7位有效数字。double类型为8字节,表示15位有效数字。默认的浮点数类型为double,需要指明为float时需要在浮点数后加F。由于二进制系统无法精确表示1/10,因此浮点数计算有时不太精确,java中提供了BigDecimal类来处理不允许舍入误差的情况。
char型:用于表示单个字符,通常用来表示字符常量,如’A’。
java中的char表示unicode字符,char还有另一种表示方式,即u0000~uffff。u后表示字符的unicode字符编码。
boolean类型:有两个值false和true,用来判断逻辑条件,java中整型值和布尔值不能互相转换。
Java中的变量
Java变量属于某个类型,声明变量需要指定类型。Java变量名是字母和数字组成的序列,以字母开头。Java中,字母的范围比较大,不只包括大小写字母,还包括‘_’,’$’等,数字也不仅包括0~9,也包括其他语言中表示数字的符号。(使用unicode编码的特点。)
Java变量声明后需要显示初始化,使用未经初始化的变量是错误的。可以在一行中同时声明和初始化变量。(在c++中区分变量的声明和定义,int i=10为定义,extern int i为声明。Java中不区分。)
Java中的常量
Java中的常量使用final声明,常量在声明时初始化,一经初始化就不可以改变。Java中保留了const 关键字,但是没有使用。
Java运算符
自增与自减运算符:在表达式中,前缀和后缀自增(减)返回值不同,前缀返回改变后的数值,后缀返回改变前的值。
逻辑运算符:逻辑与“&&”,逻辑或“||”,逻辑非“!”。逻辑与/或实现短路运算,类似于c++。
三元运算符:?::
位运算符:
在处理整型数值时,可以直接对组成整型数值的各个位进行操作。位运算符包括‘&’,‘|’,‘~’,‘^’,分别是与,或,非,异或。作用于位模式下。
利用2的幂次方的&运算可以屏蔽其他位,只保留特定的位,屏蔽技术。位与位或与逻辑与逻辑或非常相似,但是不按照短路方式。&,|作用于布尔值得到的结果也是布尔值。
移位操作符,<<和>>,位模式左移和右移,左移动几位与右移动几位,>>>使用0来填充高位,>>使用符号位来填充高位。没有<<<。
数值类型之间的转换:
在程序运行时,有时需要进行数据类型之间的转换。合法的数值转换基本是小的数值类型向大的数值类型进行转换。但是也有可能损失精度。主要是int型向float转换,long向float或者double转换时有可能出现精度损失。合法的数值转换原则为:当两个操作数有double时向double转换,有float向float转换,有long向long转换,要是都没有,则都向int转换。
强制类型转换,有时需要强制类型转换,当大的数值向小的数值转换时,很有可能会截断大的数值。另外不能将boolean类型转换为其他数值型,会出错。如果确实需要,可以b?1:0;
运算符与优先级
括号可以超越运算符的优先级。没有括号的情况下,按照给出的运算符的优先级次序进行计算。同一级别的运算符按照从左到右的次序进行运算,如果是右结合运算符则从右向左进行运算。
枚举类型
枚举包括有限个命名的值,如:
enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};
Size s=Size.MEDIUM;
Size类型只能存储这个类型声明中给定的枚举值,或者null值。null表示这个变量没有设置任何值。