java练习题
- 格式:doc
- 大小:55.00 KB
- 文档页数:11
Java⽇常练习题,每天进步⼀点点(11)⽬录1、对接⼝的描述正确的是()2、类中的数据域使⽤private修饰为私有变量,所以任何⽅法均不能访问它。
3、已知如下类定义:4、在java的⼀个异常处理中,可以包含多个的语句块是()。
5、关于Java语⾔中的final关键字的使⽤,下列说法正确的是()6、在 main() ⽅法中给出的整型数组,如果将其写到⼀个⽂件中,需要()。
7、下列有关Servlet的⽣命周期,说法不正确的是?8、What is displayed when the following is executed?9、假定Base b = new Derived(); 调⽤执⾏b.methodOne()后,输出结果是什么?10、下⾯关于变量及其范围的陈述哪些是不正确的()答案汇总:总结承蒙各位厚爱,我们⼀起每天进步⼀点点!(⿏标选中空⽩处查看答案)1、对接⼝的描述正确的是()正确答案: A⼀个类可以实现多个接⼝接⼝可以有⾮静态的成员变量在jdk8之前,接⼝可以实现⽅法实现接⼝的任何类,都需要实现接⼝的⽅法题解:A,⼀个类只能有⼀个直接⽗类,但是继承是有传递性的。
⼀个类可以实现多的接⼝。
⼀个接⼝可以继承多个类。
B,接⼝中没有普通变量(普通成员变量),接⼝中都是常量,默认修饰符:public static finalC,JDK8之前,接⼝中的⽅法都是默认public abstract的,JDK8之后,接⼝中可以有static、default的修饰的⽅法,⼀旦被修饰,⽅法必须有⽅法体(抽象⽅法可是没有⽅法体的),接⼝中的⽅法都不能被private和protected 修饰,同时外部接⼝、类只能被public修饰或者不写,但是内部接⼝、类可以被四个访问修饰符修饰。
D,实现接⼝,其实就是需要重写接⼝中的abstract⽅法,⼀旦实现的类没有重写完,那么这个类必须是个抽象类(抽象类中可以没有抽象⽅法,但是有抽象⽅法的类必须是抽象类)。
java试题库及答案Java试题库及答案一、单选题1. Java语言的特点是什么?A. 面向过程B. 面向对象C. 编译型语言D. 解释型语言答案:B2. 在Java中,用哪个关键字可以定义一个类?A. publicB. classC. voidD. int答案:B3. 下列哪个是Java的合法标识符?A. 2classB. class#2C. _class2D. class:2答案:C4. Java中的main()方法必须定义为什么类型的参数?A. intB. StringC. voidD. None答案:D5. 在Java中,哪个关键字用于实现异常处理?A. tryB. catchC. throwD. All of the above答案:D二、多选题6. 下列哪些是Java的基本数据类型?A. intB. StringC. floatD. boolean答案:A, C, D7. 在Java中,哪些是合法的数组初始化方式?A. int[] arr = new int[10];B. int arr[] = {1, 2, 3};C. int arr = {1, 2, 3};D. int arr = new int[3]{1, 2, 3};答案:A, B8. 下列哪些是Java的控制流语句?A. if-elseB. switch-caseC. forD. try-catch答案:A, B, C三、简答题9. 简述Java的垃圾回收机制。
答案:Java的垃圾回收机制是一种自动内存管理功能,它周期性地执行,回收不再使用的对象所占用的内存空间。
垃圾回收器会跟踪每个对象的引用,当对象的引用计数为0时,即没有任何引用指向该对象,垃圾回收器就会在下一次执行时回收该对象占用的内存。
10. 什么是Java的接口?它有什么作用?答案:Java中的接口是一种完全抽象的类,它不包含任何实现代码,只包含常量和抽象方法的声明。
Java⽇常练习题,每天进步⼀点点(60)⽬录1、假设 A 类有如下定义,设 a 是 A 类同⼀个包下的⼀个实例,下列语句调⽤哪个是错误的?()2、Java中基本的编程单元为:3、下列代码的执⾏结果是:()4、给定以下JAVA代码,这段代码运⾏后输出的结果是()5、以下哪⼀项正则能正确的匹配⽹址: /video/av21061574 ()6、下列关于异常处理的描述中,错误的是()。
7、以下哪项不属于java类加载过程?8、对于⽂件的描述正确的是()9、有关hashMap跟hashtable的区别,说法正确的是?10、java中 String str = "hello world"下列语句错误的是?答案汇总:总结承蒙各位厚爱,我们⼀起每天进步⼀点点!(⿏标选中空⽩处查看答案)1、假设 A 类有如下定义,设 a 是 A 类同⼀个包下的⼀个实例,下列语句调⽤哪个是错误的?()class A{ int i; static String s; void method1() { } static void method2() { } }正确答案:CA System.out.println(a.i);B a.method1();C A.method1();D A.method2()题解:1、⾮静态⽅法只能通过实例对象来调⽤,不能直接通过类名调⽤。
静态⽅法(static)才能通过类名直接调⽤.2、类中变量:除了private权限外,其他权限的变量(没有表⽰默认default),均可以⽤“对象.变量名”来调⽤。
对于private变量,即使使⽤static,也不能⽤“类.变量名”来调⽤私有变量。
只能通过类中的public get()⽅法来调⽤。
类中⽅法:除了private权限外,其他权限的⽅法(没有表⽰默认default),均可以⽤“对象.⽅法名”来调⽤。
private ⽅法可以⽤java反射机制调⽤。
java基础50道经典练习题及答案Java基础50道经典练习题及答案Java作为一门广泛应用于软件开发领域的编程语言,其基础知识的掌握对于程序员来说至关重要。
为了帮助大家更好地理解和掌握Java的基础知识,下面将介绍50道经典的Java练习题及其答案。
1. 编写一个Java程序,打印输出"Hello, World!"。
```javapublic class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");}}```2. 编写一个Java程序,计算并打印输出1到100之间所有偶数的和。
```javapublic class SumOfEvenNumbers {public static void main(String[] args) {int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum += i;}System.out.println("Sum of even numbers: " + sum);}}```3. 编写一个Java程序,判断一个整数是否为素数。
```javapublic class PrimeNumber {public static void main(String[] args) {int number = 17;boolean isPrime = true;for (int i = 2; i <= Math.sqrt(number); i++) {if (number % i == 0) {isPrime = false;break;}}if (isPrime) {System.out.println(number + " is a prime number.");} else {System.out.println(number + " is not a prime number."); }}```4. 编写一个Java程序,将一个字符串反转并输出。
一、单选题1、下列构造方法的调用方式中,正确的是()。
A、按照一般方法调用B、由用户直接调用C、只能通过new 自动调用D、被系统调用2、在Java 中,能实现多重继承效果的方式是()A、内部类B、适配器C、接口D、同步3、在Java 中,所有类的根类是()。
A、ng.ObjetB、ng.ClassC、java.applet.AppletD、java.awt.Frame4、按照Java 的标识符命名规范,下列表示一个类的标识符正确的是()A、HelloworldB、HelloWorldC、helloworldD、helloWorld5、Java语言的类型是()A、面向对象语言B、面向过程语言C、汇编程序D、形式语言6、下列对继承的说法,哪个是正确的? ()A、子类能继承父类的所有方法和状态B、子类能继承父类的非私有方法和状态C、子类只能继承父类public方法和状态D、子类只能继承父类的方法,而不继承状态7、下列哪些内容是异常的含义?()异常是一个运行时错误7、()是不能被当前类的子类重新定义的方法。
A、抽象方法B、私有方法C、最终方法D、构造方法8、下列命令中,哪个命令是Java的编译命令?()A、javacB、javaC、javadocD、appletviewer9、下列有关Java语言的叙述中,正确的是()A、Java是不区分大小写的B、源文件名与public类型的类名必须相同C、源文件名其扩展名为.jarD、源文件中public类的数目不限10、若数组a定义为int[][]a=new int[3][4],则a是()A、一维数组B、二维数组C、三维数组D、四维数组11、下列关于Java语言特点的叙述中,错误的是( )A、Java支持分布式计算B、Java是面向过程的编程语言C、Java是跨平台的编程语言D、Java支持多线程12、用来导入已定义好的类或包的语句是()A、importB、mainC、public classD、class13、如要抛出异常,应用下列哪种子句?()A、catchB、throwC、tryD、finally14、下列的哪个选项可以正确用以表示十六进制值16?()A、0x8B、0x10C、08D、01015、要想定义一个不能被实例化的抽象类,在类定义中必须加上修饰符( )。
—— 学年第 学期 《 Java 程序设计 》课程试题 课程号: √ 考试 □ A 卷 √ 闭卷 □ 考查 □ B 卷 □ 开卷一、单项选择题(20题;每题2分,共40分) 1、下面选项中,___不可以用作变量名的首字符。
A )字母 B )下划线(_) C )数字 D )美元符号(¥) 答案:C (难度系数C )知识点:变量 2、下面语句中,____不会出现编译警告或错误。
A )float f=1.3; B )char c=”a”; C )byte b=25; D )boolean b=null; 答案:C (难度系数B )知识点:赋值相容 3、下列叙述正确的是___。
A )final 类可以有子类 B )abstract 类中只可以有 abstract 方法 C )abstract 类上可以有非abstract 方法,但该方法不可以用final 修饰 D )不可以同时用final 和abstract 修饰一个方法 答案:D (难度系数B ) 知识点:抽象类,抽象方法 4、创建一个标识有“关闭”按钮的语句是___。
A ) TextField b = new TextField(“关闭”);B ) Label b = new Label(“关闭”);C ) Checkbox b = new Checkbox(“关闭”);D ) Button b = new Button(“关闭”);答案:D (难度系数C ) 知识点:GUI 编程5、在编写异常处理的Java 程序中,每个catch 语句块都应该与___语句块对应,使得用该语句块来启动Java 的异常处理机制。
班级:姓名: 学号:试题共页加白纸张密封线A)if – else B)switch C)try D)throw答案:C(难度系数B)知识点:异常6、paint()方法使用_____类型的参数。
A)Graphics B)Graphics2D C)String D)Color 答案:A (难度系数B,知识点applet)7、下列语句正确的是________。
Java语⾔练习题库(含答案)单选题1. 为了保证⽅法的线程安全,声明⽅法的时候必须⽤哪个修饰符?(A) new(B) transient(C) void(D) synchronized2. 编译Java源⽂件使⽤哪个?(A) javac(B) jdb(C) javadoc(D) junit3. 哪⼀种类的对象中包含有Internet地址。
(A) Applet(B) Datagramsocket(C) InetAddress(D) AppletContext4. 有关GUI容器叙述,不正确的是?(A) 容器是⼀种特殊的组件,它可⽤来放置其它组件(B) 容器是组成GUI所必需的元素(C) 容器是⼀种特殊的组件,它可被放置在其它容器中(D) 容器是⼀种特殊的组件,它可被放置在任何组件中5. 使⽤javadoc⽣成的⽂档的⽂件格式是?(A) XML格式(B) ⾃定义格式(C) ⼆进制格式(D) HTML格式6. 下列有关类、对象和实例的叙述,正确的是哪⼀项?(A) 类就是对象,对象就是类,实例是对象的另⼀个名称,三者没有差别(B) 对象是类的抽象,类是对象的具体化,实例是对象的另⼀个名称(C) 类是对象的抽象,对象是类的具体化,实例是类的另⼀个名称(D) 类是对象的抽象,对象是类的具体化,实例是对象的另⼀个名称7. 在事件委托类的继承体系中,最⾼层次的类是哪项?(A) java.util.EventListener(B) java.util.EventObject(C) java.awt.AWTEvent(D) java.awt.event.AWTEvent8. Java语⾔中异常的分类是哪项?(A) 运⾏时异常和异常(B) 受检异常和⾮受检异常(C) 错误和异常(D) 错误和运⾏时异常9. 使⽤下列哪些关键字可以判定实参的具体类型?(A) as(B) is(C) instanceof(D) extends10. 在⽅法的声明中,要求该⽅法必须抛出异常时使⽤哪个关键字?(A) Throw(B) catch(C) finally(D) throws11. Applet的布局设置默认是FlowLayout,下列中哪项代码可以改变Applet的布局⽅式?(A) setLayoutManager(new GridLayout());(B) setLayout (new GridLayout(2,2));(C) setGridLayout (2,2);(D) setBorderLayout();12. 下列哪项正确?(A) JDK中包含JRE,JVM中包含JRE(B) JRE中包含JDK,JDK中包含JVM(C) JRE中包含JDK,JVM中包含JRE(D) JDK中包含JRE,JRE中包含JVM13. 在MyThread类的main⽅法中,为⽤Thread实例化。
1.编写程序,用数组实现乘法小九九的存储和输出。
【提示:采用多个一维数组。
】public class Multipation {public static void main(String[] args) {// TODO Auto-generated method stubint x[][]=new int[9][9];for(int i=0;i<9;i++){for(int j=0;j<9;j++){if(i>=j){int m=i+1;int n=j+1;x[i][j]=m*n;System.out.print(m+"*"+n+"="+x[i][j]);}}System.out.println();}}}2. 定义一个类Student,属性为学号、姓名和成绩;方法为增加记录SetRecord和得到记录GetRecord。
SetRecord给出学号、姓名和成绩的赋值,GetRecord通过学号得到考生的成绩。
public class Student {/***@param args*/private int ID;private String name;private float score;public void SetRecord(int ID,String name,float score){this.ID=ID;=name;this.score=score;}public float getRecord(int ID){if(ID==this.ID)return this.score;elsereturn -1;}public static void main(String[] args) {// TODO Auto-generated method stubStudent s=new Student();s.SetRecord(0,"alex",100);float Sco=s.getRecord(0);System.out.print(Sco);}}3.给出上题中设计类的构造函数,要求初始化一条记录(学号、姓名、成绩)。
public class Multipation {public static void main(String[] args) {定义一个类Student,属性为学号、姓名和成绩;方法为增加记录SetRecord和得到记录GetRecord。
SetRecord给出学号、姓名和成绩的赋值,GetRecord通过学号得到考生的成绩。
public class Student {/***@param args*/private int ID;private String name;private float score;public void SetRecord(int ID,String name,float score){=ID;=name;=score;}public float getRecord(int ID){if(ID==return ;elsereturn -1;}public static void main(String[] args) {编写程序,测试字符串“你好,欢迎来到Java世界”的长度,将字符串的长度转换成字符串进行输出,并对其中的“Java”四个字母进行截取,输出截取字母以及它在字符串中的位置。
public class StringTest {/***@param args*/public static void main(String[] args) {自己设计一个坐标类,能提供以下方法如求当前坐标和其他坐标之间的距离等方法,要求所有变量为私有变量,并提供两个构造函数。
public class XYdistance {private int x;private int y;XYdistance(){setX(0);setY(0);}public void setX(int x) {= x;}public int getX() {return x;}public void setY(int y) {= y;}public int getY() {return y;}public static void main(String[] args) {lass文件中的一些数据。
JVM虚拟机为每个被装载的类型维护一个常量池。
常量池就是该类型所用到常量的一个有序集和,包括直接常量(String,Integer和 Floating point常量)和对其他类型,字段和方法的符号引用。
对于String常量,它的值是在常量池中的。
而JVM中的常量池在内存当中是以表的形式存在的,对于String类型,有一张固定长度的CONSTANT_String_info表用来存储文字字符串值,注意:该表只存储文字字符串值,不存储符号引用。
1、String s = "abc";创建过程分析:在class文件被JVM装载到内存中,JVM会创建一块String Pool (String缓冲池)。
当执行String s = “abc”;时,JVM首先在String Pool 中查看是否存在字符串对象“abc”(如何查看呢?用equals()方法判断),如果已存在该对象,则不用创建新的字符串对象“abc”,而直接使用String Pool 中已存在的对象“abc”,然后将引用s指向该对象;如果不存在该对象,则先在String Pool中创建一个新的字符串对象“abc”,然后将引用s指向String Pool中创建的新对象。
注意:使用“字符串常量”引号创建的字符串对象时,在编译期就已经确定将该对象存储到String Pool中了。
因此,String s = “abc”只会在编译期,在String Pool中创建一个对象。
例如:Java代码1.String s1 = "abc";2.String s2 = "abc";== s2);返回了一个String对象,也就是说在堆中创建了对象。
这时候会不会在池中出现"abc"这个对象呢?(question还没解决)生成String s的过程中,编译器使用sb执行的过程:创建一个StringBuffer对象,使用append()向此StringBuffer对象直接添加新的字符串(而不是每次制作一个新的副本)。
对于String c = "c";String s = "a" + "b" + c;,编译器将会先将"a" + "b"作为编译时常量,优化生成成字面常量"ab" ,然后生成一个StringBuilder对象,接着调用两次 append()方法,即:String s = new Builder().append("ab").append(c) .toString();对于String a = "a";String s = a + "b" + "c";,编译器分析a为引用变量,后面的"b" + "c"就不会作为编译时常量来运算了。
相当于执行:String s = new Builder().append(a).append("b") .append("c") .toString();对于String b = "b";String s = "a" + b + "c";],这种形式的就没办法优化了,直接生成StringBuilder对象,然后调用三次 append()方法,即:String s = new Builder().append("a").append(b) .append("c") .toString();接着,我们再看以下代码:Java代码String str1 = "abc";.,只要在java里面有关键字new存在,不管内容是否相同,都表示它将生成一个新的对象,new多少次,就生成多少个对象,而且新生成的对象都是在Heap里面,所以它会在Heap里面生成一个内容为abc的对象,并且将它的地址赋给了引用s3,s3就指向刚在Heap里面生成的内容为abc 的对象。
所以,当执行完语句(3)时,内存里面一共有3个对象,其中包含了在String Pool里面一个内容为abc的字符串对象和在Heap里面包含了两个内容为abc的字符串对象。
问题4:当执行完语句(4)(5)(6)后,它们的结果分别是什么?在java里面,对象用"=="永远比较的是两个对象的内存地址,换句话说,是比较"=="左右两边的两个引用是否指向同一个对象。
对于java里面的8种原生数据类型来说,"=="比较的是它们的字面值是不是一样的;对应用类型来说,比较的是它们的内存地址是不是一样的。
在语句(1)(2)(3)中,由于s1、s2、s3指向不同的对象,它们的内存地址就不一样,因此可以说当执行完语句(4)(5)(6),它们返回的结果都是false。
问题5:当执行完语句(7)(8)(9)后,它们的结果分别是什么?首先,s1这个对象指向的是堆中第一次new...生成的对象,当调用 intern 方法时,如果String Pool已经包含一个等于此 String 对象的字符串(该对象由equals(Object)方法确定),则返回指向String Pool中的字符串对象的引用。
因为String Pool中有内容为abc的对象,所以()返回的是String Pool中的内容为abc的字符串对象的内存地址,而s1却是指向Heap上内容为abc的字符串对象的引用。
因而,两个引用指向的对象不同,所以,s1 == () 为false,即语句(7)结果为false。
对于(),它还是会首先检查String Pool中是否有内容为abc的对象,发现有,则将String Pool中内容为abc的对象的地址赋给()方法的返回值。
因为s2和()方法的返回值指向的是同一个对象,所以,s2 == ()的结果为true,,即语句(8)结果为true。
对于(),它首先检查String Pool中是否有内容为abc的对象,发现有,则将String Pool中内容为abc的对象的赋给()方法的返回值。
对于(),首先检查String Pool中是否有内容为abc的对象,发现有,则将String Pool中内容为abc的对象的地址赋给()方法的返回值。
因为两者返回的地址都指向同一个对象,所以,() == ()的结果为true,,即是语句(9)结果为true。
因此,当执行完语句(7)(8)(9)后,它们的结果分别是false、true、true。
问题6:当执行完语句(13)(14) (15)(16)后,它们的结果分别是什么?hello == "hello"引用hello指向的对象就是String Pool中的“hello”,即语句(13)的结果为true。
hello == "hel" + "lo"当加号两边都是常量值时,就会组成一个新的常量值"hello"在String Pool里面,如果String Pool已经有相同内容的就不会再创建,则直接返回String Pool里面的内容为"hello"的字符串对象的内存地址,所以,hello == "hel" + "lo"结果为true。
hello =="hel" + lo 当加号两边有一个不是常量值,会在堆里面创建一个新的"hello"对象,一个在String Pool中,一个在Heap中,故输出false 。
hel + lo 同上,输出false。
因此,当执行完语句(7)(8)(9)后,它们的结果分别是true、true、false、false。
例程7:Java代码1.String s1 = "abc";2.String s2 = new String("abc");3.String s3 = new String("abc");();ppend("a").append(new String("bc")).toString();思考:String s = "a" + new String("b") + "c";产生了那几个对象?解:等价于String s = new StringBuilder().append("a").append(new String("b")).append("c").toString(),会在String Pool中产生"a"、"b"、"c"三个对象,在Heap中产生"b"、"abc"两个个对象。