概要:
数据类型,关键字,常量,变量,运算符,表达式,流程控制语句,数组
数据类型
对于数据类型,java和c(c++)大部分相同
java是在c++的基础上进行编写了语言,数据类型也是对c++的简化派生
c和c++的数据类型基本相同 C++是半面向过程半面向对象的程序设计语言
所以在C的基础上多的一个类类型class(百度脑图还是很方便了),
基本数据类型:三者基本相同
java中基本数据类型特点
不同的是java中char占2个字节,C/C++中char占1个字节(其实对应java中的byte占1个字节)
C/C++采用ASCLL编码
java采用Unicode编码,java其实是支持中文变量名的,比如string 世界 = "我的世界";这样的语句是可以通过的。
C++中,某些数据占多少位,多少字节,是与机器操作系统,硬件,有关系的。
而java中,是与操作系统,硬件无关的,因为java是运行在虚拟机上的,所以数据大小都是固定的。
java中的long是固定8字节,64位;int是4字节,32位
java中多了一个字符串类型String,c++中是用字符数组与之对应,,c的构造类型入结构体,共用体都可以用类类型与其对应(对象是客观世界一类事物总称,结构体差不多吧,这是自己理解。略过!)
不同:
指针类型,我们知道在C/C++中,指针是指向内存中的地址,该地址就是存储变量的值具体可以看 JAVA里面的“指针”
其实网上说java代码健壮性的体现是java没有指针的定义(不用绞尽脑汁思考指针的代码段)
自己理解:java只是把指针给封装了,java随处可见指针--我们创建的对象或数组的变量可以看成是指向这个对象或数组的指针变量(java中我们所谓的对象引用就是指针),
String str1=new String("123"); String str2=str1;
System.out.println("str1的值:"+str1+"str2的值:"+str2);//输出--str1的值:123 str2的值:123
str1=str1+"haha";
System.out.println("str1的值:"+str1+"str2的值:"+str2);//输出--str1的值:123haha str2的值:123haha
如上面,当new一个字符串对象时,会在堆中分配内存空间并返回该对象所在内存空间的地址,str1变量指向该对象的地址,
str2=str1;将str1所指向的地址赋值给str2,str1和str2指向相同的地址空间,只要改变str1的值,str2的值也会改变
成功验证:对象的引用就是指针
ps:由上述代码可知。想要保存对象某时刻的状态用变量赋值是没有用了,变量指向的是相同内存地址,值会随程序运行过程中值的改变而改变
String str1=new String("123"); String str2=new String(str1);
保存对象状态就在堆中开辟一个新的内存区域来保存是一种方法(不知道还有没有其他方法)
结构体类型struct:这个没怎么用过,不误导了大概就是把想要的的数据类型封装好,如书有价格,名字,编号..etc!这些
声明定义变量
struct Book(也可以不指定这个名字,但不能在另外去声明结构体变量){ float price; char name[20]; int ISBN }(也可以在这里声明变量book1);
struct Book book1,book2;
book1.name//调用book1的名字
大概是这样吧
共用体类型(使用的“覆盖技术”使几个不同的变量共享同一段内存的结构)
union 共用体名{ 成员变量 。 。 。}共用体变量名。。; union Data{ int i; char ch; float f; }; union Data a,b,c;
注意:不能只引用共用体变量如print("%d",a)这是错误了必须要加共用体结构的成员变量如:a.i, a.ch ,a.f
枚举类型:
就是把一个变量所有可能的值都列出来,变量的值只限于列举出来的值的范围内。
enum Weekday{sun,mon,tue,wed,thu,fri,sat};
enum Weekday workday,weekend;
workday=mon;//正确workday=monday//错误
关键字
即保留字。具有特定含义的用做专门用途的单词,编写程序时只能按照系统规定方式使用这些保留字,
java
java中还有尚未使用的保留关键字goto和const,也不能用做标识符。这些关键字熟能生巧,多用就懂了,但有些我确实没有用过如java中native,strictfp,transient,volatile
native是java和其它语言(c/C++)的接口 略过。。。。
strictfp即 strict float point (精确浮点)
strictfp 关键字可应用于类、接口或方法。使用 strictfp 关键字声明一个方法时,该方法中所有的float和double表达式都严格遵守FP-strict的限制,符合IEEE-754规范。当对一个类或接口使用 strictfp 关键字时,该类中的所有代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算。严格约束意味着所有表达式的结果都必须是 IEEE 754 算法对操作数预期的结果,以单精度和双精度格式表示。
如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,可以用关键字strictfp.
transient
当串行化某个对象时,如果该对象的某个变量是transient,那么这个变量不会被串行化进去。也就是说,假设某个类的成员变量是transient,那么当通过
ObjectOutputStream把这个类的某个实例
保存到磁盘上时,实际上transient变量的值是不会保存的。因为当从磁盘中读出这个对象的时候,对象的该变量会没有被赋值。
详情看这篇博客java中不常见的关键字
volatile 看这个深入理解volatile关键字
标识符
用来标识变量,符号常量,函数,数组,类型等实体名字的有效字符序列称为标识符(就是一个名字,这个比较适合所有高级语言)
java中的包名,类名,接口名,方法名, 对象名,常量名,变量名等统称为标识符。
java规定:标识符必须以字母(严格区分大小写),下划线(_),美元符号($)开头,后续字符除这三类外还可以是数字及Unicode字符集中序号大于0xC0的所有符号(包括中文,日文,韩文,阿拉伯字符等),关键字不能作为标识符,关键字只能作为标识符的一部分
包名通常为小写,类名,接口名的首字母都为大写,方法名的第一个字母为小写
c++标识符也就是变量命名规则,网上说使用"匈牙利命名规则",这个有点反感,变量名=变量类型+变量的英文意思(或缩写)
float(FLOAT) 用f开头 fAvg
只能用下划线或字母开头
常量
指程序运行过程中,其值保持不变的量。
常量分为:数值常量(数值类型:整型1,0,-10,浮点型1.11 -11.1这些都是数值常量),字符常量('a','b'为字符常量),布尔常量(0或1)和符号常量
java中符号常量要使用final关键字定义,c或c++中用const定义
final/const 数据类型 常量名=值
变量
程序运行过程中,值可以改变的量,变量:变量名(其标识作用)+变量值(是计算机内存单元存放的具体内容)
变量的声明:“先声明,再使用”
运算符
按操作数个数不同可分为:单目运算符(运算符左边或右边只有一个操作数),双目运算符(运算符对两个操作数进行运算),三目运算符(我好像只记得条件运算符是三目--操作数1?操作数2:操作数3)
按功能的不同分类:算术运算符,关系运算符,逻辑运算符,位运算符,辅助运算符,条件,逗号,指针(java中没有),强制类型转换,成员运算符,指向成员运算符(->),下标运算符[],....etc
不一定必须要记住,多实践就行(好像好多啊,记不住啊!)
详细内容可以到java运算符和表达式
表达式
表达式是有运算符和操作数组成的有意义的式子(执行某种计算序列后返回值的过程)
如算数表达式a=1+1;条件表达式a>b?fn1():fn2();....
流程控制语句
这个流程控制语句改变程序的执行方式
流程控制语句有三种:顺序,选择,循环
程序默认是顺序执行,即从一个方法(函数)头开始到方法尾结束,当程序遇到选择控制语句时候这种顺序就会改变,如
if(int i=0!=0) { fn1();//如果i!=0为真则执行方法fn1(); }else{ fn2()//否则执行fn2(); }
上面的是选择控制语句的一部分,不是按照顺序方式全部执行了,a!=0这个表达式返回为false或0会执行fn2()方法,程序将不会执行fn1()这个方法可能会感觉我的这个表达是有点变扭改成(int i=0)!=0就可以了
(顺便练习下运算符优先级).选择控制语句还有switch等等
如果程序在遇到循环控制语句的时候会重复执行循环体的内容,知道不满足循环条件,或其他条件为止,比如遇到break(打断循环,或者说结束循环),continue(跳过本次循环或者说不执行这一次循环体的内容,执行下一次循环),return(与循环多少层无关。这个程序控制语句是直接结束方法,不管方法体的内容是什么,只要程序遇到这个语句就不会继续执行这个方法)。
数组
数组是有类型相同的若干数据组成的集合,其中的每一个数据称为元素,数组存储空间是连续的,是顺序存储结构,一维数组与线性表等同。
java中数组是引用类型,要经过声明,分配内存及赋值后才能使用。
C或C++中数组是派生数据类型
数组:一维数组,二维数组,多维数组。
数组的使用(改天再写日记吧)