(完整版)java练习题(含答案).pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《(完整版)java练习题(含答案).pdf》由会员分享,可在线阅读,更多相关《(完整版)java练习题(含答案).pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.编写程序,用数组实现乘法小九九的存储和输出。【提示:采用多个一维数组。】publicpublic classclass Multipation publicpublic staticstatic voidvoid main(String args)/TODOTODO Auto-generated method stubintint x=newnew intint99;forfor(intint i=0;i9;i+)forfor(intint j=0;j=j)intint m=i+1;intint n=j+1;xij=m*n;System.out.print(m+*+n+=+xij);Sys
2、tem.out.println();2.定义一个类 Student,属性为学号、姓名和成绩;方法为增加记录 SetRecord 和得到记录GetRecord。SetRecord 给出学号、姓名和成绩的赋值,GetRecord 通过学号得到考生的成绩。publicpublic classclass Student/*paramparam args*/privateprivate intint ID;privateprivate String name;privateprivate floatfloat score;publicpublic voidvoid SetRecord(intint ID
3、,String name,floatfloat score)publicpublic floatfloat getRecord(intint ID)ifif(ID=thisthis.ID)returnreturn thisthis.score;elseelsereturnreturn-1;/TODOTODO Auto-generated method stubStudent s=newnew Student();s.SetRecord(0,alex,100);floatfloat Sco=s.getRecord(0);System.out.print(Sco);thisthis.ID=ID;t
4、histhis.name=name;thisthis.score=score;publicpublic staticstatic voidvoid main(String args)3.给出上题中设计类的构造函数,要求初始化一条记录(学号、姓名、成绩)。4.publicpublic classclass Student 5.6./*7.*paramparam args8.*/9.privateprivate intint ID;10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.
5、publicpublic staticstatic voidvoid main(String args)/TODOTODO Auto-generated method stubStudent s=newnew Student(0,sdfs,12);/s.SetRecord(0,alex,100);floatfloat Sco=s.getRecord(0);System.out.print(Sco);privateprivate String name;privateprivate floatfloat score;Student(intint ID,String name,floatfloat
6、 score)publicpublic voidvoid SetRecord(intint ID,String name,floatfloat score)publicpublic floatfloat getRecord(intint ID)ifif(ID=thisthis.ID)returnreturn thisthis.score;elseelsereturnreturn-1;thisthis.ID=ID;thisthis.name=name;thisthis.score=score;thisthis.ID=0;thisthis.name=666;thisthis.score=65;4.
7、编写程序,测试字符串“你好,欢迎来到 Java 世界”的长度,将字符串的长度转换成字符串进行输出,并对其中的“Java”四个字母进行截取,输出截取字母以及它在字符串中的位置。publicpublic classclass StringTest/*paramparam args*/publicpublic staticstatic voidvoid main(String args)/TODOTODO Auto-generated method stubString str=你好,欢迎来到Java世界;intint length=str.length();charchar stringArr=s
8、tr.toCharArray();/System.out.print(stringArr);forfor(intint i=0;ilength;i+)/System.out.print(stringArri);/System.out.print(stringArr0);ifif(J=stringArri)System.out.print(i);1.自己设计一个坐标类,能提供以下方法如求当前坐标和其他坐标之间的距离等方法,要求所有变量为私有变量,并提供两个构造函数。publicpublic classclass XYdistance publicpublic intint getY()publi
9、cpublic staticstatic voidvoid main(String args)/TODOTODO Auto-generated method stubXYdistance m_1=newnew XYdistance();m_1.setX(10);m_1.setY(10);XYdistance m_2=newnew XYdistance();doubledoublereturnreturn y;publicpublic voidvoid setY(intint y)thisthis.y=y;publicpublic intint getX()returnreturn x;priv
10、ateprivate intint x;privateprivate intint y;XYdistance()publicpublic voidvoid setX(intint x)thisthis.x=x;setX(0);setY(0);distance=(m_1.getX()-m_2.getX()*(m_1.getX()-m_2.getX()+(m_1.getY()-m_2.getY()*(m_1.getY()-m_2.getY();doubledouble result=Math.sqrt(distance);System.out.println(result);编写使用静态变量统计一
11、个类产生的实例对象的个数的程序?publicpublic classclass Static privateprivate staticstatic intint number;publicpublic Static()/number=number+1;+number;/System.out.println(+number);publicpublic staticstatic voidvoid main(String args)/TODOTODO Auto-generated method stubnewnew Static();/m_1.Static();System.out.println
12、(Static.number);创建 string 对象过程的内存分配:常量池常量池(ConstantConstant PoolPool):指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。JVM 虚拟机为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集和,包括直接常量(String,Integer 和Floating point 常量)和对其他类型,字段和方法的符号引用。对于 String 常量,它的值是在常量池中的。而 JVM 中的常量池在内存当中是以表的形式存在的,对于 String 类型,有一张固定长度的 CONSTANT_String_inf
13、o 表用来存储文字字符串值,注意:该表只存储文字字符串值,不存储符号引用。1 1、String s=abc;String s=abc;创建过程分析创建过程分析:在 class 文件被 JVM 装载到内存中,JVM 会创建一块 String Pool(String 缓冲池)。当执行 String s=“abc”;时,JVM 首先在 String Pool中查看是否存在字符串对象“abc”(如何查看呢?用 equals()方法判断),如果已存在该对象,则不用创建新的字符串对象“abc”,而直接使用 String Pool中已存在的对象“abc”,然后将引用 s 指向该对象;如果不存在该对象,则先在
14、 String Pool 中创建一个新的字符串对象“abc”,然后将引用 s 指向 StringPool 中创建的新对象。注意:使用“字符串常量”引号创建的字符串对象时,在编译期就已经确定将注意:使用“字符串常量”引号创建的字符串对象时,在编译期就已经确定将该对象存储到该对象存储到 String PoolString Pool 中了。因此,String s=“abc”只会在编译期,中了。因此,String s=“abc”只会在编译期,在在 String PoolString Pool 中创建一个对象。中创建一个对象。例如:Java 代码1.Strings1=abc;2.Strings2=abc
15、;3.System.out.println(s1=s2);/true结果说明结果说明:JVM 创建了两个引用 str1 和 str2,但在 String Pool 中只创建了一个对象,而且两个引用都指向了同一个对象。2 2、String s=new String(abc);String s=new String(abc);创建过程分析创建过程分析:当执行String s=new String(“abc”);时,JVM 首先在 StringPool 中查看是否存在字符串对象“abc”,如果不存在该对象,则先在 StringPool 中创建一个新的字符串对象“abc”,然后执行 new Strin
16、g(“abc”)构造方法,在Heap里又创建一个新的字符串对象“abc”(new出来的对象都放在Heap里面),并将引用 s 指向 Heap 中创建的新对象;如果已存在该对象,则不用创建新的字符串对象“abc”,而直接使用 String Pool 中已存在的对象“abc”,然后执行 new String(“abc”)构造方法,在 Heap 里又创建一个新的字符串对象“abc”,并将引用 s 指向 Heap 中创建的新对象。注意:使用注意:使用 new Stringnew String(“”)创建的字符串对象时,会在运行期创建新对象(“”)创建的字符串对象时,会在运行期创建新对象存储到存储到 H
17、eapHeap 中。因此,中。因此,new Stringnew String(“abc”)创建字符串对象时,会创建(“abc”)创建字符串对象时,会创建 2 2个对象,编译期在个对象,编译期在 String PoolString Pool 中创建一个,运行时中创建一个,运行时 HeapHeap 中创建一个。中创建一个。这里使用了Java 代码1.publicString(Stringoriginal)这个构造方法,作用:初始化一个新创建的作用:初始化一个新创建的 StringString 对象,使其表示一个与参数对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副
18、本。相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。由于 Sring 类是不可变的,因而不必使用该构造方法,除非需要 original 的显式副本。例如:Java 代码1.Strings1=newString(abc);2.Strings2=newString(abc);3.System.out.println(s1=s2);/false结果说明结果说明:只要是用 new()来新建对象的,都会在堆(Heap)中创建,而且其字符串是单独存值的,即使与 String Pool中的数据相同,也不会与 String Pool中的数据共享。例程 1:Java 代码1.Strings1=ab
19、cdef;2.Strings2=abcdef;3.Strings3=abc+def;/编译期自动优化为Strings3=abcdef;4.System.out.println(s1=s2);5.System.out.println(s1=s3);6.System.out.println(s2=s3);运行结果:truetruetrue结果说明结果说明:字符串常量生成的字符串对象在String Pool 中只有一个拷贝,且它是在编译期就被确定了,所以“s1=s2”;“abc”和“def”都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己也肯定是字符串常量(它在编译期就被解析为一个字符
20、串对象了,即 class 文件中就已经存在“abcdef”),所以在字符串生成字符串对象时,s3 也是 String Pool 中“abcdef”的一个引用。故 JVM 对于字符串常量的+号连接,在程序编译期,JVM 就将常量字符串的+连接优化为连接后的值。例程 2:Java 代码1.Strings1=abc;2.Strings2=def;3.Strings3=abcdef;4.Strings4=abc+def;5.Strings5=s1+def;6.Strings6=abc+s2;7.Strings7=s1+s2;8.System.out.println(s3=s4);9.System.ou
21、t.println(s3=s5);10.System.out.println(s3=s6);11.System.out.println(s3=s7);运行结果如下:truefalsefalsefalse结果说明:JVM 对于有字符串引用存在的字符串+连接中,而引用的值在程序编译期是无法确定的,即 s1+“def”无法被编译器优化,只有在程序运行期来动态分配并将连接后的新地址赋给 s5。例程 3:Java 代码1.finalStrings1=abc;2.Strings2=def;3.Strings3=abcdef;4.Strings4=abc+def;5.Strings5=s1+def;6.St
22、rings6=abc+s2;7.Strings7=s1+s2;8.System.out.println(s3=s4);9.System.out.println(s3=s5);10.System.out.println(s3=s6);11.System.out.println(s3=s7);运行结果如下:truetruefalsefalse例程 4:Java 代码1.finalStrings1=abc;2.finalStrings2=def;3.Strings3=abcdef;4.Strings4=abc+def;5.Strings5=s1+def;6.Strings6=abc+s2;7.Str
23、ings7=s1+s2;8.System.out.println(s3=s4);9.System.out.println(s3=s5);10.System.out.println(s3=s6);11.System.out.println(s3=s7);运行结果如下:truetruetruetrue结果说明:例程 3 和例程 4 与例程 2 的区别是,例程 3 在字符串 s1 前加了 final修饰,例程 4 在字符串 s1 和 s2 前都加了 final 修饰。对于 final 修饰的变量,它在编译时被解析为常量值的一个本地拷贝存储到自己的常量池中或嵌入到它的字节码流中。所以此时的 s1+“d
24、ef”和abc+def效果是一样的。接着后面两个含引用的字符串连接,JVM 会进行相同的处理。故上面程序后面三个的结果为 true。例程 5:Java 代码1.public2.3.4.5.staticvoidmain(Stringargs)Strings1=abc;finalStrings2=getDef();Strings3=abcdef;Strings4=abc+s2;6.Strings5=s1+s2;7.System.out.println(s3=s4);8.System.out.println(s3=s5);9.Java 代码1.privatestaticStringgetDef()2
25、.returndef;3.程序运行结果如下:falsefalse结果说明:JVM 对于方法调用给字符串引用赋值的情况,引用指向字符串的值在编译期是无法确定的,只有在程序运行调用方法后,将方法的返回值“def”和“abc”动态连接并分配新地址赋值给 s4,所以上述程序的结果都为 false。通过以上的例子可知:Java 代码1.Strings=a+b+c;等价于:Java 代码1.Strings=abc;编译期,直接优化,进行常量连接。对于:Java 代码1.String2.String3.String4.Stringabcs=a;b;c;a+b+c;就不等价于:等价于:Java 代码1.Str
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 java 练习题 答案
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内