学习编程语言必会的基础
写前聊一聊
《Java基础——初体验生存向解说》系列文章主要参考文献是《Java 2实用教程》,是博主的本科教材,使用感尚可,有需要的宝贝可以买来阅读。
因博主的个人习惯,IDE工具使用的是eclipse。
距离上一次碰Java语言,已经是整整一年了,很多基础知识博主都记得很模糊,如果有什么误人子弟的地方,欢迎大家指正。
前情回顾
在前文中,主要介绍Java语言的面向对象特性以及平台无关性。
相信宝贝们已经搭建好了实验平台,并跑了第一段代码。
你们真是太棒啦~
博主在系统学习Java语言之前,已经有了C语言的基础,包括在后期自学Python时,都包含本章内容将会介绍的东西。
可以说接下来你们将看到的,会是所有编程语言的基础。
那我们开始吧~(敲黑板)
基本数据类型
在Java语言中,基本数据类型共有8种,分别是boolean、byte、short、char、int、long、float、double,以上8种可被分为4大类。
(1)逻辑类型
boolean
常量:true,false
变量:使用关键字boolean声明逻辑变量
boolean beauty = true, beast;
(2)整数类型
int
常量:123,077(8进制),0x3ABC(16进制)
如果前缀加0为8进制、如果前缀加0x为16进制
变量:使用关键字int声明
内存:4个字节
取值范围:-231~231-1
int x = 12;
byte
变量:使用关键字byte声明
内存:1个字节
取值范围:-27~27-1
byte x = -12;
short
变量:使用关键字short声明
内存:2个字节
取值范围:-215~215-1
short x = 12;
long
常量:123L,077L(8进制),0x3ABCL(16进制)
相当于int型后面加上大写L
变量:使用关键字long声明
内存:8个字节
取值范围:-263~263-1
long x = 12L;
(3)字符类型
char
常量:单引号括起的Unicode表中的字符
变量:使用关键字char声明
内存:2个字节
取值范围:0~65535
char x = 'a';
注:有些字符不能通过键盘输入,需要使用转义字符,如:\n(换行)等。
(4)浮点型
float
单精度,后缀 f 不可省略
常量:123.4f
变量:使用关键字float声明
内存:4个字节
float x = 123.4f;
double
双精度,后缀 d 可省略
常量:123456.78d
变量:使用关键字double声明
内存:8个字节
double y = 123456.78;
在上述内容中,出现了常量与变量的概念。
常量意如其名,是永远不会变的量。比如一个整型12,它永远都会是12,12永远都不能变成13。变量也意如其名,是是不是会变的量。比如声明一个整型x,它可以被赋值为12,也可以被更改为13。那如果这时候我要把整型12变为浮点型12.0该怎么办呢?
以上几种基本数据类型(除去boolean类型)是有一个级别高低的,如果按从高到低的顺序排列:
double float long int char short byte //从高到低
当把级别低的变量的值给级别高的变量时(从右向左),会自动完成数据类型的转换,称为隐式转换。
float x = 12; //输出值为12.0
当把级别高的变量的值给级别低的变量时(从左向右),需要强制数据类型转换,称为显式转换。
int x = (int)12.97; //输出值为12
上述概念很好理解,帅哥可以被定义为男人,而男人不可能全都是帅哥,需要强制包装一下,比如给他八块腹肌。但是如果有了八块腹肌,就会失去保护腹肌用的脂肪,因此强制类型转换会导致精度的消失,姐妹们,使用需慎重。
然后问题就来了。Java属于静态强类型语言,不是不会进行隐式的类型转换吗?
是啊,我也纳闷呢。首先普及一下基本概念,来自百度百科。
动态语言是指在运行期进行类型检查的语言,即编写代码时可以不指定变量的数据类型,典型代表为Python语言。静态语言指在编译器进行类型检查的语言,即变量在使用前必须要声明变量。典型代表为C/C++以及Java。
强类型语言是指只能进行强制转换的,不允许隐式类型转换的语言,如Java。弱类型语言允许编译其进行隐式的类型转换,如C/C++。
如果按上述方法理解的话,似乎确实有矛盾的地方,博主在网上查找,也没有找到可以很好解释这一点的文章,如果有了解相关内容的大佬,欢迎科普。
数组
数组的定义有一维,也有多维。
float bella[]; //一维数组
char cat[][]; //二维数组
其中,bella是float类型变量,可以存放float类型数据;cat是char型。与C/C++不同的是,Java不允许在声明数组的方括号中指定数组元素个数。
数组也可以被同时声明:
int [] a,b[]; //等价 int a[], b[][];
声明数组后,要使用就需要为数组分配元素,即分配内存空间,如:
bella = new float[4];
分配元素后,数组bella将获取4个用来存放float类型数据的变量,通过数组变量的名字加索引使用数组元素。如:
bella[0] = 1.0f;
bella[1] = 2.0f;
bella[2] = 3.0f;
bella[3] = 4.0f;
二维数组是由若干个一维数组构成的,如:
int a[][] = new int[3][4]; //由3个长度为4的一维数组构成
二维数组的一维数组也不必有相同的长度,如:
int b[][] = new int[3][];
b[0] = new int[6];
b[1] = new int[7];
b[2] = new int[8];
创建数组后,系统会给数组的每个元素一个默认的值为0。在声明数组的同时也可以给数组元素一个初始值:
float bella[] = { 1.0f, 2.0f, 3.0f};
相当于:
float bella[] = new float[3];
bella[0] = 1.0f;
bella[1] = 2.0f;
bella[2] = 3.0f;
运算符
优先级 | 描述 | 运算符 | 结合性 |
---|---|---|---|
1 | 分隔符 | [] () . , ; | 右到左 |
2 | 对象归类,自增自减运算,逻辑非 | instanceof ++ – ! | 左到右 |
3 | 算数乘除 | * / % | 左到右 |
4 | 算术加减 | + - | 左到右 |
5 | 移位运算 | >> << >>> | 左到右 |
6 | 大小 | < <= > >= | 左到右 |
7 | 相等 | == != | 左到右 |
8 | 按位与 | & | 左到右 |
9 | 按位异或 | ^ | 左到右 |
10 | 按位或 | | | 左到右 |
11 | 逻辑与 | && | 左到右 |
12 | 逻辑或 | || | 左到右 |
13 | 三目条件 | ?: | 左到右 |
14 | 赋值 | = | 右到左 |
上述表格中的三目条件用法如下:
max = (a>b)?a:b //若a>b为真,则返回a,为假,则返回b
相当于:
if(a>b){
max = a;
}
else {
max = b;
}
条件分支语句
if
如果(表达式为真)就(执行若干语句)
if(表达式){
若干语句
}
if-else
如果(表达式为真)就(执行若干语句1)
否则(表达式为假,执行若干语句2)
if(表达式){
若干语句1
}
else{
若干语句2
}
if-else if-else
如果(表达式1为真)就(执行若干语句1)
否则(表达式2为真)就(执行若干语句2)
…
否则(以上全部为假,执行若干语句n)
if(表达式1){
若干语句1
}
else if(表达式2){
若干语句2
}
...
else{
若干语句n
}
switch
根据表达式的值进行比对常量值,如果相同则选择一个分支,遇到break退出。如果没有相同的分支,则执行default中的语句后退出。
switch(表达式)
{
case 常量值1:
若干语句
break;
case 常量值2:
若干语句
break;
...
case 常量值n:
若干语句
break;
default:
若干语句
}
注:if类语句属于单分支操作,只能执行一个分支;switch类语句如果好好利用break,可以执行多分支操作。
循环语句
一言以蔽之,循环语句就是满足括号内容,反复执行循环体中的内容。
for
例如:for(i=0;i++;i<10)
for(变量初始化;循环条件;改变循环条件){
若干语句
}
while
如果表达式为真,执行循环体,否则跳出循环。
while(表达式){
若干语句
}
do-while
先执行循环体一次,如果表达式为真,再次执行循环体,否则跳出循环。
do{
若干语句
}while(表达式);
break和continue语句
执行break语句,则整个循环结束,跳出循环;
执行continue语句,则本次循环结束,开始下一次循环。
以上内容,全文背诵( 叮 ~ 咚 ~ 当 ~ 咚 ~ )