java基础之数据类型
(一)标识符
1、概念:java对各种变量、方法和类等要素命名时使用的字符序列被称为标识符。(本质就是一个字符序列)
2、标识符命名规则:由字母、数字、下划线和美元符($)组成。(注意有美元符$是合法的)
标识符要以字母、下路线、美元符开头,对大小写敏感
(二)关键字
所有java关键字都是小写英文(注意都是小写的英文),编译器一般会把关键字用特殊方式标出(例如不同颜色等)。
(三)常量(final的使用)
1、概念:java的常量值用字符串表示,区分不同的数据类型。
例如:整型常量:123 实型常量:3.14(小数) 字符常量:'a'(用单引号) 逻辑常量:true、false 字符串常量:"helloworld"(双引号)
区分开字符常量与字符串常量。
2、final可以修饰变量,方法,类。
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类重写,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
(四)变量(一定要理解变量在内存中的存放)
1、概念:java变量是程序中最基本的存储单元,包括变量名,变量类型和作用域。(本质:就是内存中的一块区域,使用变量名来访问这块区域,因此,每个变量使用前必须先声明(申请),然后必须进行赋值(填充内容),才能使用)。
2、编译原理(底层内容):程序的执行过程
(1)程序源码存放在硬盘(exe文件或者.class文件)就是静态文件。
(2)当程序运行时,把程序编译好的代码Load到内存区,操作系统会找到程序的main方法,开始执行。
(3)执行过程中的内存管理,主要分为四部分:
code segment(存放代码)、
data segment(静态变量、字符串常量)、
stack(局部变量)、
heap(new出来的东西)
注意:栈和堆的本质:是一种数据结构。
局部变量:定义在方法,构造方法和语句块(就是在{}中定义的变量)中。当他们执行完之后,变量就销毁。
栈由编译器自动分配内存,是机器系统提供的一种数据结构,通过寄存器来存放地址,有专门的机器指令来完成数据入栈出栈,速度快,但是支持的数据类型有限(整数,指针,浮点等数据类型)。
堆内存是运行期间动态分配的,通过程序员分配并指明大小,堆是函数库提供的,通过函数来获取内存,支持的数据类型广泛。堆的内存空间不一定连续,通过哈希算法得到物理地址
3、按数据类型分:基本数据类型变量和引用数据类型变量
按声明的位置分为:局部变量(方法或者语句块内部定义的变量)和成员变量(方法外部、类的内部定义的变量)(注意:类外面不能有变量声明)
(一)成员变量
成员变量包括:类变量和实例变量
a、类变量又称为静态变量,在前面用static 修饰,独立于方法之外。
1、静态变量除了被声明为常量外很少使用。
2、静态变量在程序开始时创建,在程序结束时销毁。
3、静态变量可以通过:ClassName.VariableName的方式访问。
4、默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
b、实例变量不用static 修饰,独立于方法之外。
1、实例变量具有默认值,数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
2、实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
3、实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
当你用java关键字new一个对象时,jvm将在堆里创建对象,并在堆中开辟空间给变量(空间不一定连续),然后根据零散的堆内存地址,通过哈希算法得到“物理地址”;
(五)数据类型
java中的数据类型主要分为:基本数据类型(四类八种)和引用数据类型
1、基本数据类型(区分:内存中的大小和内存小格排列的布局)
逻辑型:boolean 文本型:char 整数型:byte、short、int、long 浮点数型:float 、double
(1)字符型(char)
字符常量:就是用单引号括起来的单个字符。
java字符采用Unicode编码(全球语言统一编码),每个字符占两个字节,因而可以使用十六进制编码形式表示(一个字节:byte等于八位:bit)即:1byte=8bit
中文编码:GBK(国标码)或者GB2312
注意:所有文字在Unicode编码中,都占两个字节。
(2)整数类型(byte、short、int、long)
注意:java各整数类型有固定的表据范围和字段长度,不受操作系统的影响,保证Java程序的移植性(与c语言区分开,c语言不同平台的字段长度不同)
十六进制:以0x或者0X开头(以零X开头)。
1、java语言的整型常量默认为int型,声明Long类型常量可以在后面加l或者L(建议添加大写的L,便于区分)。
2、整数长度:注意java的整数类型是有符号的,其中一位是符号位(0为正,1为负),2的7次方是128
其中,byte常量进行运算时,系统会默认先转化为int类型,再进行运算,然后在转化为byte,超出范围就会截取低八位(不会报错)。浮点型操作与之不同,因为有小数点(会报错)。
(3)浮点类型
与整数类型类似,有固定表数范围和字段长度,不受平台影响。
1、java浮点型常量默认是double类型,声明float常量,需要在数字后加f或者F。(浮点数在计算机中存在误差,理论是连续的,在计算机中表示是离散的。float是7位,double是15位)
(六)基础数据类型转换
1、boolean类型不能转换为其他的数据类型。
2、容量小的类型自动转换为容量大的数据类型,容量大到容量小转换时,要进行强制转换,可能会造成精度降低或者溢出。
byte、short、char ——》int——》long——》float——》double
double强制转换为float时,会发生溢出。
其中byte、short、char之间不会互相转换,三者在运算时,会先转换为int类型。
3、多种类型的数据混合运算时,系统首先自动的将所有数据转换为容量最大的那种,再进行运算。
4、实型常量默认为double,整数常量默认为int。
(七)运算符
java支持的运算符
1、算数运算符:+ - * / % ++ --
2、关系运算符:== != > >= < <=
3、逻辑运算符:&&(短路与) ||(短路或) ! ^(异或:不同为真) & |
注意:短路与和短路或只要第一个条件满足,第二个条件就不用比较了。和与 ,或区分开,与和或两边的条件都需要比较。
4、位运算符:& | ~ ^ >> << >>>
5、字符串连接符:+
注意:加号两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串,然后在进行连接。
进行打印时,无论任何类型,都自动转为字符串进行打印。
(八)表达式(运算符和操作数的序列)
1、对表达式中操作数进行运算得到的结果称为表达式的值
2、表达式值的数据类型即为表达式的类型。
(九)语句
有三种结构:顺序结构,条件结构,循环结构。
1、if语句
注意:只有一句需要执行的语句时,可以省略大括号{}。建议不要省略,避免出错。
2、循环语句
for循环,while循环,do while循环
(一)for语句中三个表达式都可以省略。
(二)do { 语句;} while(逻辑表达式); 注意:后面有一个分号
3、switch—case语句
switch(A),括号中A的取值只能是整型或者可以转换为整型的数值类型,比如byte、short、int、char、还有枚举;
从 Java SE 7 开始,switch 支持字符串类型了,同时 case 标签必须为字符串常量或字面量。
需要强调的是:long和String类型是不能作用在switch语句上的。
(一)case后面必须跟常量,必须要常量,如果是一个表达式或者变量,那么就要加上单引号
(二)case具有穿透性,需要结合break语句,多个case语句可以合并。
(三)default可以省略,但不推荐省略
一般形式:
switch(表达式){
case 常量表达式1: 语句1;case 常量表达式2: 语句2;
…
case 常量表达式n: 语句n;
default: 语句n+1;
}
(十)break和continue语句与return语句
return语句:第一、返回一个指定数据给主调函数;第二、结束当前函数的执行
如果符合某个条件要退出的话,可以用return返回,否则可以不写这句代码的,当程序执行到“}”时会自动返回。
return不是必须要返回一个值。
void func(void)
{
......
return;
}
(十一)方法
java中的方法类似于c语言中的函数。方法的本质就是:一段完成特定功能的代码片段。(目的:提高程序的复用性,以便可以重复使用)
java进行函数调用,传递参数时,遵循值传递的原则:
基本类型传递的是该数据本身。引用类型传递的是对象的引用,而不是对象本身。
(十一)程序格式
1、大括号对齐
2、遇到 { 缩进,TAB(缩进)|shift +tab 前进
3、程序块之间加空行(美观为主)
4、并排语句之间加空格
5、运算符两侧加空格
6、{ 前面有空格
7、成对编程