——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一,语言基础组成
Java语言基础由关键字、标识符、注释、常量和变量、运算符、语句、函数和数组等组成。
本篇重点在变量中。
关键字:被Java语言赋予了特殊含义的单词,所有关键字的单词全小写拼写。
abstract :表明类或者成员方法具有抽象属性
assert :用来进行程序调试
boolean :基本数据类型之一,布尔类型
break :提前跳出一个块
byte :基本数据类型之一,字节类型
case :用在switch语句之中,表是其中的一个分支
catch :用在异常处理中,用来捕捉异常
char :基本数据类型之一,字符类型
class :类
const :保留关键字,没有具体含义
continue :回到一个块的开始处
default: 默认,例如,用在switch语句中,表明一个默认的分支
do :用在do-while循环结构中
double :基本数据类型之一,双精度浮点数类型
else :用在条件语句中,表明当条件不成立时的分支
enum :枚举
extends :表明一个类型是另一个类型的子类型,这里常见的类型有类和接口
final :用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变
finally :用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
float :基本数据类型之一,单精度浮点数类型
for :一种循环结构的引导词
goto :保留关键字,没有具体含义
if :条件语句的引导词
implements :表明一个类实现了给定的接口
import :表明要访问指定的类或包
instanceof :用来测试一个对象是否是指定类型的实例对象
int :基本数据类型之一,整数类型
interface :接口
long :基本数据类型之一,长整数类型
native :用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
new :用来创建新实例对象
package :包
private :一种访问控制方式:私用模式
protected :一种访问控制方式:保护模式
public :一种访问控制方式:共用模式
return :从成员方法中返回数据
short :基本数据类型之一,短整数类型
static :表明具有静态属性
strictfp :用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
super :表明当前对象的父类型的引用或者父类型的构造方法
switch :分支语句结构的引导词
synchronized :表明一段代码需要同步执行
this :指向当前实例对象的引用
throw :抛出一个异常
throws :声明在当前定义的成员方法中所有需要抛出的异常
transient :声明不用序列化的成员域
try :尝试一个可能抛出异常的程序块
void :声明当前成员方法没有返回值
volatile:表明两个或者多个变量必须同步地发生变化
while:用在循环结构中
标识符
程序中自定义的名称,比如类名,函数名,变量名,常量名等等
有26个英文字母的大小写,数字0-9,两个特殊符号_ 和$组成
标示符命名规则
必须遵守的规则:1,开头不能是数字,错误示范:2MyClass;
2,不能使用关键字,上面表中的都不能用;
3,标示符中不能包含除了_和$以外的特殊符号,错误示范:My Class
命名惯例,非必须,建议使用:
1,起名字尽量有意义,增强阅读性
2,公司中经常会通过“_”代表某一类名称,例如:_temp。
通过“
3,不同位置的标识符书写规范:
包名:多单词组成时所有字母都小写。例如:xxxyyyzzz
类名接口名:多单词组成时,所有单词的首字母大写。例如:XxxYyyZzz
变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。例如:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接。例如:XXX_YYY_ZZZ
注释
为了提高阅读性,可以使用注释,编译器会自动忽略注释包含范围内的文字或代码
注释格式有三种:
1.单行注释
格式://注释文字
2.多行注释
格式:/注释文字/
3.文档注释
格式:/*注释文字/
对于文档注释,是java特有的注释,其中注释内容可以被JDK提供的工具javadoc所解析,生成一 套以网页文件形式体现的该程序的说明文档。
注意:单行注释可以嵌套单行注释,单行注释可以嵌套多行注释,多行注释可以嵌套单行注释。但是,多注释不能嵌套多行注释,因为多行注释的开头会和被嵌套的多行注释的结尾配对,导致后面的注释失效。
常量
表示不能改变的数值或字符。6种常量:
1.整数常量:所有整数。
2.小数常量:所有小数。
3.布尔(boolean)型常量:只有两个数值,true、false。
4.字符常量:将一个数字字母或者符号用单引号(’’)标识,如:’a’。
5.字符串常量:将一个或者多个字符用双引号(“”)标识,如:”helloworld”、”a”、”“(空字符串)。
6.null常量:只有一个数值就是:null。
常量知识点中涉及到的知识点:
进制的转换
整数中常用到的进制有,二进制,八进制,十进制,十六进制,要懂的其相互转换
二进制:逢二进一,八进制:逢八进一…………
使用电脑的计算器,转为程序员模式,可以进行进制转换。
如十进制下,输入6,点击二进制,即可把6转为二进制表现形式110
进制转换计算方式:
十进制转二进制:
二进制转十进制:
十进制转八进制
十进制转十六进制
二进制的负数
变量
内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),该区域的数据可以在同一类型范围内不断变化。就是将不确定的数据进行存储,也就是需要在内存中开辟一个空间。
定义变量的格式:
数据类型变量名=初始化值;
例如:
byteb=3;
注意:1、格式是固定的
2、变量的作用范围(一对{}之间有效)。
3、变量只能存放某一类型的数据。
变量中涉及的知识点:
基本数据类型
Java语言中的数据类型包括8种基本类型,3中引用类型
不同数据类型所占内存空间不同:
byte 1个字节 -128~127
short 2个字节 -2^15~2^15-1
int 4个字节 -2^31~2^31-1
long 8个字节 -2^63~2^63-1
float 4个字节 3.4e-038~3.4e+038
double 8个字节 1.7e-308~1.7e+308
char 2个字节 \u0000-\uffff
boolean 1bit true\false 默认值为false
1字节即1byte为8bit(位)
默认整数类型为int,默认小数类型为double
Double类型小数精度比float精度高,但不管double还是float都存在掉失精度的可能性
变量中常见错误:
错误示例一:
byte a=3;
byte a=8;//错误,定义一次后,上次定义作用范围内不能再定义。
错误示例二:
long a=12345875895582;//赋值给long类型的整数后面应该加上“l”或“L”,否则后面整数会被认为int类型,要是超出int范围,就会报错。
错误示例三:
float f = 2.3;//小数默认类型为double,赋值给float会损失精度,编译错误,应加上“f”或者“F” float f= 2.3f;
错误示例四:
class Demo
{
public static void main(String[] args){
int y;
System.out.println(y);//编译错误,未对y初始化,不能直接操作
}
}
错误示例五:
class Demo{
public static void main(String[] args){
int z = 9;
}
System.out.println(z);//变量的作用范围在定义的{}内,超出失效。
7.}
三种进制的数值常量
Java语言中,数值常量可以用十进制,八进制,十六进制来表示,但并不是所有类型的基本数据都支持这三种形式的常量赋值
十进制:最常用的表示方式,如+9、2.4e6f、-1.0.浮点常量的十进制数可以小数形式表示,也可以指数形式表示,如123.45可以表示为1.2345e2.其中+为正,可以省略,-为负号,不可省
八进制:以数字“0”开头,如034、-071.注意八进制赋值时,数字最大为7,否则会编译错误,如:
int a=068;//错误
浮点类型无八进制表示形式,出现如下赋值,编译器会视为十进制赋值:
float a=03.5f;//十进制赋值
十六进制:以“0x”或“0X”开头,如0x9f,0x7.3p8f。如果以十六进制表示浮点数,只能以指数形式,如:
double d=0x1.0;//非法赋值语句
/*错误提示
TestDemo.java:5: 错误: 浮点文字的格式错误
double d=0x1.0;
*/
浮点数以十六进制表示时,指数符号为“p”或者P,而十进制指数符号为“e”或者“E”
数据类型转换
数据类型转换分为自动类型转换和强制类型转换
基本数据类型按由低到高排列
byte short(char ) int long float double
自动类型转换又称隐式类型转换,又低到高可以自动转化
例如:
intx=3;
byteb=5;
x=x+b;//byte类型的b被自动转化为int,再参与运算
而由高到低类型转换由于存在丢失数据的风险,所以编译器要求进行强制类型转换,又叫显示类型转换,否则编译失败。
例如
class TestDemo
{
public static void main(String[] args)
{
short s=178;
byte b =(byte)s;
System.out.println(b);//结果为-78
}
}
由于short类型178存在内存中表示为0000 0000 1011 0010,强制转换为byte,byte只有1字节,所以前面一个字节数据掉失,所以b=1011 0010,为-78;
计算方式为,178-256=-78
错误示例:
class VarDemo
{
public static void main(String[] args){
byte b = 3;
b = b + 200;//编译失败“200”为int类型,b变量被提升为int变量相加结果为int类型,再
System.out.println(b);//赋值给byte类型,可能损失精度 改为b=(byte)(b+200),编译正确
}
}
char类型可与int类型相加
class TestDemo
{
public static void main(String[] args)
{
char a ='a';
int s=7;
a=(char) (a+s);
System.out.println(a);//结果为 h;
}
}
说明:字符类型数据之所以能够自动提升为int类型是因为字符类型数据在计算机中也是用0、1表示 的,int类型数据在计算机中也用0、1表示,所以char类型数据当然可以转换为int类型数据。但是,字符 类型数据在计算机中使用0、1表示是按照何种顺序组合排列的则需要依据某个码表而定。Java中的内置 码表是Unicode,既包含中文,也包含英文。
表达式的数据类型自动提升:
所有的byte型、short型和char的值将被提升到int型。
注意:在计算过程中,遇到高位数据类型才会转换,未遇到,不会转换
测试实例:
class TestDemo
{
public static void main(String[] args)
{
long a=70*60*24*365*70;
System.out.println(a);
}
}
结果为
-1719527296
原因是70、60、24、365、70都是int类型,他们的运算结果自然也是int类型,得到的结果超出int范围,导致结果溢出,赋值给long类型的变量a时,自动转换为long类型,之前结果已经掉失精度,赋值给long自然也掉失了
解决方法,在运算时加入long类型操作数
class TestDemo
{
public static void main(String[] args)
{
long a=70*60*24*365*70*1L;//在最后*1L
System.out.println(a);
}
}
结果依然为:
-1719527296
问题未解决,虚拟机只有在遇到高数据类型才会提升,除了byte,short会自动提升。
所以代码应该这样写:
long a=1L*70*60*24*365*70;
结果为
2575440000
这样问题才算解决
也可以这样写:
long a=70L*60*24*365*70;
或者这样写
long a=(long)70*60*24*365*70;
但不能这样写
long a=(long)(70*60*24*365*70);