Java经典练习题.doc
Java基础试题一、选择题1编译Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为( B )。 A. .java B. .class C. .html D. .exe2、设 x = 1 , y = 2 , z = 3,则表达式 yz/x 的值是( A )。 A. 3 B. 3. 5 C. 4 D. 53、main方法是Java Application程序执行的入口点,关于main方法的方法头以下哪项是合法的( B )?A、public static void main()B、public static void main( String args )C、public static int main(String arg )D、public void main(String arg )44.Which of the following is not a valid comment:Da. /* comment */ b. /* comment */ c. /* comment d. / comment 5. Java中char类型的数据长度为 :C(A)8位 (B)16位 (C)32位 (D)64位 6.下面哪个表达式是错误的: B(A)int i = 100; (B)float f = 100.0; (C)Object o = “Hello world”; (D)char c = u1234; 7.下面哪个语句是正确的:C (A)byte s = 256; (B)String s = Hello world; (C)int x = 012; (D)char c = “a”; 8.下列叙述中,正确的是:AA)声明变量时必须指定一个类型 B)Java认为变量number与Number相同C)Java中唯一的注释方式是"/" D)源文件中public类可以有0或多个9.下列属于合法的Java标识符是:DA)"ABC" B)&5678 C)+rriwo D)saler10.下面哪个标识符是不合法的:D (A)s1 (B)$1 (C)_1 (D)1s 11在switch(expression)语句中,expression的数据类型不能是:A A)double B)char C)byte D)short12已知:int a = new int100;在下列给出的数组元素中,非法的是:D A)a0 B)a1 C)a99 D)a10013下列的哪个赋值语句是不正确的?: AAfloat f = 11.1; Bdouble d = 5.3E12; Cfloat d = 3.14f ; Ddouble f=11.1E10f; 14下列的哪个赋值语句是正确的?D Achar a=12; Bint a=12.0; Cint a=12.0f; Dint a=(int)12.0; 15下面关于数组的定义错误的是( B )A) int a=1,2,3,4,5,6; B) int a6=1,2,3,4,5,6 C) int a; D)int a=new int6;( 以下为多项选择)16下面哪些代码可以正确编译 ( AC )(A)double d = 1.0; int i = 1; if(d = i) System.out.println(“Hello world”); (B)int i = 1; int j = 2; if(i = 1 && j = 2) System.out.println(“Hello world”); (C)boolean b1 = true, b2 = false; if(b1 = b2) System.out.println(“Hello world”); (D)int i = 0; if(i) System.out.println(“Hello world”); 17.下面的哪些声明是合法的?AC (A)int a; (B)int a5; (C)int a; (D)int a = 5; 18. 下面哪些类型是Java的基本数据类型 ABD(A)int (B)boolean (C)String (D)double 二、填空题 1.JVM是( Java虚拟机 ),JDK是( Java开发工具包 ),appletviewer是(小应用程序阅览器) 。 2. Java源程序经编译生成的字节码文件的扩展名为( class )3. Java语言的主要贡献者是( James Gosling (詹姆斯·戈士林) )。4在JDK中,Java语言的编译命令是_Javac.exe_,Java语言的执行命令是java .exe_。5写出以下表达式的结果:1) 5 % 6 / 3 =( 1 ) 2) true && false =( false ) 3) 5 >> 3 =( 0 ) 4) 12 -4 =( -16 ) 6.设有数组定义:int a = 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 ; 则执行下列几个语句后的输出结果是33 66 99 。 for ( int i = 0 ; i < a.length ; i + ) if( ai%3=0 )System.out.print(ai+" ");三、简答题1.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,String 都不能用于swtich中的表达式(JDK 7以后可以作用于String)。2.一个".java"源文件中是否可以包括多个类?有什么限制?可以。必须只有一个类名与文件名相同3 简述Java语言实现平台无关(跨平台)性的原理。J Java程序经过编译,会生成字节码文件,而字节码可以在任何安装了Java虚拟机的平台上运行,Java虚拟机类似一个模拟执行环境,在不同的操作系统上拥有不同的Java虚拟机实现,但是这些Java虚拟机遵循统一的规范来解释class文件,并将class文件中的指令转换为本地操作系统对应的指令,这样就实现了相同的class文件可以通过Java虚拟机转换为对应操作系统上的对应指令,实现class文件,即Java程序的跨平台性。4 说明Java语言中三种注释的语法格式,以及用途。Java语言中注释的语法有三种:单行注释、多行注释和文档注释。1) 单行注释, 单行注释指只能书写一行的注释。用于对于代码进行简单的说明, 单行注释的语法格式为: /注释内容 2) 多行注释: 多行注释指可以书写任意多行的注释。多行注释一般用于说明比较复杂的内容,例如程序逻辑或算法实现原理等。多行注释的语法格式为: /* 注释内容 */ 3)文档注释:文档注释指可以被提取出来形成程序文档的注释格式,这是Java语言有特色的注释格式。一般对于程序程序的结构进行说明,例如类、属性、方法和构造方法进行说明,文档注释的语法格式为: /* 注释内容 */5请把以下英文翻译成中文:When you compile a program written in the Java programming language, the compiler converts the human-readable source file into platform-independent code that a Java Virtual Machine can understand. This platform-independent code is called Bytecode. 窗体顶端当你在编译Java编程语言编写的程序,编译器转换成平台无关的代码,Java虚拟机能够理解人类可读的源文件。这个平台无关的代码被称为字节码。 第二章注意问题: main函数是Java应用程序执行的入口。(int)23.7结果为23(int)-45.89f结果为-45+”除字符串相加功能外,还能把非字符串转换成字符串 ,如: “x”+123;的结果是“x123” 。 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了1, 三元运算符 class TernaryOp public static void main(String args) int salary,daysPresent = 30; salary = daysPresent = 20 ? 2000 : 3000; System.out.println("您本月薪资为 $"+salary); ,编写一个程序,这个程序从键盘上输入2个数,然后求这2个数的和,程序结束。提示:调用System.in.read();可以读取到一个从键盘上输入字符对应的整数。通过这个程序,你一定能体会到在什么 import java.io.*;public class Ch1 public static void main(String args) throws IOExceptionBufferedReader ke=new BufferedReader(new InputStreamReader(System.in);String x;int p,q,m;System.out.print("请输入第一个数");x=ke.readLine();p=Integer.parseInt(x);System.out.print("请输入第二个数");x=ke.readLine();q=Integer.parseInt(x);m=p+q;System.out.println("两个数的和为:"+m); ,数组public class Lo public static void main(String args) int aa=32,55,69;for(int i=0;i<aa.length;i+)System.out.print(aai+” “); System.out.println( );,输入一个年份,判断它是不是闰年。闰年: 能被4整除但不能被100整除,或者能被400整除。public class ex3_1 public static void main(String args) throws IOException int year; boolean IsLeapYear; System.out.println("Enter the year:"); BufferedReader in =new BufferedReader( new InputStreamReader(System.in); year=(new Integer(in.readLine().intValue();IsLeapYear=(year%4=0 && year%100 != 0)|(year%400 = 0); if (IsLeapYear) System.out.print(year); System.out.println( "is a leap year"); else System.out.print(year); System.out.println( "is not a leap year"); ,输入两个整数比较大小import java.io.*;public class ex3_2 public static void main(String args)throws IOException int x,y; BufferedReader in = new BufferedReader( new InputStreamReader(System.in); System.out.println("Enter x and y:"); x=(new Integer(in.readLine().intValue(); y=(new Integer(in.readLine().intValue(); if (x!=y) if (x>y) System.out.println("x>y"); else System.out.println("x<y"); else System.out.println("x=y"); ,已知一个学生的分数,给出其分数等级。90-100分为级;80-89分为B级;70-79分为级;60-69分为D级;0-59分为E级public class IfElseDemo public static void main(String args) int testscore = 76; char grade; if (testscore >= 90) grade = 'A' else if (testscore >= 80) grade = 'B' else if (testscore >= 70) grade = 'C' else if (testscore >= 60) grade = 'D' else grade = 'F' System.out.println("Grade = " + grade); ,输入06之间的某一个整数,然后把它转换成星期 输出。(0对应星期日)import java.io.*;public class ex3_3 public static void main(String args)throws IOException int day; BufferedReader in =new BufferedReader( new InputStreamReader(System.in); day=(new Integer(in.readLine().intValue();switch (day) case 0: System.out.println("Sunday"); break; case 1: System.out.println("Monday"); break;case 2: System.out.println("Tuesday"); break; case 3: System.out.println("Wednesday"); break; case 4: System.out.println("Thursday"); break; case 5: System.out.println("Friday"); break; case 6: System.out.println("Saturday"); break; default: System.out.println("Day out of range Sunday .Saturday" ); break; ,打印九九乘数表public class MultiTable public static void main(String args) for (int i=1; i<=9;i+) for (int j=1; j<=i;j+) System.out.print(" "+i+"*"+j+"="+i*j); System.out.println(); ,输入一个整数,输出它所有的因数import java.io.*;public class ex3_7 public static void main(String args) throws IOException int n,k; BufferedReader in =new BufferedReader( new InputStreamReader(System.in); System.out.println("Enter a positive integer: "); n=(new Integer(in.readLine().intValue(); System.out.print("Number "+n+" Factors "); for (k=1; k <= n; k+) if (n % k = 0) System.out.print(k + " "); System.out.println(); ,计算数列1,2,10 的和。public class ex3_4 public static void main(String args) int i=1, sum=0; while(i<=10) sum+=i; i+; System.out.println("sum="+sum); ,计算存款收益:假设银行中存款10000元,按11.25%的利率,一年后连本带利将变为11125元。你若将此款继续存入银行,试问多长时间就会连本带利翻一番import java.text.*;public class Examp3_4 public static void main(String args) double original,money,interest; int years = 0; original = money= 10000; interest = 11.25 / 100; System.out.println("year money");while (money < 2 * original) years = years + 1; money = money + (interest * money); System.out.println(" " + years + " " + new DecimalFormat("0.00").format(money); System.out.println(); System.out.println(" 第 " + years + " 年存款额达到 " + new DecimalFormat("0.00").format(money) + "元。"); 编写一个程序用选择法对数组a=20,10,50,40,30,70,60,80,90,100进行由大到小的排序。import java.io.*;public class SelectSortpublic static void main(String args)int a=20,10,50,40,30,70,60,80,90,100;int temp;for (int i=0; i<a.length-1;i+)for (int j=i+1; j<a.length ; j+)if (ai<aj) temp=ai;ai=aj;aj=temp;for (int k=0;k<a.length ;k+)System.out.println("a"+k+":"+ak);第,章一、1. 利用接口继承完成对生物、动物、人三个接口的定义。其中生物接口定义呼吸抽象方法;2. 动物接口除具备生物接口特征之外,还定义了吃饭和睡觉两个抽象方法;3. 人接口除具备动物接口特征外,还定义了思维和学习两个抽象方法。4. 定义一个学生类实现上述人接口。(25分)1 interface Biologyvoid breath();interface Animal extends Biologyvoid eat();void sleep();interface Human extends Animal void think();void study();class Student implements Humanvoid breath()System.out.println(“breathing”);void eat()System.out.println(“eating”);void sleep()System.out.println(“sleeping”);void think()System.out.println(“thinking”);void study()System.out.println(“study”);二、1、 定义一个接口CanFly,描述会飞的方法public void fly();2、 分别定义类飞机和鸟,实现CanFly接口。3、定义一个测试类,测试飞机和鸟。测试类中定义一个makeFly()方法,让会飞的事物飞起来。4、然后在main方法中创建飞机对象和鸟对象,并在main方法中调用makeFly()方法,让飞机和鸟起飞。interface CanFlypublic void fly();class AirPlane implements CanFlypublic void fly()System.out.println(“airplane is flying”);class Bird implements CanFlypublic void fly()System.out.println(“Bird is flying”);class Teststatic makeFly(CanFly obj)obj.fly();public static void main(String args)AirPlane ap = new AirPlane();Bird b = new Bird();makeFly(ap);makFly(b);三、实现一个名为Person的类和它的子类Employee, Manager是Employee的子类,设计一个接口Add用于涨工资,普通员工一次能涨10,经理能涨20。具体要求如下:(1)Person类中的属性有:姓名name(String类型),地址address(String类型),定义该类的构造方法;(2)Employee类中的属性有:工号ID(String型),工资wage(double类型),工龄(int型),定义该类的构造方法;(3)Manager类中的属性有:级别level(String类型)定义该类的构造方法;(4)编写一个测试类,产生一个员工和一个经理给该员工和经理涨工资,并输出其具有的信息。实现代码:class Person /Person类private String name; /姓名private String address; /地址public Person(String n,String a) /定义该类的构造方法this.setName(n);this.setAddress(a);public void setName(String n)this.name = n;public void setAddress(String a)this.address = a;public String getName()return this.name;public String getAddress()return this.address;class Empolyee extends Person /Employee是Person的子类private int employeeNo; /工号private double pay; /工资private int age; /工龄public Empolyee(String name,String address,int empolyeeNO,double pay,int age) /定义该类的构造方法super(name,address); /引用父类的构造方法this.setEmployeeNo(empolyeeNO);this.setPay(pay);this.setAge(age);public void setEmployeeNo(int e)this.employeeNo = e;public void setPay(double p)this.pay = p;public void setAge(int a)this.age = a;public int getEmployeeNo()return this.employeeNo;public double getPay()return this.pay;public int getAge()return this.age;class Manager extends Empolyee /Manager是Employee的子类private int level; /级别public Manager(String name,String address,int empolyeeNO,double pay,int age,int level) /定义该类的构造方法super(name,address,empolyeeNO,pay,age); /引用父类的构造方法this.setLevel(level);public void setLevel(int l)this.level = l;public int getLevel()return this.level;public void printInfo() /输出员工信息System.out.println("姓名:"+this.getName()+",工号:"+this.getEmployeeNo()+",工龄:"+this.getAge()+",级别:"+this.getLevel()+",地址:"+this.getAddress();System.out.println("原工资:"+this.getPay();System.out.println("涨工资后的工资:"+new Add().addPay(this.getLevel(), this.getPay();class Add /设计一个Add类用于涨工资public double addPay(int level,double pay)if(level=0) /0表示普通员工pay = (1+0.1)*pay;else if(level=1) /1则表示经理pay = (1+0.2)*pay;else /操作无效System.out.println("级别只能为0或1,0表示普通员工,1则表示经理,操作无效!");return pay;public class ExtendsDemo public static void main(String args) Manager m1 = new Manager("张三","南京路",0001,2000,10,0);Manager m2 = new Manager("李四","长江路",0002,3000,15,1);m1.printInfo();System.out.println("*");m2.printInfo();四、1、用面向对象的思想定义一个接口Area,其中包含一个计算面积的方法CalsulateArea()2、然后设计MyCircle和MyRectangle两个类都实现这个接口中的方法CalsulateArea()(3、分别写出两个类中的构造方法并计算圆和矩形的面积 4、在Circle类中增加方法改变圆的半径,在Circle类中增加fitsInside方法判断一个圆是否在一个矩形内,、最后写出测试以上类和方法的程序。五、编写一个完整的Java程序复数类Complex,使两个复数,如 1+2i 和3+4i 相加产生一个新的复数 4+6i 。复数类Complex必须满足如下要求:(1)、复数类Complex 的属性有: realPart : int型,代表复数的实数部分imaginPart : int型,代表复数的虚数部分定义该类的构造方法(2)、复数类Complex 的方法有:构造方法一,将复数的实部和虚部都置0 构造方法二,形参 r 为实部的初值,i为虚部的初值。(3)complexAdd方法: 将当前复数对象与形参复数对象相加,所得的结果仍是一个复数值,返回给此方法的调用者。 (4)toString( ) 方法: 把当前复数对象的实部、虚部组合成 a+bi 的字符串形式,其中a和b分别为实部和虚部的数据。 答案:public class Complexprivate int realPart;private int imagePart;public Complex(int r,int i)this.realPart = r;this.imagePart = i;pu