day02变量关键字.docx
《day02变量关键字.docx》由会员分享,可在线阅读,更多相关《day02变量关键字.docx(28页珍藏版)》请在冰点文库上搜索。
day02变量关键字
1关键字
1.1关键字的概述
Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名。
1.2常见的关键字
保留字:
现在这个单词还没有特殊含义,但是在不久的将来,可能会赋予它特殊含义,为什么用保留字,害怕所有单词都给用户用完,保留字:
goto。
备注:
不必死记硬背,如果使用关键字作为标识符,编译器能提示错误。
goto是java的保留关键字,意思是java并没有使用goto,以后是否使用未定。
2标识符
2.1什么是标识符
就是程序员在定义java程序时,自定义的一些名字,例如helloworld程序里关键字class后跟的Demo,就是我们定义的类名。
类名就属于标识符的一种。
标识符除了应用在类名上,还可以用在变量、函数名、包名上。
(要求同学们先记住,以后会详细见到这些)。
2.2标识符必须遵循以下规则
1.标识符由26个英文字符大小写(a~zA~Z)、数字(0~9)、下划线(_)和美元符号($)……组成
2.不能以数字开头,
3.不能是关键字
4.严格区分大小写
5.标识符的可以为任意长度
6.标识符不能存在空格
在创建类的界面进行分析
2.2.1合法的标识符
ComputeArea,radius,area$itcast_itcastgz_itcast
注意:
由于Java严格区分大小写,ITCAST和itcast是完全不同的标识符
2.2.2非法标识符
1.class(关键字)
2.100java(不能以数字开头)
3.Hellojava(空格不是组成标识符的元素)
2.2.3Java中的标识符命名规范
1.包名
域名的反写,多个单词组成时所有字母小写(例:
packagecom.cast)
com.huawei.oa.login
2.类名和接口
多个单词组成时所有单词的首字母大写(例:
HelloWorld)
3.变量名和函数名
驼峰命名法,多个单词组成时第一个单词首字母小写,其他单词首字母大写(例:
lastAccessTime、getTime)。
4.常量名
多个单词组成时,字母全部大写,多个单词之间使用_分隔(例:
INTEGER_CACHE)
注意:
只是为了增加规范性、可读性而做的一种约定,标识符在定义的时候最好见名知意,提高代码阅读性。
33.注释
3.1注释的作用
通过注释提高程序的可读性,是java程序的条理更加清晰,易于区分代码行与注释行。
另外通常在程序开头加入作者,时间,版本,要实现的功能等内容注释,方便后来的维护以及程序员的交流。
3.2注释的种类
1.单行注释(linecomment)用//表示,编译器看到//会忽略该行//后的所文本
2.多行注释(blockcomment)用/**/表示,编译器看到/*时会搜索接下来的*/,忽略掉/**/之间的文本。
3.文档注释用/***/表示,是java特有的注释,其中注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档。
4.@override强制性检查
5.@注解
publicstaticvoidmain(String[]args){
//第一步:
获取半径?
并将半径保存在程序中
doubleradius=5;
//第二步:
计算面积,并将面积保存在程序中
/*
doublearea=radius*radius*3.1415;
//第三步:
在控制台现实面积
System.out.println("半径为"+radius+"的圆的面积为:
"+area);
*/
}
注意:
多行注释中可以嵌套单行注释,多行注释不能嵌套多行注释。
错误!
!
!
classDemo{
/*
这是主函数,是程序的入口
它的出现可以保证程序的独立运行
/*
注意:
多行注释嵌套多行注释是不行的。
*/
*/
文档注释(编写软件说明书)
1.需要使用sum给我们提供的javadoc工具生成一个html的说明文档。
Javadoc*.java
2.只能抽取public的属性或者方法内容。
格式:
Javadoc指定存储文档的路径目标文件
@author作者
@version版本
@param方法的参数
@return返回值
@see表示参考
注释的使用细节:
三种注释可以出现在程序的任何地方,但是不推荐任意位置。
注解:
使用反射机制实现,通过运行时,执行标有注解标记的代码
1.编程习惯:
1.给哪条语句进行说明,注释应该写在该语句的旁边。
2.单行注释一般写在语句的后面多行注释和文档注释一般写在语句的上面
注意:
文档注释只能出现在类、方法的上面。
4进制的转换
进制:
进制是一种记数方式,可以用有限的数字符号代表所有的数值。
由特定的数值组成。
4.1整型的表现形式
1.十进制:
都是以0-9这九个数字组成,不能以0开头。
2.二进制:
由0和1两个数字组成。
3.八进制:
由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。
4.十六进制:
由0-9和A-F组成。
为了区分于其他数字的区别,开头都是以ox开始。
System.out.println(03);
System.out.println(0xc);
4.2进制的由来
几乎每个民族最早都使用都十进制计数法,这是因为人类计数时自然而然地首先使用的是十个手指。
但是这不等于说只有十进制计数法一种计数方法。
例如,世界各国在计算年月日时不约而同地使用“十二进制”12个月为一年又如:
我国过去16两才算为一斤,这就是“十六进计数法”,一个星期七天,这个就是”七进制计算法”。
计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。
4.2.1十进制与二进制之间的转换
十进制转二进制的转换原理:
除以2,反向取余数,直到商为0终止。
二进制转十进制的转换原理:
就是用二进制的每一个乘以2的n次方,n从0开始,每次递增1。
然后得出来的每个数相加
4.2.2十进制与八进制之间转换
1.八进制的由来
二进位制在计算机内部使用是再自然不过的。
但在人机交流上,二进位制有致命的弱点——数字的书写特别冗长。
例如,十进位制的100000写成二进位制成为110000*********00。
为了解决这个问题,在计算机的理论和应用中还使用两种辅助的进位制——八进位制和十六进位制。
二进位制的三个数位正好记为八进位制的一个数位,这样,数字长度就只有二进位制的三分之一,与十进位制记的数长度相差不多。
例如,十进位制的100000写成八进位制就是303240。
十六进位制的一个数位可以代表二进位制的四个数位,这样,一个字节正好是十六进位制的两个数位。
十六进位制要求使用十六个不同的符号,除了0—9十个符号外,常用A、B、C、D、E、F六个符号分别代表(十进位制的)10、11、12、13、14、15。
这样,十进位制的100000写成十六进位制就是186A0。
2.八进制的特点
由数字0-7组成。
即使用三个开关表示一个八进制数。
10进制转换8进制原理:
就是用十进制的数字不断除于8,取余数。
Java快速实现十进制转二进制。
十进制转成二进制
Integer.toBinaryString(inti)
二进制转十进制
Integer.valueOf("0101",2).toString()
十进制转成十六进制:
Integer.toHexString(inti)
十六进制转成十进制
Integer.valueOf("FFFF",16).toString()
5常量
5.1常量的概述
常量是指在程序运行过程中其值不能改变的量。
1.不可变的值System.out.println(99);
2.不可变的变量finalintKING=25;
5.2常量类型
Java中常量的分类:
整数常量:
所有整数
小数常量:
所有小数
布尔常量:
只有true和false
字符串常量:
使用“”引起来的字符序列,“”、“a”、””
字符常量:
使用’’引起来的单个字符
常量池:
常量池全部在栈里
比如
System.out.println("thanks");
或者finalStringS="thanks";这时s分配在栈里,s直接指向常量池里的"thanks";但如果你这样写,Strings=newString("thanks");这时s指向堆里的一块内存,这个内存里的地址指向栈里的常量池里的"thanks";
转义字符
特殊字符的转义序列:
转义字符
转义字符的概述:
特殊字符使用”\”把其转化成字符的本身输出,那么使用”\”的字符称作为转移字符。
需求:
使用输出语句,打印出带引号的信息例如输出。
System.out.println(""king"");
编译是无法正常通过的。
语法有错误,编译器读到第二个引号就认为是字符串的结束,剩余的不知道怎么处理。
如何解决这个问题:
java中使用转义字符来表示特殊的字符。
一个转义字符以反斜杠(\)开始。
问题:
想要打印带引号的字符串怎么办,就可以使用反斜杠(\)后跟字符,这个反斜杠就是转义字符。
转义字符
名称
Unicode
\t
Tab(Tab键盘)
\u0009
\n
Linefeed(换行)
\u000A
\\
Backslash(反斜杠)
\u005C
\'
SingleQuote(单引号)
\u0027
\"
DoubleQuote(双引号)
\u0022
\n表示换行。
\t制表符,相当于Table键
\’单引号
\’’双引号
\\表示一个斜跨
上述问问题解决:
System.out.println("\"king\"");
注意:
换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符
6变量
6.1变量的概述
1.变量的概述
在程序运行过程中,其值可以发生变化的量。
用于存储可变数据的容器。
(如同房间)
2.变量存在的意义
计算机主要用于处理生活中的数据,由于生活中存在大量的可变数据,那么计算机就必须具备存储可变数据的能力。
比如:
气象站会根据温度发布天气预报信号。
3.变量的特点
正常情况下牛奶盒装的都是牛奶,而且会根据牛奶的多少去决定要多大的容量的牛奶盒,区分牛奶盒是谁的,都需要在牛奶盒上做一个标志。
特点:
1.必须要有大小(变量大小)
2.存储一定格式的可变数据,针对不同的数据有不同的类型(变量数据类型)
3.必须要有名字(变量名)
Java中的内存分配:
堆,栈,常量池
堆是一个运行时数据区,通过new等指令创建
<1>优点:
可动态分配内存大小,生存周期不必事先告诉编译器,Java垃圾回收自动回收不需要的数据;
<2>缺点:
运行时需动态分配内存,数据存取速度较慢。
栈限制仅在表的一端进行插入和删除运算的线性表,先进后出
<1>优点:
存取速度比堆快,仅次于寄存器,栈数据可以共享;
<2>缺点:
存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
所有的基本数据类型全部是存储在栈里面,速度快。
一个对象,它的实体是存储在堆里面的,而它的引用(指向堆的对象名称)是存储在栈里面。
6.1.1java的数据类型
Java的八种基本数据类型
Byte(字节型)Short(短整型)int(整型)long(长整型)
Float(单精度浮点型)double(双精度浮点型)
char(字符型)
Boolean(布尔型)
bit、byte、位、字节、汉字的关系
1.bit:
位
一个二进制数据0或1,是1bit;
2.byte:
字节
存储空间的基本计量单位,如:
MySQL中定义VARCHAR(45) 即是指45个字节;
1byte=8bit
3.一个英文字符占一个字节;
1字母=1byte=8bit
4.一个汉字占2个字节;
1汉字=2byte=16bit
1.整型
byte代表一个字节的大小
short代表两个字节的大小
int代表四个字节的大小
long代表八个字节的大小25L
如果一个数值没有采取特殊的处理,那么该整数默认的类型是int。
可以使用数值后面添加L或小写L改变默认的整数类型。
2.浮点型(默认是double)
float代表四个字节的大小9.9f
double代表八个字节的大小
java程序中所有的小数默认的类型是double类型,所以需要使用特殊的符号改变默认的小数类型。
3.字符型
Char代表两个字节的大小
字符类型可转换为Ascii码
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码。
chark='t';
intk2=k;
System.out.println(k2);
4.布尔型
boolean占一个字节或四个字节。
只有true与false两个值。
如果使用boolean声明一个基本类型的变量时,该变量占4个字节。
如果使用boolean声明一个数组类型的变量时,数组的每个元素占一个字节。
6.1.2变量的声明
格式:
数据类型变量名字1,变量名字2,……变量名字n,;
案例:
inti声明了一个整形的变量。
doubled声明了一个double数据类型的变量
floatf声明了一个float数据类型的变量。
备注:
intw,y;不建议使用
6.1.3变量的初始化
声明的同时赋值。
inti=9;
6.1.4变量的初始化方式
初始化方式1:
数据类型变量名字=数值。
案例:
方式1:
doubled=3.14;
变量的生命周期
声明变量的位置:
类体和方法体(包括参数)中可以声明变量
定义在类里的,就是全局变量(成员变量)。
定义在方法里或域里就叫做局部变量,所谓域就是{}里面。
publicclassTest{
publicvoidshow(){
intc=2;//局部变量
System.out.println(c);
}
publicvoidshow2(){
intc2=5;//局部变量
//这个位置访问c,无效
System.out.println(c);
}
}
局部变量未赋值不可使用,全局变量可使用
变量的初始值。
Int0
浮点0.0
booleanfalse
Stringnull
题目:
将两个变量的值进行交换
7java数据类型的转换
Java中可以进行不同数据类型的加减乘除运算吗?
是可以的。
如果两个整数(int)相除会去掉小数部分。
如果需要保留小数部分,可以让除数或者被除数变为double类型的(5变为5.0)。
Java是自动的将int的那个数变为了double类型了也就是Java自动的将整数变为了浮点数。
例如5/2.0其实是5.0/2.0,这就是自动类型转换。
1、自动类型转换(也叫隐式类型转换)
将一个数赋值给更大数值范围的变量,可以将short变量赋值给int变量可以将int变量赋值给long变量。
Java内部其实做了工作就是自动将数值进行了类型提升,就叫做自动类型转换(也叫隐式类型转换)
byteb=1;//00000001
shorts=b;//0000000000000001
inti=s;
longlon=i;
doubled=lon;//1.0
自动类型转换(也叫隐式类型转换)
要实现自动类型的转换,需要满足两个条件,第一两种类型彼此兼容,第二目标类型取
值范围必须大于源类型。
所有的数字类型,包括整形和浮点型彼此都可以进行转换。
例如:
byteb=100;
intx=b;
System.out.println(x);//程序把b结果自动转换为int类型。
2、强制类型转换(也叫显式类型转换)
不可以将一个数值赋给范围更小数值范围的变量,除非进行类型转换。
byteb=100;
b=b+2;
System.out.println(b);
上述例子发生了什么,发生了类型转换错误。
b+2遇到了加法运算,2默认是int类型,byte类型b变量存储的值自动类型提升为
了int类型。
执行完加法运算后的结果就是int类型,想要将int的类型值放入到byte类型变量b中,无法放入,编译报错。
byteb=1;
b=(byte)(b+2);
当两种类型彼此不兼容,或者目标类型取值范围小于源类型(目标是byte源是int)
无法自动转换,此时就需要进行强制类型转换。
强制类型转换需要注意:
损失精度!
!
!
doubleb=100.9;
inty=(int)b;
System.out.println(y);
3、类型转换的原理
可以把byte理解为1两的碗,short2两的碗,int4两的碗,long8两的碗。
1两碗的满碗酒可以倒入2两4两8两的碗中。
但是4两碗的酒倒入1两碗的酒就有一些问题。
1、什么时候要用强制类型转换
比如小数部分只想保留整数部分.
一定要清楚要转换的数据在转换后数据的范围内否则会损失精度.
publicstaticvoidmain(String[]args){
byteb=100;
b=(byte)(b+2);
System.out.println(b);//102
//舍弃小数部分
doubled=5.5;
intnum=(int)d;
}
2、表达式的数据类型自动提升
算术表达式,逻辑表达式
所有的byte型、short型和char的值将被提升到int型。
自动类型提升
byteb=3;
intx=4;
x=x+b;//b会自动提升为int类型参与运算。
System.out.println(x);//7
强制类型转换
byteb=2;
/*
*强制类型转换,强制将b+2强制转换为byte类型,再赋值给b
*/
b=(byte)(b+2);
System.out.println(b);//4
8java运算符
8.1.算术运算符
正负号(+,-)
除法
%取模
求余数
取模的正负取决与被除数:
1.自增
(++)i前自增:
先自增完毕,再运算整个表达式,语句分号前面的都是运算表达式;
后自增,先运算完整个表达式,再进行自增;
备注:
参与自增运算的操作数据每次会加1.
结论:
如果运算符在变量的前面,则该变量自增1或者自减1,然后返回的是变量的新值,如
果运算符在变量的后面,则变量也会自增或者自减1,但是返回的是变量原来的值。
++在前就是先运算,再取值,++在后就是先取值,再运算。
自增自减运算符案例:
完成如下运算:
inta=5;//a等于5
intb=++a;//b等于6(a+1)
intc=--b+a;//先算--b,b为6,先自减1,那么b为5,再加上a=6,所以结果C=11
System.out.println(c);
inti=0;
inttemp=i++;
System.out.println(temp);
答案是0
后自增实际上是先使用其值,然后自增
inttemp=i++;
//实际上相当于下面的代码:
inttemp=i;
i++;
inta=5;
intb=0,c=0;
b=a+++2;
c=++a+2;
system.out.print("b="+b+";c="+c);
结果是:
b=7;c=9
inti=0;
intj=i+++++i;
执行流程:
先执行i++,由于i自增1稍后才执行,所以此时,i还是0,然后执行++i,++i后i的值是1,执行完++i后,补增i++。
8.1赋值运算符
=,+=,-=,*=,/=,%=
运算符
运算
范例
结果
=
赋值
a=3,b=2
a=3,b=2
+=
加等于
a=3,b=3;a+=b;
a=5,b=2;
-=
减等于
a=3,b=2,a-=b;
a=1,b=2;
*=
乘等于
a=3,b=2,a*=b;
a=6,b=2
/=
除等于
a=3,b=2,a/=b;
a=1,b=2;
%=
模等于
a=3,b=2,a%=b;
a=1,b=2
a+=b可以想象成a=a+b;
变量声明完了之后,可以使用赋值语句(assignmentstatement)给变量赋一个值,Java中使用等号(=)作为基本的赋值运算符(assignmentoperator),
intsum=1;
sum+=1;sum=sum+1;
System.out.println(sum);
变量我们已经知道如何声明,表达式具体如何定义?
表达式的定义:
表达式涉及到值(常量),变量和通过运算符计算出的值,以及他们组合在一起计算出的新值。
x=y+1;
例如:
publicstaticvoidmain(String[]args){
intx=1;//声明int变量x,赋值1给变量x
inty=0;//声明int变量y,赋值0给变量y
doublearea;//声明double变量area
doubleradius=1.0;//