02Java语言基础.docx
《02Java语言基础.docx》由会员分享,可在线阅读,更多相关《02Java语言基础.docx(40页珍藏版)》请在冰豆网上搜索。
![02Java语言基础.docx](https://file1.bdocx.com/fileroot1/2023-1/22/e5446de0-74dc-4017-ad96-cfda3e8d1ca5/e5446de0-74dc-4017-ad96-cfda3e8d1ca51.gif)
02Java语言基础
1、纲要1
2、内容2
2.1、标识符2
2.2、关键字2
2.3、数据类型3
2.3、进制换算3
2.4、字符编码4
2.5、变量5
2.6、数据类型详解6
2.6.1、整数型6
2.6.2、浮点类型6
2.6.3、布尔类型7
2.6.4、基本类型的转换8
2.7、运算符10
2.6.1、算术运算符11
2.7.2、关系运算符和布尔运算符12
2.7.3、赋值类运算符13
2.7.4.条件运算符14
2.8、控制语句14
2.8.1、if语句和ifelse语句14
2.8.2、switch语句16
2.8.3、for语句18
2.8.4、while语句18
2.8.5、dowhile语句19
2.8.6、break语句20
2.8.7、continue语句21
2.9、方法初步21
2.9.1、普通方法示例21
2.9.2、方法的重载(Overload)23
3.0、递归问题25
3、练习题27
1、纲要
标识符
关键字
数据类型
运算符
控制语句
方法说明
递归问题
2、内容
2.1、标识符
标识符可以标识类名,变量名,接口名,方法名
1.Java标识符的命名规则
a)标识符是由,数字,字母,下划线和美元符号构成,其他符号不可以
b)必须以字母、下划线或美元符号开头,不能以数字开头
2.关键字不能作为标识符
3.标识符区分大小写
4.标识符理论上没有长度限制
参见表格
合法标识符
不合法标识符
_123Test
123Test
HelloWorld
Hello-World
HelloWorld
HelloWorld#
public1
public
HelloWord
HelloWorld
命名Java标识符,最好见名知意,可以使用驼峰标示
2.2、关键字
在Java中关键字都是小写的
class
extends
implements
interface
import
package
break
case
continue
default
do
if
else
for
return
switch
while
false
true
null
boolean
byte
char
short
int
long
float
double
try
catch
throw
throws
finally
abstract
fianl
native
private
protected
public
static
synchronized
transient
volatile
instanceof
new
super
void
assert
enum
goto
const
2.3、数据类型
Java总共有两种数据类型,主要有基本类型和引用类型,基本类型有8种,引用数据类型有3种
数据类型
●基本数据类型
⏹数值类型
◆整数型(byte,short,int,long)
◆浮点型(float,double)
⏹字符类型(char)
⏹布尔类型(boolean,只能取值true和false)
●引用数据类型
⏹数组
⏹类
⏹接口
八种数据类型的取值范围
在计算机内部,所有信息都采用二进制表示,每个二进制由0和1两种状态,一个字节有8位,也就是由8个0或1构成,如果short类型的6在计算机中是如何存储的,short是两个字节,那么short6的二进制为:
0000000000000110,int类型的6在计算机中存储为32位:
00000000000000000000000000000110
2.3、进制换算
●简单了解十进制到二进制的换算
规则:
除2取余,逆序输出
如10进制6二进制换算方式为:
6/2=3余0
3/2=1余1
1/2=0余1
将余数逆序输出就是6的二进制表示:
110,位数不够补零
●简单了解二进制到十进制的换算
规则:
取出最后一位,从2的0次方开始乘,将得到的结果相加即可
如:
二进制的110的十进制换算:
0*2的0次方=0
1*2的1次方=2
1*2的2次方=4
110的十进制为:
0+2+4=6
2.4、字符编码
ASCII字符编码
采用一个字节编码,主要针对英文编码
ISO-8859-1
有称latin-1,是国际化标准或组织ISO制定的,主要为了西欧语言中的字符编码,和ASCII兼容
GB2312/GBK/GB18030
主要是汉字编码,三种编码从容量上看是包含关系
unicode
Unicode统一了全世界上的所有文字编码,unicode有几种实现:
UTF-8,UTF-16,UTF-32
UTF-8存储格式(UTF8主要就是为了节省空间):
Char的测试
publicclassCharTest{
publicstaticvoidmain(String[]args){
//不能采用双引号声明字符类型,必须采用单引号声明字符类型
//charc1="a";
//声明一个字符
charc1='a';
//char类型可以存放一个汉字,java中的char使用utf-16编码
//所以char占用两个字节
charc2='中';
System.out.println(c1);
System.out.println(c2);
}
}
2.5、变量
变量其实是java中的一个最基本的单元,也就是内存中的一块区域,Java中的变量有四个基本属性:
变量名,数据类型,存储单元和变量值
⏹变量名:
合法的标识符
⏹变量的数据类型:
可以是基本类型和引用类型(必须包含类型)
⏹存储单元:
存储单元大小是由数据类型决定的,如:
int为4个字节32位
⏹变量值:
在存储单元中放的就是变量值(如果是基本类型放的就是具体值,如果是引用类型放的是内存地址,如果null,表示不指向任何对象)
变量的声明格式:
类型变量名;
【示例代码】
publicclassVarTest01{
publicstaticvoidmain(String[]args){
//定义变量
intage;
//输出变量
System.out.println(age);
}
}
采用javac编译VarTest01.java,出现如下错误:
出现错误的原因是:
变量没有初始化,变量初始化的过程就是赋值,变量使用前必须初始化,以下示例是正确的:
publicclassVarTest02{
publicstaticvoidmain(String[]args){
//定义变量,赋值为100
intage=100;
//输出变量
System.out.println(age);
}
}
2.6、数据类型详解
2.6.1、整数型
Java整型包括:
byte/short/int/long
Java语言整数型常量有三种表示方法
●十进制
●八进制,八进制0开头,如:
013
●十六进制,十六进制0x开头,如:
0x23
Java语言整数型默认为int类型,如果要声明成long类型在变量值后加入L,如:
longl=999999999999L,可以使用小写的L,但是容易发生混淆,所以推荐使用大写的L
2.6.2、浮点类型
Java语言中浮点类型包括:
float/double
Java语言中浮点类型默认为double
【代码示例】
publicclassDataTypeTest01{
publicstaticvoidmain(String[]args){
//正确,因为默认为double类型
doubled=10.5;
}
}
【示例代码】
publicclassDataTypeTest02{
publicstaticvoidmain(String[]args){
//会出现错误
//因为10.5默认为double类型,double为8个字节,
//而float为4个字节,所以double向float赋值会出现精度丢失的问题
floatf=10.5;
}
}
【示例代码】,改善以上示例
publicclassDataTypeTest03{
publicstaticvoidmain(String[]args){
//声明为float类型的变量,数值后面必须加入f
floatf=10.5f;
}
}
2.6.3、布尔类型
布尔类型的取值只能是true和false,不能取其他的
【代码示例】
publicclassDataTypeTest04{
publicstaticvoidmain(String[]args){
//boolean类型只能取值为true和false
booleana=true;
booleanb=false;
}
}
【代码示例】
publicclassDataTypeTest05{
publicstaticvoidmain(String[]args){
//boolean类型只能取值为true和false
booleana=1;
booleanb=0;
}
}
2.6.4、基本类型的转换
●在java中基本类型可以相互转换,boolean类型比较特殊不可以转换成其他类型
●转换分为默认转换和强制转换:
⏹默认转换:
容量小的类型会默认转换为容量大的类型
◆byte-->short-->int-->long-->float-->double
char-->
◆byte、short、char之间计算不会互相转换,首先先转换成int
⏹强制转换
◆将容量大的类型转换成容量小的类型,需要进行强制转换
◆注意:
只要不超出范围可以将整型值直接赋值给byte,short,char
在多种类型混合运算过程中,首先先将所有数据转换成容量最大的那种,再运算
【示例代码】
publicclassDataTypeTest06{
publicstaticvoidmain(String[]args){
//出现错误,1000超出了byte的范围
//bytea=1000;
//正确,因为20没有超出byte范围
//所以赋值
bytea=20;
//变量不能重名
//shorta=1000;
//正确,因为数值1000没有超出short类型的范围
//所以赋值正确
shortb=1000;
//正确,因为默认就是int,并且没有超出int范围
intc=1000;
//正确,可以自动转换
longd=c;
//错误,出现精度丢失问题,大类型-->>小类型会出现问题
//inte=d;
//将long强制转换成int类型
//因为值1000,没有超出int范围,所以转换是正确的
inte=(int)d;
//因为java中的运算会会转成最大类型
//而10和3默认为int,所以运算后的最大类型也是int
//所以是正确的
intf=10/3;
//声明10为long类型
longg=10;
//出现错误,多个数值在运算过程中,会转换成容量最大的类型
//以下示例最大的类型为double,而h为int,所以就会出现大类型(long)到小类型(int)
//的转换,将会出现精度丢失问题
//inth=g/3;
//可以强制转换,因为运算结果没有超出int范围
//inth=(int)g/3;
//可以采用long类型来接收运算结果
//longh=g/3;
//出现精度损失问题,以下问题主要是优先级的问题
//将g转换成int,然后又将int类型的g转换成byte,最后byte类型的g和3运算,那么
//它的运算结果类型就是int,所以int赋值给byte就出现了精度损失问题
//byteh=(byte)(int)g/3;
//正确
//byteh=(byte)(int)(g/3);
//不能转换,还有因为优先级的问题
//byteh=(byte)g/3;
//可以转换,因为运算结果没有超出byte范围
//byteh=(byte)(g/3);
//可以转换,因为运算结果没有超出short范围
shorth=(short)(g/3);
shorti=10;
bytej=5;
//错误,short和byte运算,首先会转换成int再运算
//所以运算结果为int,int赋值给short就会出现精度丢失问题
//shortk=i+j;
//可以将运算结果强制转换成short
//shortk=(short)(i+j);
//因为运算结果为int,所以可以采用int类型接收
intk=i+j;
charl='a';
System.out.println(l);
//输出结果为97,也就是a的ascii值
System.out.println((byte)l);
intm=l+100;
//输出结构为197,取得a的ascii码值,让后与100进行相加运算
System.out.println(m);
}
}
2.7、运算符
按功能划分主要运算符如下:
算术运算符
+,-,*,/,++,--,%
关系运算符
<,<=,>,>=,==,!
=
布尔运算符
&&,||,&,|,!
位运算符
&,|,~,^,>>,>>>,<<
&按位与(AND)[真真为真,真假为假]
|按位或(OR)[假假为假,其余全真]
^按位异[相同为假,不同为真]
~按位非(NOT)[真则假,假则真]
>>右移
>>>右移,左边空出的位以0填充
<<左移
赋值类运算符
=,+=,-=,*=,/=,%=
字符串连接运算符
+
条件运算符
?
:
其他运算符
instanceof,new
2.6.1、算术运算符
【示例代码】
publicclassOperatorTest01{
publicstaticvoidmain(String[]args){
inta=1;
//a++相当于a=a+1;
intb=a++;
System.out.println("a="+a);
System.out.println("b="+b);
}
}
以上会看到a=2,b=1,为什么会出现这种结果?
++在变量的后面,先把值赋值给b,然后a再加(也就是先赋值再自加)
所以就输出了a=2,b=1
【示例代码】,将++放到变量的前面
publicclassOperatorTest02{
publicstaticvoidmain(String[]args){
inta=1;
intb=++a;
System.out.println("a="+a);
System.out.println("b="+b);
}
}
输出结果为a=2,b=2,如果++在变量的前面,是先自加在赋值
【示例代码】取余/取模
publicclassOperatorTest03{
publicstaticvoidmain(String[]args){
inta=10/3;
System.out.println(a);
//取余
intb=10%3;
System.out.println(b);
}
}
2.7.2、关系运算符和布尔运算符
●与:
两个操作数相与,如果都为true,则为true
●或:
两个操作数相或,有一个为true,则为true
●异或:
相异为true,两个操作数不一样就为true
●短路与和逻辑与的区别?
⏹短路与,从第一个操作数推断结果,只要有一个为fase,不再计算第二个操作数
⏹逻辑与,两个操作数都计算
●短路或和逻辑或的区别?
⏹短路或,从第一个操作数推断结果,只要为true,不再计算第二个操作数
⏹逻辑或,两个操作数都计算
短路与和逻辑与、短路或和逻辑或与虽然计算方式不一样,但结果都是一样的
注意:
操作数必须是boolean型
op1
op2
op1&&op2
op1&op2
op1||op2
op1|op2
op1^op2
!
op1
true
true
true
true
false
false
true
false
false
true
true
false
false
true
false
true
true
true
false
false
false
false
false
true
【代码示例】
publicclassOperatorTest04{
publicstaticvoidmain(String[]args){
booleanop1=(10>5);
//输出true
System.out.println("op1="+op1);
booleanop2=(10<5);
System.out.println("op2="+op2);
System.out.println("op1&&op1="+(op1&&op2));
System.out.println("op1&op1="+(op1&op2));
System.out.println("op1||op1="+(op1||op2));
System.out.println("op1|op1="+(op1|op2));
System.out.println("op1^op1="+(op1^op2));
System.out.println("!
op1="+!
op1);
}
}
2.7.3、赋值类运算符
+=
a+=b
a=a+b
-=
a-=b
a=a-b
*=
a*=b
a=a*b
/=
a/=b
a=a/b
%=
a%=b
a=a%b
【代码示例】
publicclassOperatorTest05{
publicstaticvoidmain(String[]args){
inta=1;
intb=2;
//a=a+b
a+=b;
System.out.println(a);
}
}
2.7.4.条件运算符
条件运算符是java语言中的三元运算,格式如下:
op1?
op2:
op3
如果操作数op1为true则输出op2,否则输出op3
publicclassOperatorTest06{
publicstaticvoidmain(String[]args){
inta=11;
intb=a>0?
1:
-1;
System.out.println(b);
booleanc=a%2==0?
true:
false;
System.out.println(c);
}
}
2.8、控制语句
java控制语句可以分为7种:
●控制选择结构语句
⏹if、ifelse
⏹switch
●控制循环结构语句
⏹for
⏹while
⏹dowhile
●改变控制语句顺序
⏹break
⏹continue
2.8.1、if语句和ifelse语句
条件语句只要包括if语句和ifelse语句
●if语句格式:
if(布尔表达式){
一条或多条语句
}
如果语句为一条,可以省略大括号,如:
if(布尔表示式)
一条语句
只有表示为true时,才会进入if语句中
●ifelse语句格式
if(布尔表示式){
一条或多条语句
}else{
一条或多条语句
}
如果else时,还需要条件,可以写成如下可是:
if(布尔表示式){
一条或多条语句
}elseif(布尔表示式){
一条或多条语句
}else{
一条或多条语句
}
【示例代码】
publicclassIfelseTest01{
publicstaticvoidmain(String[]args){
intage=3;
if(age%2==0){
System.out.println("是偶数");
}
//建议只有一条语句也加入大括号
if(age%2==0)
System.out.println("是偶数");
if(age>0&&age<=5){
System.out.println("幼儿");
}
if(age>5&&age<=10){
System.out.println("儿童");
}
if(age>10&&age<=18){
System.out.println("少年