hello 大家好,计算机语言各有不同,但本质上都是操作内存和计算。这章的内容是介绍Java中的基本概念展开,包括:标识符,关键字,Java基本数据类型,运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用。这些是Java运行的基础,就像我们人体内的筋骨,肌肉,血管一样。
1、标识符
Java语言中,对于变量,常量,函数,语句块也有名字,我们统统称之为Java标识符,只要可以自己起名字的,都是标识符。
作用:标识符用来给类、对象、方法、变量、接口和自定义数据类型命名。
Java标识符由数字,字母和下划线(_),美元符号($)或人民币符号(¥)组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字不能当作Java标识符。
命名约定:
1)类和接口名。每个字的首字母大写,含有大小写。例如,MyClass,HelloWorld,Time等。
2)方法名。首字符小写,其余的首字母大写,含大小写。尽量少用下划线。例如,myName,setTime等。这种命名方法叫做驼峰式命名。
3)常量名。基本数据类型的常量名使用全部大写字母,字与字之间用下划线分隔。对象常量可大小混写。例如,SIZE_NAME。
4)变量名。可大小写混写,首字符小写,字间分隔符用字的首字母大写。不用下划线,少用美元符号。给变量命名是尽量做到见名知义。
2、关键字
Java关键字是电脑语言里事先定义的,有特别意义的标识符,用做专门用途,有时又叫保留字。Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。
作用:关键字是编译器和程序员的一个约定,程序员利用关键字来告诉编译器其声明的变量类型、类、方法特征等信息。
所有的关键字都是小写。
Java共定义了下面的关键字:
goto |
||||
long |
native |
还有些关键字没有具体含义,比如goto,const,
3、常量
使用 final关键字修饰,表示变量只能被赋值一次,一旦被赋值不能被改变,习惯上变量名使用大写。
我们在项目中,会使用类常量,用static修饰,使一个常量可以被类中的多个方法使用。或者再使用public修饰此时,可以被工程的其他类使用。
4、变量
变量是程序中基本的存储单元。其实变量代表内存中一小块区域,不同类型的变量在内存中占不同的长度,通过变量名来访问这块区域。所以变量在使用时,要先声明,再赋值,才能使用。
格式:类型 变量名 = 值;
从内存的角度分析:在程序执行时,将执行的代码加载到内存中,操作系统找到代码的main方法后开始执行。内存分为4块存取,存储变量和运行时产生的数据:
code segment:存放代码;
data segment:存放静态变量,字符串常量;
stack:存放变量;
heep:存放new出来的对象;
放一张马老师总结的图:
变量有哪些类型呢?
1)按被声明的位置划分:局部变量,成员变量;
局部变量:方法,或语句块中声明的变量;
成员变量:方法外部,类的内部声明的变量;
2)按所属数据类型分为:基本数据类型,引用数据类型;
基本数据类型:4类8种;
数据类型 | 说明 |
逻辑型: boolean |
用于逻辑运算,程序判断。只能取值:true或false |
文本型: char |
表示通常意义上的字符; 字符常量,是用单引号括起来的单个字符,如'a','字'; Java字符,可以使用转义字符'\',将其后面的字符转变为其他的含义。利如: char c2='\n'; |
类型之间的转换:
1.boolean不能转换为其他数据类型;
2.整数,字符型,浮点型间转换,需要遵循以下原则:
1)容量小的自动转成容量大的,是自动转换,程序员无感知;
2)容量大的转成容量小的,需要强转;可能损失精度或溢出,是强制转换,显式,需要声明类型。
3)多种类型数据混合计算时,系统首先将数据转成最大的类型,再进行计算。
数据类型,按容量大小排序:byte,short,char—>int—>long—>float—>double
byte,short,char之间不能互相转换,需要时,要先转成int,再运算。
强制转换中,哪些场景可能引起精度损失或溢出?
1)整数之间转换,超过目标类型表数范围,对目标表数范围取余;
2)浮点数转整数,会发生截尾,把小数点后面截掉。同样此时的整数超过目标类型表数范围,也会对目标表数范围取余。
// 1.自动转换和强转 int a = 129; int a1 = -200; // 自动转换:1.23默认double类型,a自动转为double类型参与运算; double c = a * 1.23; // 强转:double类型需要强转到float类型 float e = (float) (a * 1.23); // 2.溢出和精度损失 byte b = (byte) a; //byte能接收范围是: 负128 .正127 System.out.println("b = " + b);//b = -127 结果错误 int f = (int) 158.23; System.out.println("f = " + f); // f = 158 精度损失;直接舍弃小数,不是四舍五入 // 3.声明一个float类型的变量 float h = 1.23f; // 4.如果不加f,1.23是double类型,需要强转为float类型 float j = (float) 1.23; // 5.int 类型转换成long long i = 123; // 6.声明一个long类型的变量 long k = 123l;