Java语言基础及环境搭建.docx
《Java语言基础及环境搭建.docx》由会员分享,可在线阅读,更多相关《Java语言基础及环境搭建.docx(18页珍藏版)》请在冰豆网上搜索。
Java语言基础及环境搭建
第一章Java语言基础及环境搭建
本章主要介绍的Java的开发工具箱(JDK)以及开发环境的搭建并编译和运行应用程序。
本章的重点是讲解Java语言的程序设计结构。
第一节Java语言的环境搭建
1.使用JDK自带的开发工具
本章主要介绍的Java的开发工具箱(JDK)以及开发环境的搭建并编译和运行应用程序。
本章的重点是讲解Java语言的程序设计结构。
2.使用继承开发环境Eclipse
WebWork出自于开源组织opensymphony,实际的创始人是Java领域的名人RickardOberg(JBoss和XDoclet的作者)。
第二节Java语言基础
Struts2的控制器组件是Struts2框架的核心,Struts2的控制器由两部分组成:
FilterDispatcher和业务控制器Action。
1.数据类型及变量。
Java是一种强类型的语言,所以要求每一个变量必须声明一种数据类型。
在Java中一共有8种数据类型,4个整型、2个浮点型、1个字符型和1个表示真假值的boolean型
1.1数据类型
1.1.1整型
数据类型
所占位数
数的范围
byte
8
-27~27-1
short
16
-215~215-1
int
32
-231~231-1
long
64
-263~263-1
Java里,整数类型的范围与Java代码运行所在的机器无关。
长整型数字有一个后缀L。
十六进制数据有一前缀0x。
八进制数据则有前缀0,例如,010就是十进制中的8。
1.1.2浮点型
数据类型
所占位数
数的范围
float
32
3.4e-038~3.4e+038
double
64
1.7e-038~1.7e+038
float是单精度浮点型,而double是双精度浮点型,也就是说double的精度是float型的两倍。
float的有效小数位数为6–7位。
double有效小数位数为15位。
默认浮点型常量为double,表示float类型数据时需在后面添加后缀F。
注意:
整数除以0会抛出异常,而浮点数除以0的结果是无穷大。
而浮点数0除以0结果是非数字(NaN)。
1.1.3char型
char常量是用单引号进行表示的。
char类型用来表示Unicode编码表中的字符。
Unicode被设计用来处理在世界上所有的书面语言中的字符,它是2个字节的编码。
ISO8859-1扩展的ASCⅡ码是Unicode编码表的前256个字符。
例如’\u5d14’是汉字崔。
关于Unicode字符编码的详细信息,请参看网站http:
//www.unicode.org。
1.1.4boolean型
布尔类型(boolean)用于逻辑条件判断,它只有两个值,假(false)和真(true)。
Java中,布尔值和整数不能相互转换。
1.2变量
Java中,每个变量都有类型。
声明一个变量时,应先给出此变量的类型,随后再写上变量名。
例如:
doublesalary;
floatprice;
longleng;
charcode;
booleandone;
注意,每个声明后的分号是必须的,因为一个声明就是一条完整的Java语句。
定义变量名的规则如下:
变量名必须以字母开始,必须是一系列字母或数字的组合。
需要指出的是,在Java中,术语“字母”和“数字”所指的范围要比大部分程序设计语言所指的范畴广泛。
字母包括‘A’~‘Z’、‘a’~‘z’、‘_’以及一门语言中表示字母的任何Unidcode字符。
不过像‘+’和‘@’之类的符号就不能在变量名中使用。
1.2.1初始化变量
声明一个变量后,必须通过赋值语句对它进行明确的初始化--永远不要使用一个未初始化的变量的值。
要对一个已声明过的变量赋值。
inti;
i=10;
intj=100;
i=i+j;
注意:
C和C++中,变量的声明和定义是不同的。
而在Java中,没有与定义相分离的声明。
1.2.2常量
Java中,使用关键字final来表示常量,关键字final表示只能对变量赋一次值,其值一旦设定,便不能改。
习惯上常量名都用大写。
publicstaticfinaldoublesalary=5000;
2.运算符
Java使用常见的算术操作符+-*/进行加、减、乘、除的运算。
整数的求余操作用%表示。
举例来说:
15/2得7,15%2得1,而15.0/2得7.5。
对变量进行初始化时可以使用算术操作符:
inta=2*n;
在赋值语句中可以使用二元算术操作符的简捷方式,比如:
x+=4;相当于x=x+4;
这种简捷方法还有:
-=、*=、/=、%=等。
3.1自增运算符与自减运算符
这种操作符有两种形式:
i++和++i。
它们都是使i的值加1,不过用到表达式中就不一样了。
假如:
inti=10;
intn=2*i++;
相当于
intn=2*i;//n得20
i=i+1;//i得11
如果是前缀,结果就不一样了。
intn=2*++i;
相当于
i=i+1;//i得11
3.1关系运算符与boolean运算符
关系操作符:
>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、==(真等于)、!
=(不等于)
2==4的值是false。
3<10的值是true。
逻辑操作符:
&& 逻辑与(and)、|| 逻辑或(or)、!
逻辑非
逻辑操作符规则是如果第一个操作数已经能够确定值,第二个操作数就不用计算了。
例如:
(1>2)&&(2>3)只有当两个表达式任何一方为假的时候,结果必为假。
例子中1肯定小于2的。
所在这种情况下,没有必要判断后面的表达式结果。
3.1位运算符
&(与)、|(或)、^(异或)、~(非)、<<(左移)、>>(右移,补符号位)、>>>(右移,补0)
3.1条件运算符
条件操作符只有一个?
:
n=3>2?
3:
2;//n得3
3.1其它运算符
包括分量运算符·,下标运算符[],实例运算符instanceof,内存分配运算符new,强制类型转换运算符(类型),方法调用运算符()等。
3.1操作运算符的优先级
优先次序
运算符
结合性
1
.[]()
从左向右
2
++--!
~instanceofnew
从右向左
3
*/%
从左向右
4
+-
从左向右
5
>>>>><<
从左向右
6
><>=<=
从左向右
7
==!
=
从左向右
8
&
从左向右
9
^
从左向右
10
|
从左向右
11
&&
从左向右
12
||
从左向右
13
?
:
从左向右
14
=+=-=*=/=%=^=
&=|=<<=>>=>>>=
从右向左
3.1数字类型之间的转换
图中的六个实箭头表示了无信息损失的转换,而三个虚箭头表示的转换则可能丢失精度。
例如:
intn=123456789;
floatf=n;//f等于1.23456792E8
当使用二元操作符对两个值进行计算时,在进行运算前,系统会自动将两个操作数转换成通用类型。
如果两个操作数中一个是double的,则另一个将会转换成double类型。
转换法则是向上转型。
3.语句及控制流。
和任何程序语言一样,Java使用条件语句和循环来控制流程。
我们首选讲解条件语句,然后再讨论循环语句,最后讲解较为低效的switch语句。
Java中没有goto语句,但goto是Java的保留字。
3.1块作用域
在讲述实际的控制结构之前,应先对块有所了解。
块或复合语句是用一对花括号括起的任意数量的简单Java语句。
块定义了变量的作用范围。
块可以嵌套在其他块中。
publicstaticvoidmain(String[]args){
intn;
{
intk;
}
}
但是,不能在两个嵌套的块内声明同名字的变量。
3.2条件语句
Java中条件语句形式如下:
if(condition)statement
其中,条件必须用圆括号括起来。
如同其他大多数语言一样,在Java中,常需要在某个条件为真的情况下执行多个语句。
这时需要使用下面形式的块语句:
if(condition){
statement1;
statement2;
……
}
例如:
if(age>30){
salary+=1000;
bonus+=100;
}
在这段代码中,当age大于30时,将执行花括号里的所有语句。
if和else语句:
if(age>30){
salary+=1000;
bonus+=100;
}else{
salary-=1000;
bonus-=100;
}
其中else部分是可选的。
else与最靠近它的if是一组。
在语句
if(x<=0){
if(x==0)
sign=0;
else
sign=-1;
}else{
sign=1;
}
中,else属于第二个if。
重复的if…elseif…
if(age==30){
salary+=1000;
}elseif(age==31){
salary+=1100;
}elseif(age==32){
salary+=1200;
}else{
salary+=0.5;
}
3.3循环
3.3.1while循环
while循环包括:
while与do/while两种形式。
while循环只在条件为真时才执行循环体
while(i<100){
sum+=i;
i++;
}
do/while语句先执行循环体,然后才测试条件。
接着再执行循环体,然后再次测试条件,如此反复。
do{
sum+=i;
i++;
}while(i<100);
3.3.2for循环
通常for语句都包含三个部分,第一部分是对计数器的初始化,第二部分给出进行每次循环前要测试的条件,第三部分则指明如何更新计数器。
for(inti=1;i<=100;i++){
sum+=i;
}
3.3.3foreach循环
JDK5.0新增的功能很强的循环结构,可以用来循环数组或集合中的元素,循环形式如下:
for(variable:
collection)statement
foreach循环语句简洁、更不容易出错。
不必为下标的起始值和终止值而操心。
例如:
String[]str={“My”,“name”,“is”,“youdazhi”};
for(Stringvar:
str){
System.out.println(var);
}
3.4多重选择
在处理多个选择时,使用if/else结构显得有些笨拙。
Java提供了一个switch语句可以提高简化多重判断选择。
例如:
System.out.println(“请选择输入(1,2,3,4)”);
Scannerin=newScanner(System.in);
intchoice=in.nextInt();
switch(choice){
case1:
System.out.println(“你选择了1”);
break;
case2:
System.out.println(“你选择了2”);
break;
case3:
System.out.println(“你选择了3”);
break;
case4:
System.out.println(“你选择了4”);
break;
default:
System.out.println(“你选择了1,2,3,4以为的数字”);
break;
}
3.5中断控制流程语句
break可以中断循环,continue可以结束本次循环。
while(i<100){
if(i==50){
break;
}
sum+=i;
i++;
}
while(i<100){
if(i==50){
continue;
}
sum+=i;
i++;
}
4.数组。
数组是用来存储一组相同类型的数据的数据结构可以通过整型下标访问数组的每一个元素。
比如,a是一整型数组,a[i]就是数组中第i个元素。
通过指定数组类型后跟[]和数组变量名可以声明数组:
int[]a;
要注意到,这个语句只声明了变量a,它并没有把a初始化为一个真正的数组。
应使用new操作符创建数组:
int[]a=newint[100];
此语句创建了一个可以存储100个整数的数组。
数组的下标从0到99(而不是从1到100)。
一旦创建了数组,就可以给数组的每一个元素赋值。
例如,可以通过一个循环进行赋值:
int[]a=newint[100];
for(inti=0;i<100;i++){
a[i]=i;
}
可以使用array.length得到数组的元素数目。
例如:
for(inti=0;iSystem.out.println(a[i]);
}
数组一旦被创建,就不能再改变其大小,但能够改变数组元素的值。
如果在程序运行过程中经常需要扩展数组,则应该使用另一种数据结构,数组列表。
定义数组变量时,int[]a和inta[]都是合法的。
推荐使用第一种方式。
5.1数组初始化和匿名数组
Java中有个创建数组对象并同时赋与其初值:
int[]a=newint[]{2,3,4};
Java中有个创建数组对象并同时赋与其初值的简写形式:
int[]a={2,3,4};
注意在这个语句中,我们并没有使用new操作符。
在Java中,甚至还可以初始化一个匿名数组:
newint[]{2,3,4}
5.2数组的拷贝
可以把一个数组变量拷贝给另一个数组,这时,两个变量都指向相同的数组:
int[]a={2,3,4};
int[]b=a;
a[0]=10;
System.out.println(b[0]);//10
如果实际上只是想一个数组中的值拷贝给另一个变量,那么需要使用System类中的arraycopy方法
voidarraycopy(Objectfrom,intfromIndex,Objectto,inttoIndex,intcount)
from:
任何类型的数组
fromIndex:
源数组中待拷贝元素的起始下标
to:
与from类型相同的一个数组
toIndex:
目标数组中拷贝元素的起始下标
count:
拷贝的元素数量
5.3数组的排序
使用Arrays类的sort方法可以给数组排序
int[]a={3,2,4};
Array.sort(a);
5.4多维数组
多维数组使用多个下标访问数组元素。
int[][]a={{2,3,4},{4,5,3},{2,3,2}};
int[][]a=newint[3][3];
在Java中二维数组被是数组的数组,它们的内存空间不一定是连继的。
int[]a={2,3,4};
int[]b={5,6,7};
int[][]aa={a,b};
Java中多维数组元素的个数可以是不规则的
int[][]aa=newint[2][];
aa[0]=newint[10];
aa[1]=newint[3];
5.字符串
5.1Java中的字符串(String)
字符串指的是字符序列,比如“Hello”。
Java中并没有内置的字符串类型,而是在标准Java库中包含一个名为String的类。
每个被双引号引起来的字符串都是String类的实例:
Stringstr1=“”;//一个空字符串
Stringstr2=“Hello”;
5.2字符串的拼接
和大多数程序语言一样,Java允许使用符号+把两个字符串连接在一起。
Stringstr1=“aa”;
Stringstr2=“bb”;
Stringstr3=str1+str2+“!
”;//aabb!
当连接一个字符串和一个非字符串时,后者将被转换成字符串(后面的章节会介绍,每个Java对象都可以转换成一个字符串)。
inti=23;
Stringstr=“aa”+i;//aa23;
这种特性常被用在输出语句中:
intpwd=123456;
System.out.println(“mypasswordis”+pwd);
5.3子串
String类中的substring方法可以从大字符串中提取一个子串。
例如:
Stringstr1=“Hello”;
Stringstr2=str1.substring(0,4);//Hell
字符串中的第一个字符的位置为0从位置为0的字符开始拷贝,第二个参数是第一个不想拷贝的字符位置。
5.4字符串的编辑
length方法用来求取字符串的长度
Stringstr=“Hello”;
intn=str.length();//n得5
charAt(intn)返回字符串中位置为n上的Unicode字符,(n在0到s.length()-1之间)
charch=str.charAt
(1);//ch得‘e’
Java中不能够改变一个Java字符串中的某个单独的字符,不过Java中有StringBuffer类,该类可以改变某个字符的值。
5.5测试字符串是否相等
Stringstr1=“java”;
Stringstr2=“java”;
System.out.println(str1.equals(str2));//true
String类的equals可以测试两个字符串的内容是否完全一样(大小写不同也会返回false)。
String类还提供了不区分大小写的比较方法,equalsIgnoreCase(Stringstr)。
不要使用==操作符来比较两个字符串是否相等,它只能判定两个字符串变量是否指向同一个位置。
String中的compareTo(Stringstr)方法与C语言中的strcmp完全类似。
该方法在两个字符串完全一样时返回0,如果str1大于(按字典顺序)str2返回正数,反之,返回负数。
pareTo(str2)==0