我这些学习笔记,记录的都是我自己认为的知识点,可能以后再看的时候还要翻书,但是可以用来定位到准确的书中示例的位置,减少翻书重找的时间,利于自身知识体系的搭建。 self-transcendence
第3章 java语言基础
3.1 java主类结构
java是面向对象的程序设计语言
java程序的基本组单位成是类
类是有属性和方法构成,每一个应用程序都必须有一个main方法,含有main方法的类成为主类。
3.1.1 包声明
java程序由若干个类组成,package是声明包的关键字
3.1.2 全局变量和局部变量
全局变量声明在类中,局部变量声明在方法中
3.1.3 编写主方法
main是类中的主方法,public static void分别是权限修饰符,静态修饰符,和返回值修饰符。
main方法必须声明为public static void。
main方法是程序开始执行的位置。
3.1.4 导入api类库
通过import关键字导入相关的类。jdk的api中提供了130多个包,其中主要包括类的继承结构,类的应用,成员变量表,构造方法表等
3.2 基本数据类型
(数值型)整数类型byte、short、int、long
(数值型)浮点类型float、double
字符型char
布尔型boolean
3.2.1 整数类型
没有小数部分的数值,正负数都可以,有3种表现形式
十进制:不能以0作为开头(0除外),例子120、0、-127
八进制:必须以0开头,例子0123(十进制为83)、-0123(十进制为-083)
十六进制:必须以0X或0x开头,例子0x25(十进制为37)、0Xb01e(十进制为45086)
数据类型 |
内存空间(8位等于1字节) |
取值范围 |
byte |
8位 |
-128-127 长度3 |
short |
16位 |
-32768-32767 长度5 |
int |
32位 |
-2147483648-2147483647长度10 |
Long |
64位 |
长度为19 |
long型值,要在末尾处+L或l。例如:long num=2147483650L。
所有的整型不用进行类型转换可以直接相加。
3.2.2 浮点类型
数据类型 |
内存空间(8位等于1字节) |
取值范围 |
Float |
32位 |
1.4E-45~3.4028235E38 |
double |
64位 |
4.9E-324~1.7976931348623157E308 |
float型值,要在末尾处+F或f。例如:float f1=13.23f
3.2.3 字符类型
数据类型 |
内存空间(8位等于1字节) |
Char |
16位 |
char用单引号表示,例如:‘s’,但是“s”就是字符串
声明字符型变量char x=‘a’;char x=97;是一样的。
因为java语言把字符当做整数对待。在unicode编码中采用无符号编码,可以存储65536个字符(0x0000~0xffff),所以java中的字符可以处理所有国家的语言文字,若想得到一个0-65536之间的数所代表的unicode表中相应位置上的字符,也必须使用char型显示转换。
例如,int i=200;我们取unicode上面的200位的字符就是,(char)i就可以。
3.2.4 布尔类型
boolean只有true和false
3.3 变量与常量
程序执行过程中,不能被改变的量成为常量,常量和变量都必须使用合法的标识符。
3.3.1 标识符和关键字
1.标识符
用来标识类名、变量名、方法名、数组名、文件名的有效字符序列
java使用unicode标识字符集,最多可以标识65535个字符,因此,java语言中的字母不仅包括通常的拉丁文字a、b、c等,还包括汉字、日文以及其他许多语言中的文字
2.关键字
java中已经被赋予特定意义的一些单词,不可以把这些字作为标识符来使用。
3.3.2 声明变量
定义变量是为了告诉编译器(compiler)这个变量的数据类型,让编译器分配空间,以及它能存放什么样的数据。在程序运行过程中,空间内的值是变化的,这个内存空间就成为变量。为了便于操作,给这个空间起个名字,就叫做变量名,内存空间的值就是变量值。
系统的内存大略分为3个区域:
系统区(OS):。
程序区(Program):当程序执行时,程序代码会加载到内存中的程序区。
数据区(Data):数据暂时存储在数据区。
假设有int age;char char1=‘r’;这样的代码
当程序运行的时候,程序加载到程序区中,执行到上面两行代码时,会在数据区配置空间给出这两个变量。
3.3.3 声明常量
程序运行过程中一直不会改变的值称为常量(constant),通常也被称为“final变量”。常量在整个程序中只能被赋值一次。final是常量的关键字。
3.3.4 变量的有效范围
定义的变量暂存在内存中,等到程序执行到某一个点,该变量会被释放掉,即变量的生命周期。
变量的有效范围是指代码能够访问该变量的区域,若超出该区域,则在编译时会出现错误。在程序中,一般会根据变量的“有效范围”将变量分为“全局变量”和“局部变量”。
1.全局变量
类中定义的变量被称为全局变量(成员变量)。全局变量又可分为静态变量和实例变量。
在全局变量的前面加上static关键字,就是静态变量。静态变量的有效范围可以跨类,甚至可以达到整个应用程序之内,对于静态变量,除了能在定义它的类中使用,还可以用“类名.静态变量”的方式在其他类中使用。
2.局部变量
局部变量的生命周期:当方法被调用,java虚拟机为方法中的变量分配内存空间,当方法的调用结束后,释放方法中变量占用的内存空间。
局部变量可以跟全局变量名称相同,此时全局变量在这个方法中暂时失效。
3.4 运算符
赋值运算符、算术运算符、比较运算符
3.4.1 赋值运算符(=)
是二元运算符(对两个操作数做处理),做处理会先取得右方表达式的结果,因此当一个表达式中有两个以上的“=”,会从最右边开始计算。
3.4.2 算术运算符(+ - * / %)
运算符 |
说明 |
实例 |
结果 |
+ |
加 |
12.45f+15 |
27.45 |
- |
减 |
4.56-0.16 |
4.4 |
* |
乘 |
5L*12.45f |
62.25 |
/ |
除 |
7/2 |
3 |
% |
取余数 |
12%10 |
2 |
3.4.3 自增和自减运算符(++ --)
自增、自减是单目运算符。操作元必须是一个数值型变量。自增自减是让变量的值增1或减1。放在操作之前,先计算后运行;放在操作元之后,先运行后计算。b=++a;b=a++。
3.4.4 比较运算符(< > == >= <= !=)
属于二元运算符,比较运算符得到的结果是boolean值。
运算符 |
作用 |
举例 |
操作数据 |
结果 |
> |
大于 |
‘a’>‘b’ |
整型,浮点型,字符型 |
False |
< |
小于 |
156 < 255 |
整型,浮点型,字符型 |
True |
== |
等于 |
‘c’==’c’ |
基本数据类型,引用型 |
True |
>= |
大于等于 |
1244>=111 |
整型,浮点型,字符型 |
True |
<= |
小于等于 |
12.45<=45.5 |
整型,浮点型,字符型 |
True |
!= |
不等于 |
1!=2 |
基本数据类型,引用型 |
True |
3.4.5 逻辑运算符(&& || !)
逻辑运算符的操作员必须是boolean型,只有!是一元运算符,其他都是二元运算符
&&和&都是逻辑与,区别在于,&&会在计算出一个表达式为false之后结束;&会把所有的表达式都计算出来。&&类似的做法被称为“短路”。类似&称为“非短路”
3.4.6 位运算符
---------------------------------------------------------------------------------------------------------
3.4.7 三元运算符
表达式?值1:值2 表达式结果为true取1,结果为false取2
3.4.8 运算符优先级
如果两个运算有相同的优先级,那么左边的表达式比右边的表达式先处理。
3.5 数据类型转换
从低精度向高精度转换,永远不会溢出,不会失败;
从高精度向低精度转换,必然会有丢失,可能失败。
数据类型转换有两种形式,即隐式转换(自动转换)与显示转换(强制转换)。
3.5.1 隐式类型转换
不包括逻辑类型和字符类型的精度顺序:
byte < short < int < long < float < double
理解技巧:源和目标是大小不同的两个方块,类型转换的过程,就是给这个方块加面积和减面积。
3.5.2 显式类型转换(强制类型转换)
除了boolean类型以外的其他基本数据类型的转换使用强制转换都可以达到。
当给一个byte、short、int、long赋值时,如果值大于类型的取值范围,就必须强制转换,例如:byte b =(byte)129;
3.6 代码注释和编码规范
单行注释//
多行注释/* */
文档注释/** */,文档注释可以被javadoc文档工具读取为javadoc文档内容。
程序中注释要占用代码总量的20%~50%。
每条语句要单独占一行,一行命令要以分号结束。
声明变量单独占一行。