Java日常练习题,每天进步一点点

目录
  • 1、类 ABC 定义如下:
  • 2、后端获取数据,向前端输出过程中,以下描述正确的是
  • 3、在异常处理中,以下描述不正确的有
  • 4、如果一个接口Cup有个方法use(),有个类SmallCup实现接口Cup,则在类SmallCup中正确的是? ( )
  • 5、下面的程序将来打印什么?()
  • 6、执行以下程序后的输出结果是()
  • 7、java语言的下面几种数组复制方法中,哪个效率最高?
  • 8、有关会话跟踪技术描述正确的是()
  • 9、关于Java内存区域下列说法不正确的有哪些
  • 10、下面的Java赋值语句哪些是有错误的 ()
    • 答案汇总:
  • 总结

承蒙各位厚爱,我们一起每天进步一点点!(鼠标选中空白处查看答案)

1、类 ABC 定义如下:

public class ABC{

public int max( int a, int b) { }

}

将以下哪个方法插入行 3 是不合法的。( )。

正确答案: B

public float max(float a, float b, float c){ }

public int max (int c, int d){ }

public float max(float a, float b){ }

private int max(int a, int b, int c){ }

题解:
注意是不合法,这题考察重载
细说一下重写和重载:
这两个都是多态的一种表现形式。
重载:
1、 重载是在编译器通过方法中形参的静态类型确定调用方法版本的过程。
2、 重载是多态在编译期的表现形式
3、 重载的判定只有两个条件(其他的条件都不能作为判定):
1、 方法名一致
2、形参列表不同
重写:
1、重写在方法运行时,通过调用者的实际类型来确定调用的方法版本。(具体细说,就是子父类中的重写方法在对应的class文件常量池的位置相同,一旦子类没有重写,那么子类的实例就会沿着这个位置往上找,直到找到父类的同名方法)
2、重写只发生在可见的实例方法中:
1、静态方法不存在重写,形式上的重写只能说是隐藏。
2、私有方法也不存在重写,父类中private的方法,子类中就算定义了,就是相当于一个新的方法。
3、静态方法和实例方法不存在相互重写。
3、重写满足一个规则:两同两小一大
1、两同:方法名和形参列表一致
2、两小:重写方法的返回值(引用类型)和抛出异常,要和被重写方法的返回值(引用类型)和抛出异常相同或者是其子类。注意,一旦返回值是基本数据类型,那么重写方法和被重写方法必须相同,且不存在自动拆装箱的问题。
3、一大:重写方法的访问修饰符大于等于被重写方法的访问修饰符。
B选项方法名、形参列表和返回值类型与题目完全一样,故既不是重写也不是重载

2、后端获取数据,向前端输出过程中,以下描述正确的是

正确答案: D

对于前端过滤过的参数,属于可信数据,可以直接输出到前端页面

对于从数据库获得的数据,属于可信数据,可以直接输出到前端页面

对于从用户上传的Excel等文件解析出的数据,属于可信数据,可以直接输出到前端页面

其它选项都不属于可信数据,输出前应该采用信息安全部发布的XSSFilter做进行相应编码

题解:
后端获取数据,向前端输出的过程中,输出前应该采用信息安全部发布的XSSFilter进行相应编码。

3、在异常处理中,以下描述不正确的有

正确答案: D

try块不可以省略

可以使用多重catch块

finally块可以省略

catch块和finally块可以同时省略

题解:
选D 假如try中有异常抛出,则会去执行catch块,再去执行finally块;假如没有catch 块,可以直接执行finally 块,方法就以抛出异常的方式结束,而finally 后的内容也不会被执行,所以catch 和 finally 不能同时省略。

4、如果一个接口Cup有个方法use(),有个类SmallCup实现接口Cup,则在类SmallCup中正确的是? ( )

正确答案: C

void use() { …}

protected void use() { …}

public void use() { …}

以上语句都可以用在类SmallCup中

题解:
1.题目说了实现,那么接口中的方法是抽象方法
2.接口中的抽象方法是public修饰
3.实现就意味着重写,重写的方法的权限不能小于被重写的方法
4.而最大的权限是public,即public<=重写的方法的权限<=public,即重写的方法的权限只能为public

5、下面的程序将来打印什么?()

public class TestIncr {

public static void main(String args[]) {

int i = 0;

i = i++ + i;

System.out.println(“I =” +i);

}

}

正确答案: A

I = 1

I = 2

I = 3

编译出错

题解:
首先,在 i = i++ + i 中,先执行的是 i++ ,此时式子可为 i = 0 + i
然后再进行后一步 +i ,因为前面执行了 i++ ,所以这个 i 的值已经 +1 了
那么最后这个式子就是 i = 0 + 1

6、执行以下程序后的输出结果是()

public class Test {

public static void main(String[] args) {

StringBuffer a = new StringBuffer(“A”);

StringBuffer b = new StringBuffer(“B”);

operator(a, b);

System.out.println(a + “,” + b);

}

public static void operator(StringBuffer x, StringBuffer y) {

x.append(y); y = x;

}

}

正确答案: D

A,A

A,B

B,B

AB,B

题解:
a和x是同个地址,b和y是同个地址,然后执行x.append(y)就把y的值放在x的地址里面此时a地址和x是同一个所以a就是AB了,接着执行y=x是把x的地址给y,这时候axy属于同一个地址。所以y=x 只是改变了y的地址没改变b的地址,所以b还是B

7、java语言的下面几种数组复制方法中,哪个效率最高?

正确答案: B

for 循环逐一复制

System.arraycopy

Array.copyOf

使用clone方法

题解:
从速度上看:System.arraycopy > clone > Arrays.copyOf > for
System.arraycopy():native方法+JVM手写函数,在JVM里预写好速度最快
clone():native方法,但并未手写,需要JNI转换,速度其次
Arrays.copyof():本质是调用1的方法
for():全是深复制,并且不是封装方法,最慢情有可原

8、有关会话跟踪技术描述正确的是()

正确答案: A B C

Cookie是Web服务器发送给客户端的一小段信息,客户端请求时,可以读取该信息发送到服务器端

关闭浏览器意味着临时会话ID丢失,但所有与原会话关联的会话数据仍保留在服务器上,直至会话过期

在禁用Cookie时可以使用URL重写技术跟踪会话

隐藏表单域将字段添加到HTML表单并在客户端浏览器中显示

题解:
D:隐藏域在页面中对于用户(浏览器)是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用。浏览者单击发送按钮发送表单的时候,隐藏域的信息也被一起发送到服务器。

9、关于Java内存区域下列说法不正确的有哪些

正确答案: B C

程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器,每个线程都需要一个独立的

程序计数器.

Java虚拟机栈描述的是java方法执行的内存模型,每个方法被执行的时候都会创建一个栈帧,用于存储局部变量表、类信息、

动态链接等信息

Java堆是java虚拟机所管理的内存中最大的一块,每个线程都拥有一块内存区域,所有的对象实例以及数组都在这里分配内存。

方法区是各个线程共享的内存区域,它用于存储已经被虚拟机加载的常量、即时编译器编译后的代码、静态变量等数据。

题解:
B.类信息不是存储在java虚拟机栈中,而是存储在方法区中;
C.java堆是被所有线程共享的一块内存区域,而不是每个线程都拥有一块内存区域。
 
A.程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器(偏移地址),Java编译过程中产生的字节码有点类似编译原理的指令,程序计数器的内存空间存储的是当前执行的字节码的偏移地址,每一个线程都有一个独立的程序计数器(程序计数器的内存空间是线程私有的),因为当执行语句时,改变的是程序计数器的内存空间,因此它不会发生内存溢出 ,并且程序计数器是jvm虚拟机规范中唯一一个没有规定 OutOfMemoryError 异常 的区域;
B.java虚拟机栈:线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。 没有类信息,类信息是在方法区中
C.java堆:对于绝大多数应用来说,这块区域是 JVM 所管理的内存中最大的一块。线程共享,主要是存放对象实例和数组
D.方法区:属于共享内存区域,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

10、下面的Java赋值语句哪些是有错误的 ()

正确答案: B C F

A:int i =1000;

B:float f = 45.0;

C:char s = ‘\u0639'

D:Object o = ‘f';

E:String s = “hello,world\0”;

F:Double d = 100;

题解:
A:没毛病
B:小数默认双精度(double)的,赋值给浮点型(float)属下转型,会造成精度损失,需要强制类型转换float f =(float)45.0; 或者写成float f =45.0F;。
C:没分号啊
D:可以把任何一种数据类型的变量赋给Object类型的变量,因为java所有类默认继承Object,基本数据类型赋值给Object会先装箱,装箱之后就是Object的子类了;
E:没毛病,字符串中的\0被编译为\u0000,表示一个空字符。
F:注意:double d=100,这样没毛病,但是题中是Double啊,会自动装箱, 装箱过程中调用的是Double类的valueOf( double d )方法, 而这里是100为int型, 所以编译会“cannot convert from int to Double”

答案汇总:

1、正确答案: B

2、正确答案: D

3、正确答案: D

4、正确答案: C

5、正确答案: A

6、正确答案: D

7、正确答案: B

8、正确答案: A B C

9、正确答案: B C

10、正确答案: B C F

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

时间: 2021-07-21

Java知识点归纳 —给Java新手的一些建议(新手必看)

写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的.和Java中各个框架相关的内容. 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相

你应该知道的21个Java核心技术

写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的.和Java中各个框架相关的内容. 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相

Java技术汇总

这篇文章总结了多年来使用Java的一些心得体会,主要是和一些Java基础知识点相关的,也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行业的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验, J2SE方面主要就是要掌握以下的一些内容. 1. JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概

Java构建对象常用3种方法解析

前言 当我们面对具有大量可选成员变量的 Java 类时,创建这些对象的最佳方法是什么?通常有三种方法: 伸缩构造函数,JavaBean模式和构建器模式. 构造函数 UserInfo userInfo1 = new UserInfo("felord.cn", 28); UserInfo xxxxxx = new UserInfo("felord.cn", "xxxxxx", 28); UserInfo xxxxxx1 = new UserInfo(

新版POI获取日期类型cell值过程图解

使用POI读取Excel值的同学,一定为日期类型抓狂过! POI对单元格日期处理很弱,没有针对的类型,日期类型取出来的也是一个double值,所以同样作为数值类型.即使使用cell.setCellType(CellType.STRING) 也还是会返回一个数字 网上大部分的方法是: cell.getCellType() 但是在新版的POI中,比如3.15版,这个写法已经被放弃使用了.由于项目需要在下不能调整jar包,只好硬着头皮去解决. 后来发现了一个方法: cell.getCellStyle(

Java基础篇_有关接口和抽象类的几道练习题(分享)

呃,一定要理解之后自己敲!!!这几道题,使我进一步了解了接口和抽象类. 1.设计一个商品类 字段: 商品名称,重量,价格,配件数量,配件制造厂商(是数组,因为可能有多个制造厂商) 要求: 有构造函数 重写 toString 方法 重写 equals方法,进行两件商品的比较 package TT; import java.util.Arrays; public class G { private int 重量; private String 商品名称; private int 价格; privat

详解java一维数组及练习题实例

一维数组 1.一维数组的定义方式: int[] array1 = new int[3];//声明创建一个包含3个元素的数组array1(初始值为0) int[] array2 = {1, 2, 3};//声明.创建并初始化一个包含3个元素的数组 int[] array3 = new int[] {1, 2, 3};//声明.创建并初始化一个包含3个元素的整型数组 int[] array4; array[4] = {1, 2, 3}//先声明一个数组array,再进行创建及初始化 int[] ar

Java基础高级综合练习题扑克牌的创建

最近学了很多的知识,脑容量小,记不清,还是得做做练习! 今天就做了一个扑克牌的练习 首先呢..这个逻辑一定要非常清楚,我们要想做出一副扑克牌,必定要弄清楚每一张牌和整的一副牌 首先分析 一张扑克 一张牌里面有什么?相信大家看图(图不是我写的)就应该懂了,一张扑克有属于它自己的花色(红桃,黑桃,梅花,方块) 以及自己的点数(A,2,3-..J,Q,K)就这两种属性,对吧! 那么花色符号,点数符号是个啥? 花色符号就是来代替我们的花色的,我们不可能拿着"红桃"这种文字写进程序吧!所以我们可

Java数组实例练习题整理

初级 1.定义一个函数,获取某个数组中的最小值 package practise; public class GetMin { public static void getMin(int[]num){ int min = num[0]; for(int i=0;i<num.length;i++){ min=(num[i]<min?num[i]:min); } System.*out*.print(min); } public static void main(String[] args){ i

Java学习关于循环和数组练习题整理

循环例子: while循环和do-while循环 whlie(条件语句) { 循环体 }//先进行条件语句的判断,再进行循环体 do { 循环体 }whlie (条件语句)//先执行一次循环后再进行条件语句的判断 break语句 break语句:结束全部循环,具体应用如下: //1+2+3+...+n<1000,求n //此题可以利用break语句在和大于1000时结束循环,输出n的值 public static void deal() { int sum = 0; int i = 1; for