您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > Java基础作业详解及答案
Java基础语句作业详解及答案1.编写程序,用数组实现乘法小九九的存储和输出。【提示:采用多个一维数组。】publicclassMultipation{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubintx[][]=newint[9][9];for(inti=0;i9;i++){for(intj=0;j9;j++){if(i=j){intm=i+1;intn=j+1;x[i][j]=m*n;System.out.print(m+*+n+=+x[i][j]);}}System.out.println();}}}2.定义一个类Student,属性为学号、姓名和成绩;方法为增加记录SetRecord和得到记录GetRecord。SetRecord给出学号、姓名和成绩的赋值,GetRecord通过学号得到考生的成绩。publicclassStudent{/***@paramargs*/privateintID;privateStringname;privatefloatscore;publicvoidSetRecord(intID,Stringname,floatscore){this.ID=ID;this.name=name;this.score=score;}publicfloatgetRecord(intID){if(ID==this.ID)returnthis.score;elsereturn-1;}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubStudents=newStudent();s.SetRecord(0,alex,100);floatSco=s.getRecord(0);System.out.print(Sco);}}3.给出上题中设计类的构造函数,要求初始化一条记录(学号、姓名、成绩)。4.publicclassStudent{5.6./**7.*@paramargs8.*/9.privateintID;10.privateStringname;11.privatefloatscore;12.13.Student(intID,Stringname,floatscore){14.this.ID=0;15.this.name=666;16.this.score=65;17.}18.publicvoidSetRecord(intID,Stringname,floatscore){19.this.ID=ID;20.this.name=name;21.this.score=score;22.}23.publicfloatgetRecord(intID){24.if(ID==this.ID)25.returnthis.score;26.else27.return-1;28.}29.30.publicstaticvoidmain(String[]args){31.//TODOAuto-generatedmethodstub32.Students=newStudent(0,sdfs,12);33.//s.SetRecord(0,alex,100);34.floatSco=s.getRecord(0);35.System.out.print(Sco);36.}37.}4.编写程序,测试字符串“你好,欢迎来到Java世界”的长度,将字符串的长度转换成字符串进行输出,并对其中的“Java”四个字母进行截取,输出截取字母以及它在字符串中的位置。publicclassStringTest{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubStringstr=你好,欢迎来到Java世界;intlength=str.length();char[]stringArr=str.toCharArray();//System.out.print(stringArr);for(inti=0;ilength;i++){//System.out.print(stringArr[i]);//System.out.print(stringArr[0]);if('J'==stringArr[i]){System.out.print(i);}}}}1.自己设计一个坐标类,能提供以下方法如求当前坐标和其他坐标之间的距离等方法,要求所有变量为私有变量,并提供两个构造函数。publicclassXYdistance{privateintx;privateinty;XYdistance(){setX(0);setY(0);}publicvoidsetX(intx){this.x=x;}publicintgetX(){returnx;}publicvoidsetY(inty){this.y=y;}publicintgetY(){returny;}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubXYdistancem_1=newXYdistance();m_1.setX(10);m_1.setY(10);XYdistancem_2=newXYdistance();doubledistance=(m_1.getX()-m_2.getX())*(m_1.getX()-m_2.getX())+(m_1.getY()-m_2.getY())*(m_1.getY()-m_2.getY());doubleresult=Math.sqrt(distance);System.out.println(result);}}编写使用静态变量统计一个类产生的实例对象的个数的程序?publicclassStatic{privatestaticintnumber;publicStatic(){//number=number+1;++number;//System.out.println(++number);}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubnewStatic();//m_1.Static();System.out.println(Static.number);}}创建string对象过程的内存分配:常量池(ConstantPool):指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。JVM虚拟机为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集和,包括直接常量(String,Integer和Floatingpoint常量)和对其他类型,字段和方法的符号引用。对于String常量,它的值是在常量池中的。而JVM中的常量池在内存当中是以表的形式存在的,对于String类型,有一张固定长度的CONSTANT_String_info表用来存储文字字符串值,注意:该表只存储文字字符串值,不存储符号引用。1、Strings=abc;创建过程分析:在class文件被JVM装载到内存中,JVM会创建一块StringPool(String缓冲池)。当执行Strings=“abc”;时,JVM首先在StringPool中查看是否存在字符串对象“abc”(如何查看呢?用equals()方法判断),如果已存在该对象,则不用创建新的字符串对象“abc”,而直接使用StringPool中已存在的对象“abc”,然后将引用s指向该对象;如果不存在该对象,则先在StringPool中创建一个新的字符串对象“abc”,然后将引用s指向StringPool中创建的新对象。注意:使用“字符串常量”引号创建的字符串对象时,在编译期就已经确定将该对象存储到StringPool中了。因此,Strings=“abc”只会在编译期,在StringPool中创建一个对象。例如:Java代码1.Strings1=abc;2.Strings2=abc;3.System.out.println(s1==s2);//true结果说明:JVM创建了两个引用str1和str2,但在StringPool中只创建了一个对象,而且两个引用都指向了同一个对象。2、Strings=newString(abc);创建过程分析:当执行Strings=newString(“abc”);时,JVM首先在StringPool中查看是否存在字符串对象“abc”,如果不存在该对象,则先在StringPool中创建一个新的字符串对象“abc”,然后执行newString(“abc”)构造方法,在Heap里又创建一个新的字符串对象“abc”(new出来的对象都放在Heap里面),并将引用s指向Heap中创建的新对象;如果已存在该对象,则不用创建新的字符串对象“abc”,而直接使用StringPool中已存在的对象“abc”,然后执行newString(“abc”)构造方法,在Heap里又创建一个新的字符串对象“abc”,并将引用s指向Heap中创建的新对象。注意:使用newString(“”)创建的字符串对象时,会在运行期创建新对象存储到Heap中。因此,newString(“abc”)创建字符串对象时,会创建2个对象,编译期在StringPool中创建一个,运行时Heap中创建一个。这里使用了Java代码1.publicString(Stringoriginal)这个构造方法,作用:初始化一个新创建的String对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。由于Sring类是不可变的,因而不必使用该构造方法,除非需要original的显式副本。例如:Java代码1.Strings1=newString(abc);2.Strings2=newString(abc);3.System.out.println(s1==s2);//false结果说明:只要是用new()来新建对象的,都会在堆(Heap)中创建,而且其字符串是单独存值的,即使与StringPool中的数据相同,也不会与StringPool中的数据共享。例程1:Java代码1.Strings1=abcdef;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结果说明:字符串常量生成的字符串对象在StringPool中只有一个拷贝,且它是在编译期就被确定了,所以“s1==s2”;“abc”和“def”都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己也肯定是字符串常量(它在编译期就被解析为一个字符串对象了,即class文件中就已经存在“abcdef”),所以在字符串生成字符串对象时,s3也是StringPool中“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.out.println(s3==s5);10.System.out.println(s3==s6);11.System.out.p
本文标题:Java基础作业详解及答案
链接地址:https://www.777doc.com/doc-2880801 .html