Java讲义范例.docx

上传人:b****7 文档编号:10164814 上传时间:2023-02-09 格式:DOCX 页数:67 大小:36.11KB
下载 相关 举报
Java讲义范例.docx_第1页
第1页 / 共67页
Java讲义范例.docx_第2页
第2页 / 共67页
Java讲义范例.docx_第3页
第3页 / 共67页
Java讲义范例.docx_第4页
第4页 / 共67页
Java讲义范例.docx_第5页
第5页 / 共67页
点击查看更多>>
下载资源
资源描述

Java讲义范例.docx

《Java讲义范例.docx》由会员分享,可在线阅读,更多相关《Java讲义范例.docx(67页珍藏版)》请在冰豆网上搜索。

Java讲义范例.docx

Java讲义范例

程序运行过程:

javac编译,java运行

例1-1FirstProgram.java

classTest{

publicstaticvoidmain(){

System.out.println("Hello,myfirstjavaprogram!

");

}

}

编译:

javacFirstProgram.java

错误:

FirstProgram.java:

1:

classTestispublic,shouldbedeclaredinafilenamedTest.java

原因:

如果文件中只有一个类,则文件名必须与类名相同。

修改:

Test改为FirstProgram

编译:

javacFirstProgram.java

运行:

javaFirstProgram

错误:

Exceptioninthread"main"java.lang.NoSuchMethodError:

main

原因:

程序的入口函数声明必须为publicstaticvoidmain(Stringargs[])。

修改:

第二行改为publicstaticvoidmain(Stringargs[]){

编译:

javacFirstProgram.java

运行:

javaFirstProgram

结果:

Hello,myfirstjavaprogram!

例1-2Another.java

修改FirstProgram.java的代码为:

classFirstProgram{

publicstaticvoidmain(Stringargs[]){

Anotheranother=newAnother();

another.say();

}

}

publicclassAnother{

publicvoidsay(){

System.out.println("Anotherone.");

}

}

编译:

javacFirstProgram.java

错误:

FirstProgram.java:

7:

classAnotherispublic,shouldbedeclaredinafilenamed

Another.java

publicclassAnother{

^

1error

原因:

文件中如果有两个以上的类,则类名必须与其中的public类的类名一致。

在没有public类时,则必须与其中任意一个类名一致。

修改:

文件名改为Another.java(或删除public)

编译:

javacAnother.java

运行:

javaAnother

错误:

Exceptioninthread"main"java.lang.NoSuchMethodError:

main

原因:

javaAnother的含义为,程序从Another类的main方法开始运行,但程序的Another类中并没有main方法。

运行:

javaFirstProgram

结果:

Anotherone.

例1-3FirstAppliet.javaFirstApplet.html

publicclassFirstApplet{

publicvoidpaint(Graphicsg){

g.setColor(Color.blue);

g.drawString("Java是一门很优秀的语言",12,30);

g.setColor(Color.red);

g.drawString("我一定认真学习Java",22,56);

}

}

编译:

javacFirstApplet.java

错误:

FirstApplet.java:

2:

cannotfindsymbol

symbol:

classGraphics

location:

classFirstApplet

publicvoidpaint(Graphicsg){

……

原因:

无法识别Graphics类,没有引入相关的类包。

修改:

添加importjava.applet.*;

importjava.awt.*;

编译:

javacFirstApplet.java

运行:

appletviewerFirstApplet.html

错误:

java.lang.ClassCastException:

FirstApplet

atsun.applet.AppletPanel.createApplet(AppletPanel.java:

710)

atsun.applet.AppletPanel.runLoader(AppletPanel.java:

639)

atsun.applet.AppletPanel.run(AppletPanel.java:

319)

atjava.lang.Thread.run(Thread.java:

595)

原因:

该类不是一个Applet,没有声明为Applet的子类。

修改:

将类声明修改为publicclassFirstAppletextendsApplet

编译:

javacFirstApplet.java

运行:

appletviewerFirstApplet.html

结果:

关键字:

abstractbooleanbreakbytecasecatchcharclasscontinuedefault

dodoubleelseenumextendsfinalfinallyfloatforifimplements

importinstanceofintinterfacelongnativenewpackageprivateprotected

publicreturnshortstaticsuperswitchsynchronizedthisthrowthrows

transienttryvoidvolatilewhile​​

例2-1InputTest.java

importjava.util.*;

classInputTest{

publicstaticvoidmain(Stringargs[]){

Scannerreader=newScanner(System.in);

intn;

n=reader.nextInt();

System.out.println("n="+n);

}

}

编译:

javacInputTest.java

运行:

javaInputTest

输入:

455k

错误:

Exceptioninthread"main"java.util.InputMismatchException

atjava.util.Scanner.throwFor(Scanner.java:

909)

……

原因:

输入了不正确的数据,程序不够健壮

修改:

在语句n=reader.nextInt();前添加代码

while(!

reader.hasNextInt())

……

修改后的代码:

importjava.util.*;

classInputTest{

publicstaticvoidmain(Stringargs[]){

Scannerreader=newScanner(System.in);

intn;

System.out.println("请输入一个整数:

");

while(!

reader.hasNextInt()){

reader.nextLine();

System.out.println("输入格式错误,请重新输入:

");

}

n=reader.nextInt();

System.out.println("输入的整数为:

"+n);

}

}

例2-2Division.java

importjava.util.*;

classDivision{

publicstaticvoidmain(Stringargs[]){

Scannerreader=newScanner(System.in);

inta,b;

doubleq;

System.out.println("请输入被除数:

");

if(reader.hasNextInt())

a=reader.nextInt();

System.out.println("请输入除数:

");

if(reader.hasNextInt())

b=reader.nextInt();

q=a/b;

System.out.printf("除法算式及运算结果:

\n%10d/%d=%10.2f",a,b,q);

}

}

编译:

javacDivision.java

错误:

Division.java:

13:

错误:

可能尚未初始化变量a

q=a/b;

^

……

原因:

a、b只在分支语句的一个分支中获得初值,所以有可能并未被初始化

修改:

在定义变量a、b时便给出初值,或者在使用a、b变量之前的所有分支中都给a、b赋值

修改后的代码;

importjava.util.*;

classDivision{

publicstaticvoidmain(Stringargs[]){

inta,b;

doubleq;

System.out.println("请输入被除数:

");

a=input();

System.out.println("请输入除数:

");

b=input();

if(b==0){

System.out.println("被0除,非法运算!

");

return;

}

q=a/b;

System.out.printf("除法算式即运算结果:

\n%10d/%d=%10.2f",a,b,q);

}

privatestaticintinput(){

Scannerreader=newScanner(System.in);

while(!

reader.hasNextInt()){

reader.nextLine();

System.out.println("输入格式错误,请重新输入:

");

}

returnreader.nextInt();

}

}

依然存在的问题:

小数部分始终为0

原因:

整数的除法实现的是整除

修改:

将被除数a或除数b进行强制类型转换(q=(double)a/b;)

例2-3ArrayTest.java

classArrayTest{

publicstaticvoidmain(Stringargs[]){

System.out.println(b);

for(inti=0;i<=3;i++)

System.out.println(a[i]);

b=a;//b原来指向的内存空间将被回收

System.out.println(b.length);

}

}

编译:

javacArrayTest.java

错误:

ArrayTest.java:

5:

错误:

可能尚未初始化变量b

System.out.println(b);

^

原因:

引用变量必须使其指向一个对象或显示声明为null

修改:

添加语句b=newint[4];(或b=null)

运行:

javaArrayTest

错误:

Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException:

3

atArrayTest.main(ArrayTest.java:

6)

原因:

数组越界

修改:

修改循环判断条件

注意:

b=a;执行后,b原来指向的内存空间将无任何引用变量指向它,JVM将会自动回收该内存空间;此外,此语句执行后,引用变量b与a相等,并且指向了相同的内存空间

例2-4Schedule.java

importjava.util.*;

classSchedule{

publicstaticvoidmain(Stringargs[]){

boolean[][]table=newboolean[7][5];

inti,j;

while(true){

System.out.println("请输入星期:

(1-7分别代表周一至周日)");

i=input();

System.out.println("请输入节次:

(1-5分别代表1、2节至9、10节各个时

间段)");

j=input();

if(i>0&&i<8&&j>0&&j<6){

table[i-1][j-1]=true;

}else

break;

}

System.out.println();

System.out.println("周一周二周三周四周五周六周日");

System.out.println();

for(i=0;i<10;i++){

System.out.printf("%2d",(i+1));

for(j=0;j<7;j++){

if(table[j][i/2])

System.out.print("Java");

else

System.out.print("");

}

System.out.println();

if(i%4==3)

System.out.println();

}

}

privatestaticintinput(){

Scannerreader=newScanner(System.in);

while(!

reader.hasNextInt()){

reader.nextLine();

System.out.println("输入格式错误,请重新输入:

");

}

returnreader.nextInt();

}

}

优先级:

postfix

expr++expr--

unary

++expr--expr+expr-expr~!

multiplicative

*/%

additive

+-

shift

<<>>>>>

relational

<><=>=instanceof

equality

==!

=

bitwiseAND

&

bitwiseexclusiveOR

^

bitwiseinclusiveOR

|

logicalAND

&&

logicalOR

||

ternary

?

:

assignment

=+=-=*=/=%=&=^=|=<<=>>=>>>=

 

例3-1OperatorTest.java

classOperatorTest{

publicstaticvoidmain(Stringargs[]){

inta=3,b=4,c=5,d=6,m=7,n=8;

intx=64,arr[]=newint[8];

longy=-0x1000000000L,z=4;

booleanflag;

flag=a>3&&b-->4;

flag=++c>5||++d>6;

flag=m==7|++n==8;

x>>=33;

y>>=33;

z>>=65;

System.out.printf("a=%d,b=%d;c=%d,d=%d,m=%d,n=%d\n",a,b,c,d,m,n);

System.out.printf("x=%d,y=%d,z=%d,x^z=%d\n",x,y,z,x^z);

System.out.println(arrinstanceofint[]);

}

}

 

例3-2ControlTest.java

importjava.util.*;

publicclassControlTest{

publicstaticvoidmain(Stringargs[]){

System.out.println("请输入一个整数:

");

intn=input();

for(inti=0;i

if(i%2==0)

continue;

if(i%n==6)//(替换6为7)

break;

System.out.println("i="+i);

}

}

privatestaticintinput(){

Scannerreader=newScanner(System.in);

while(!

reader.hasNextInt()){

reader.nextLine();

System.out.println("输入格式错误,请重新输入:

");

}

returnreader.nextInt();

}

}

例4-1Circle.java

finalstaticdoublePI;

classCircle{

PI=3.14;

doubler;

doublecircumference(){

return2*PI*r;//实例方法可以访问类变量

}

doublearea(){

returnPI*r*r;

}

}

编译错误:

Circle.java:

1:

需要为class、interface或enum

finalstaticdoublePI;

^

Circle.java:

3:

需要<标识符>

PI=3.14;

^

原因:

类定义之外不能有任何语句;类体内,方法体外不允许有除成员变量定义外的任何语句;

修改:

classCircle{

finalstaticdoublePI=3.14;

……

 

例4-2CircleTest.java

classCircleTest{

publicstaticvoidmain(Stringargs[]){

Circlec=newCircle();

System.out.printf("AreaoftheCircleis:

%8.4f",c.area());

}

}

编译运行正确:

原因:

类的成员变量可不初始化——Circle类的r变量

类有默认的构造方法(不带任何参数)——Circlec=newCircle();

Ø为Circle添加构造方法:

Circle(doubler){

this.r=r;//形参r与成员变量r重名,必须使用this访问

}

运行错误:

Exceptioninthread"main"java.lang.NoSuchMethodError:

Circle:

method()V

notfoundatCircleTest.main(CircleTest.java:

3)

原因:

添加新的构造方法后,则默认的构造方法失效

修改:

Circlec=newCircle(3);

Ø在CircleTest类的main方法中添加以下代码:

Circlec1=null;

System.out.printf("PIis:

%8.4f",c1.PI);//或Circle.PI

编译运行正确:

原因:

类变量的初始化不需要该类的任何实例存在

Ø在Circle类中添加方法:

staticvoidsetPI(doublepi){

PI=pi;

}

编译错误:

Circle.java:

19:

无法为最终变量PI指定值

PI=pi;

^

Circle.java:

23:

无法从静态上下文中引用非静态变量this

this.r=r;

^

原因:

final常量的值无法更改,静态方法不能访问实例变量。

修改:

删除PI的final定义以及setPI方法的static定义

Ø修改CircleTest类的main方法:

Circlec1=null;

System.out.printf("PIis:

%8.4f\n",c1.PI);

c1.setPI(3.1415926);

Circlec=newCircle(3);

System.out.printf("AreaoftheCircleis:

%8.4f\n",c.area());

运行结果:

PIis:

3.1400

AreaoftheCircleis:

28.2743

原因:

Circle类的类变量PI已经发生改变,改变对所有Circle实例均有效

 

例4-3SomeThing.java

classSomeThing{

intx;

inty;

voidmove(intx,inty){

this.x=x;

this.y=y;

}

}

以下那些形式的重载有效?

booleanmove(intx,inty){

booleanflag=(this.x==x)&&(this.y==y);

this.x=x;

this.y=y;

returnflag;

}//错误,仅返回值不同

voidmove(intwidth,intheight){

x+=width;

y+=height;

}//错误,仅变量名不同

voidmove(intdistance,booleandirection){

if(direction)

x+=distance;

else

y+=distance;

}//正确,参数类型不同

例4-4Card.java

classCard{

intid;

doublebalance;

Card(intid,doublebalance){

this.id=id;

this.balance=b

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1