Java讲授要点1基础.docx
《Java讲授要点1基础.docx》由会员分享,可在线阅读,更多相关《Java讲授要点1基础.docx(21页珍藏版)》请在冰点文库上搜索。
![Java讲授要点1基础.docx](https://file1.bingdoc.com/fileroot1/2023-6/20/7851baaa-47c1-472c-9482-5e9f79e08887/7851baaa-47c1-472c-9482-5e9f79e088871.gif)
Java讲授要点1基础
一、Java基础
1.1特点
*面向对象、平台无关性、分布式、可靠和安全、多线程。
*Java是一种跨平台的语言,同时也是既编译又解释的语言。
Java可以运行在网络不同的计算机上,但运行的计算机上必须装有相应的Java解释器。
这种解释器被称为JVM(Java虚拟机)。
1.2Java运行流程
(1)先应该创建源程序,Java源程序一般用java作为扩展名,是一个文本文件,用Java语言写成,可以用任何文本编辑器创建与编辑;
(2)源程序完成后,就可以进行编译,需要使用Java编译器“javac”,读取源程序并翻译成Java虚拟机能够明白的指令集合,且以字节码的形式保存在文件中。
通常,字节码文件以class作为扩展名;(3)Java解释器即“java”,读取字节码,取出指令并且翻译成计算机能执行的代码,完成运行过程;该字节码运行的平台是Java虚拟机。
只要计算机上装有Java虚拟机,无论采用那种操作系统,硬件配置情况如何,运行的结果都是一样的
1.3JVM
Java语言的一个非常重要的特点就是与平台的无关性。
而使用Java虚拟机是实现这一特点的关键。
一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。
而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。
Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
1.4下载和安装JDK6.0
*Java不仅是编程语言,还是一个开发平台,Java技术给程序员提供了许多工具:
编译器、解释器、文档生成器和文件打包工具等等。
*XX“JDK下载”,很容易下载到安装文件。
*运行jdk-…….exe文件,即可安装。
*FTP资料下载文件夹中的安装文件jdk…,下载后直接安装即可。
*java环境变量配置:
(1)XP:
鼠标右击“我的电脑”->属性->高级->环境变量
系统变量->新建->变量名:
JAVA_HOME变量值:
C:
\ProgramFiles\Java\jdk1.6.0
注意:
填写的是JDK的安装路径
系统变量->新建->变量名:
CLASSPATH变量值:
.;%JAVA_HOME%\lib
系统变量->编辑->变量名:
Path在变量值的最前面加上:
%JAVA_HOME%\bin;
CLASSPATH中有一英文句号“.”后跟一个分号,表示当前路径的意思)
(2)WIN7
右键单击计算机,然后选择属性,然后->高级系统设置->环境变量
后面的设置同XP
如果安装时选择的默认设置,JDK的安装路径很可能是
C:
\ProgramFiles(x86)\java\jdk1.6.0_10,因此JAVA_HOME变量值应该是C:
\ProgramFiles(x86)\java\jdk1.6.0_10
1.5Javaapplication和Javaapplet
Java语言可以编写两种类型程序,一种是Javaapplication应用程序,一种是Javaapplet小应用程序(只能在www浏览器环境下运行,因此还必须建立一个HTML文件来调用Applet程序)。
一个Javaapplication由一个或者多个class文件组成。
其中有一个class定义了main()方法,该类被称为主类,即该类可以独立运行。
1.6一个简单的java程序实例
publicclassHello
{
publicstaticvoidmain(String[]args)
{
System.out.println("欢迎学习Java");
}
}
*可以使用记事本来编辑,也可以使用开发工具软件,如Eclipse、JBuilder等。
*程序以类(class)的形式存在;一个类要能被解释器直接启动运行,必须有main方法;通常把含有main方法的类称为主类。
*源文件的名称一定要和主类的名称保持一致;
*源文件的扩展名为java;
*Java语言区分大小写;
*运行:
(1)在MS-DOS界面下,首先进入保存了文件Hello.java的目录;
(2)javacHello.java;(3)javaHello
1.7注释
为了使编写的程序便于阅读,常常在代码中插入注释。
*文档注释,对整个程序的功能等进行说明/**开头,*/结束,可以跨行
*单行注释//
*多行注释/*开头,*/结束,可以跨行
例:
在上面的Hello.java程序代码中插入如下的注释,运行结果不变。
/**
*2008itzcn
*版权所有
*/
publicclassHello//对类进行声明
{
publicstaticvoidmain(String[]args)
/*下面是方法的内容,注意花括号和分号的使用*/
{
System.out.println("欢迎学习Java");
System.out.println("这是我的第一个Java程序");
}
}
注意:
如果使用System.out.print,则在屏幕输出时不换行。
System.out.println("欢迎学习Java")等效于System.out.print("欢迎学习Java\n");
参见教材P13表2-2转义字符。
二、语法基础
2.1数据类型
2.1.1基本数据类型
Java可将数据类型分为两类,一种是面向对象的类型,而另一种则是非面向对象的基本数据类型。
在本节将详细介绍Java的基本数据类型和类型转换。
类型
关键字
占用内存
取值范围
字节型
byte
一个字节
-128~127
短整型
short
两个字节
-32768~32767
整型
int
四个字节
-2147483648~2147483647
长整型
long
八个字节
-9223372036854775808L~9223372036854775807L
单精度浮点型
float
四个字节
1.4E-45~3.4028235E38
双精度浮点型
double
八个字节
4.9E-324~1.7975931348623157E308
字符型
char
两个字节
0~65535或\u0000到\uFFFF
布尔型
boolean
一个字节
true或false
(上面的表参见教材P12表2-1,注意有4种整型,2种浮点型)
publicclassDemoType1
{
publicstaticvoidmain(String[]args)
{
chara='A';/*字符型,用单引号括起来的一个字符,Unicode集;用双引号把字符串括起来,则为string类,但已经不属于基本数据类型,而是面向对象的数据类型*/
byteb=044;//8进制
shortc=0x44;//16进制
longd=0x100ffL;//长整型,后面要加L
floate=1.01f/0.3f;//含小数的数,后面加f为float型
doublef=1.0/3.0;//含小数的数,默认为double型;若把0取消呢?
booleang=true;
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("c="+c);
System.out.println("d="+d);
System.out.println("e="+e);
System.out.println("f="+f);
System.out.println("g="+g);
}
}
2.1.2类型转换
用常量、变量或表达式给另一个变量赋值时,两者的数据类型必须一致,即所赋值的类型必须是能被变量接受的数据类型。
如果不一致,则需要进行类型转换,即从一种数据类型转换到另一种数据类型。
类型转换可以分为隐式转换(自动类型转换)和显式转换(强制类型转换)两种。
*隐式转换:
不同类型的数据混合运算时,自动按照低级类型数据转换成高级类型数据的规则进行。
byte__short__int__long__double;char__int
例如:
在doublea=3.14*5中,Java会自动把5转换为double型的数据,然后和double型数据3.14进行运算;如果把3.14*5的结果保存为int型,即inta=3.14*5,则会出现损失精度的问题,这种情况下需要用到强制转换。
*强制转换:
publicclassDemoType2
{
publicstaticvoidmain(String[]args)
{
inta=(int)3.14*5;//用括号加数据类型来实现强制转换
System.out.println("a="+a);
}
}
教材P16例2.3
publicclassConversion
{
publicstaticvoidmain(String[]args)
{
byteb;inti=266;b=(byte)i;
System.out.println("bytetointis"+""+b);
}
}
2.2变量和常量
*变量:
用字母命名(一般第一个单词的首字母为小写,第二个单词的首字母大写),必须定义之后才能使用;可以则定义的同时赋初值。
如:
inta,b=3,c=4;
doubled=3.14;
变量的命名规则
*常量:
若要将字母或者单词(一般全部用大写字母)定义为常量,需用final来声明。
例:
从键盘输入r的值,然后以此为半径的圆的面积和球的体积。
importjava.util.Scanner;//导入Scanner类
classDemoCircle
{
publicstaticvoidmain(String[]args)
{
finaldoublePAI=3.14159;
doubler,mj,tj;
System.out.println("请从键盘上输入圆的半径:
");
Scannersc=newScanner(System.in);//定义一个名叫sc的对象
r=sc.nextDouble();//使用对象的方法
mj=PAI*r*r;tj=4*PAI*r*r*r/3;
System.out.println("圆的面积为:
"+mj);
System.out.println("圆的体积为:
"+tj);
}
}
2.3运算符
2.3.1算术运算符
*自加++和自减--,特别注意运算符号在数的前面和后面的区别。
publicclassDemoAdd
{
publicstaticvoidmain(Stringargs[])
{
intx=1;
inta=++x;//x先增加1,然后赋值给a
intb=x++;//x先赋值给b,然后再增加1
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("x="+x);
}
}
2.3.1关系运算符
*返回true或false
*等于符号是==,不等于是!
=
2.3.1逻辑运算符
!
&&||
2.3.1条件运算符
inta=10,b=23
intmax=(a>b)?
a:
b;//满足条件为a,不满足条件为b
2.4程序控制语句
程序控制语句分为三类:
(1)条件语句(分支语句),包括if语句和switch语句;
(2)迭代语句(循环语句),包括for循环语句、while循环语句和do-while循环语句;(3)跳转语句,包括break语句、continue语句和return语句。
2.4.1条件语句
*单向分支(if)
importjava.util.Scanner;
publicclassDemoIf1
{
publicstaticvoidmain(String[]args)
{
System.out.println("输入一个学生成绩:
");
Scannersc=newScanner(System.in);
intiScore=sc.nextInt();//使用sc对象的方法
if(iScore<0||iScore>100)
System.out.print("你的输入有错误!
");
System.out.print("该学生得分为:
"+iScore+"谢谢使用!
");
}
}
*双向分支(if-else)
importjava.util.Scanner;
publicclassDemoIf2
{
publicstaticvoidmain(String[]args)
{
System.out.println("输入一个学生成绩:
");
Scannersc=newScanner(System.in);
intiScore=sc.nextInt();
if(iScore<60)
System.out.print("该学生得分为:
"+iScore+"不及格!
");
else
System.out.print("该学生得分为:
"+iScore+"及格了!
");;
}
}
*嵌套
importjava.util.Scanner;
publicclassDemoIf3
{
publicstaticvoidmain(String[]args)
{
System.out.println("输入一个学生成绩:
");
Scannersc=newScanner(System.in);
intiScore=sc.nextInt();
if(iScore<60)
System.out.print("该学生得分为:
"+iScore+"不及格!
");
else
if(iScore<75)
System.out.print("该学生得分为:
"+iScore+"及格!
");
else
if(iScore<90)
System.out.print("该学生得分为:
"+iScore+"良好!
");
else
System.out.print("该学生得分为:
"+iScore+"优秀!
");
}
}
*多向分支(switch)
importjava.util.Scanner;
publicclassDemoIf3
{
publicstaticvoidmain(String[]args)
{
System.out.println("输入一个学生成绩:
");
Scannersc=newScanner(System.in);
intiScore=sc.nextInt();
intc=iScore/10;
switch(c)
{case6:
System.out.print("该学生得分为:
"+iScore+"及格!
");
break;
case7:
if(iScore<75)
System.out.print("该学生得分为:
"+iScore+"及格!
");
else
System.out.print("该学生得分为:
"+iScore+"良好!
");
break;
case8:
System.out.print("该学生得分为:
"+iScore+"良好!
");
break;
case9:
System.out.print("该学生得分为:
"+iScore+"优秀!
");
break;
case10:
System.out.print("该学生得分为:
"+iScore+"优秀!
");
break;
default:
System.out.print("该学生得分为:
"+iScore+"不及格!
");}
}}
2.4.2循环语句
*确定的循环次数(for循环)
例:
输入一个正整数,计算出它的所有因子
importjava.util.*;//调入util包中的所有类,包括了scanner类
publicclassDemoFor1
{
publicstaticvoidmain(String[]args)
{
System.out.println("输入一个数:
");
Scannerscan=newScanner(System.in);
inta=scan.nextInt();
System.out.print(a+"的所有因子是:
");//注意print和println的区别
/*下面是循环体*/
for(inti=1;i{
if(a%i==0)
System.out.print(i+"");
}
}
}
思考:
如何计算1加到100?
*不确定的循环次数(while循环)
例:
键盘输入一个正整数,然后计算1递加到这个数的总和。
importjava.util.Scanner;
publicclassDemoWhile1{
publicstaticvoidmain(String[]args){
intn=0,sum=0;
Scannersc=newScanner(System.in);
System.out.print("请输入一个自然数:
");
intnumber=sc.nextInt();
while(n<=number)
{
sum=sum+n;n=n+1;
}
System.out.println("sum="+sum);}}
*注意在循环体中加入改变条件的语句,否则会造成死循环(如果出现,要终止使用ctrl+c).
2.4.3跳转语句
*break:
跳出所在的块,并从紧跟该块的第一条语句处执行。
*continue:
跳过循环体中尚未执行的语句,接着进行终止条件的判断,决定是否继续循环。
*return:
从当前方法中退出,返回调用该方法的语句处,通常用在方法体的最后。
2.4.4编程举例
*对于财经类专业的同学而言,应该扎实地掌握三种结构的程序设计(顺序、分支和循环),以便在以后的能够编写简单的程序来处理工作中的问题(例如数据的处理和计算)。
例1:
求一元二次方程的根。
importjava.util.Scanner;
importjava.lang.Math.*;//调入Math类,求平方根用sqrt()方法。
publicclassL1
{publicstaticvoidmain(String[]args)
{floata=0,b=0,c=0,d=0,x1=0,x2=0;
System.out.println("请输入一元二次方程的三个系数,数与数之间用空格分隔。
");
Scannerscanner=newScanner(System.in);
a=scanner.nextFloat();b=scanner.nextFloat();c=scanner.nextFloat();
d=b*b-4*a*c;
if(d>0)
{x1=(float)(-b+Math.sqrt(d))/(2*a);x2=(float)(-b-Math.sqrt(d))/(2*a);
System.out.println("x1=["+x1+"]x2=["+x2+"]");}
else
{if(d==0)
{x1=(float)(-b)/(2*a);
System.out.println("x1=x2="+x1);}
else
{System.out.println("此方程在实数范围内无解!
");}}}}
例2:
输出九九乘法表
publicclassL2
{
publicstaticvoidmain(String[]args)
{
for(intfirst=1;first<10;first++)
{
for(intsecond=1;second<=first;second++)
{System.out.print(first+"x"+second+"="+(first*second)+"\t");}
System.out.println();
}
}
}
解释:
(1)使用到了双重循环(即循环中又套了一个循环);
(2)System.out.print("\t")的作用相当于键入一个Tab键,在屏幕上输出连续的空格(见教材P13表2-2);(3)最后一条语句System.out.println的作用是产生换行,也可以使用System.out.print("\n")。
例3:
解任意方程。
柯布—道格拉斯生产函数是经济学中使用最广泛的一种生产函数形式。
其中Q为产出,L为劳动力投入,K为资本投入,α是劳动力产出的弹性系数,β是资本产出的弹性系数。
如果α=0.4,β=0.6,L=100,计算Q=200时所需的资本投入。
即要求解方程
。
求解:
根据数学常识,K值应该大于零,于是可以编程求解。
importjava.lang.Math.*;
publicclassL3
{
publicstaticvoidmain(String[]args)
{
doublea=0.4,b=0.6,l=100,k=0,q=0;//让k的初值为零,然后在后面的循环中逐渐增加
while(Math.abs(q-200)>=0.01)//Math.abs()为求绝对值,后面的0.01为设置的精度
{
q=Math.pow(l,a)*Math.pow(k,b);//Math.pow()为求幂函数值
k=k+0.01;
}
System.out.println("k="+k);
}
}
注意:
(1)本例中求解方程的根时没有考虑更高效的算法,而是在整个可能的取值范围内逐一搜寻;如果要考虑求解的效率,则可以使用共轭法等算法;
(2)将弹性系数和L变为从键盘输入,则可以将该例变为更通用的程序,当然还得改变搜寻范围(即改变循环的起始值和终止值)。
2.5字符串
char类型只能表示单个字符,不能满足需要。
在处理字符串时,可以使用String类。
1.创建String对象
如创建一个值为abc的字符串对象s,代码为:
Strings=newString("abc");
也可以简单地写为
Strings="abc";
2.字符串对象的常用方法
教材P34。
(类比Excel中的文本操作函数)
教材P35例3.1