JAVA 练习题 2019-7-30AM

JAVA 练习题 2019-7-30AM

第二题:类A被defaul修饰符修饰,同一包内的其他类是否可以访问A类。

答:
可以。
牢记:   public>protcted>default>priavte

public:可以被所有其他类所访问;
	protected:自身、子类及同一个包中类可以访问;
	default:同一包中的类可以访问;
	private:只能被自己访问和修改。
记忆技巧,
protected一个特点是只要子类都能访问,不管在不在一个包。
同一类记作死党,同一包记作公司成员,子类记作子公司,其他类记作其他公司。
死党间为public关系,公司成员为default关系,
子公司成员为protected关系,其他公司成员为private关系。

第五题: javadoc与javac的概念。

答:
javadoc 用来识别注释,javac 用来识别代码。

Javadoc是一个从Java源代码创建HTML格式文档的工具。 该实用程序检查源代码,提取文档中的特殊标记信息,然后生成汇总软件的Web页面。

文档注释(也称为doc注释)指定了javadoc工具要处理的注释的格式。 称为标签的特殊标签也由javadoc解析。 同时,doc注释和标签可用于构建完整的Java应用程序编程接口(API)规范。

第七题:在项目开发中需要编写功能性注释,编写需要注意什么?

答:
1.java文件得写创建时间和作者。
2.类、接口,得写类的职责,所完成的功能,时间和作者。
3.方法得编写方法简洁,参数含义及返回值含义。
4.方法内部出现控制结构超过3个得编写这样处理的原因。
5.方法内部出现约束条件或前提条件,需要编写注释。

第八题:ArrayList和LinkList的描述,下面说法正确的是?

答:

ArryList和LinkedList都实现了List接口,ArrayList的内存结构是数组,
本质是顺序存储的线性表,插入和删除操作都会引起后续元素移动,效率低,但是随机访问效率高
LinkedList的内存结构是双向链表存储的,链式存储结构插入和删除效率高,不需要移动,
但是随机访问效率低,需要从头开始向后依次访问。

第九题:静态类中的方法是否可以被重写,为什么?

答:

不可以。
重写只发生在可见的实例方法中:
	1、静态方法不存在重写,形式上的重写只能说是隐藏。
	2、私有方法也不存在重写,父类中private的方法,子类中就算定义了,就是相当于一个新的方法。
	3、静态方法和实例方法不存在相互重写。
重写满足一个规则:两同两小一大
	1、两同:方法名和形参列表一致
	2、两小:重写方法的返回值(引用类型)和抛出异常,要和被重写方法的返回值(引用类型)和抛出异常相同或者是其子类。注意,一旦返回值是基本数据类型,那么重写方法和被重写方法必须相同,且不存在自动拆装箱的问题。
	3、一大:重写方法的访问修饰符大于等于被重写方法的访问修饰符。

第十二题:在为传统面向对象语言的程序做单元测试的时候,经常用到mock对象。Mock对象通过反射数。请问反射最大程度破坏了面向对象的以下哪个特性?

答: 
封装性
反射可以访问原类的私有方法,私有成员变量,因此,反射破坏了Java的封装性.
mock对象:也成为伪对象,在测试中的利用mock对象来代替真实对象,方便测试的进行。
java的封装性:指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,通过该类提供的方法实现对内部信息的操作访问。
反射机制:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。

第十三题:就线程安全性方面,谈谈 Vector 和 ArrayList、Hashtable 和 HashMap、ArrayList 和 LinkedList 的主要区别 。

答:
ArrayList、LinkedList、HashMap这三个东西是线程不安全的。
Vector、Hashtable 这两个东西是线程安全的。

第十五题: java使用什么字符集,和c语言的一样吗。

答:
C语言用的是系统默认的 ANSI 字符集。Java语言使用的是Unicode字符集。而ASCII是国际上使用最广泛的字符编码;补充:BCD编码 是一种数字压缩编码。

第十六题:类A实现了接口的方法F,类A中的方法F修饰符是否可为protected。( )

答: 
不可以,必须为public

既然是实现接口,就要实现接口的所以方法,相当于重写方法,方法的重写需要满足:
实现接口方法需要满足,三同一大一小
1.方法名、返回值类型、形参相同;
2.访问权限>=重写前;抛出异常<=重写前

第十七题:System.in 和 System.out,输入输出的对象是指什么。

答:
标准输入指键盘输入;标准输出指输出到屏幕上。

第十七题:System.io.in 与 System.in 的区别。

答:
不存在System.io.in这个命名空间。但是有System.IO命名空间。主要包含基本文件(和基于内存)的输入输出。
输入输出中常用到的类有 StringReader,StreamReader,TextReader。

第十七题:StringReader,StreamReader,TextReader有什么特点及常见使用场景。

答:
特点:TextReader是一个抽象类,他表示的意义是一个文本的读取器(相同的有TextWriter),主要的是ReadLine方法。
其中StreamReader是从一个流来获取数据的,而StringReader和Stream没关系了,直接从一个字符串string读取,想一个包装器一样把一个string伪装成一个TextReader。
然后是流,刚刚说了StreamReader是从流来的,那么必定有各种各样的流类型,如网络流。其实StreamReader不需要关心底层是什么流,只需要知道他是一个Stream就行了
至于File类,算是一个快速完成任务所提供的快捷方式,比如如果从一个文件中读取所有的文本,那么你需要一个FileStream,一个StreamReader,然后还要释放他,很麻烦,那么使用File类的ReadAllText可以一句话完成任务。

使用场景:通常来说看你需要使用高级功能多还是简单完成任务多,比如你需要从一个文件中解压数据流同时解密同时读取文本,那么File类根本无法提供这样的功能,你需要自己写各种流包装在一起,那么如果仅仅是需要读取所有数据的话,那么File.ReadAllText是再好不过了,一方面可以让你的代码简洁,可读性好,另一方面也让你出错的几率降低,减少bug

第二十二题:下面有关servlet的描述正确的是?

A.不管是post还是get方法提交过来的连接,都会在service中处理
B.doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现、
C.service()是在javax.servlet.Servlet接口中定义的
D.service判断请求类型,决定是调用doGet还是doPost方法
E. doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的

答:
ABCD,
选项B/E易错,
doget/dopost与Http协议有关,是在 javax.servlet.http.HttpServlet 中实现的
GenericServlet 抽象类 给出了设计 servlet 的一些骨架,定义了 servlet 生命周期,还有一些得到名字、配置、初始化参数的方法,其设计的是和应用层协议无关的。

第二十四题:下面有关SPRING的事务传播特性,说法正确的是?

A、PROPAGATION_SUPPORTS (支持当前事务,如果当前没有事务,就以非事务方式)
B、PROPAGATION_REQUIRED (支持当前事务,如果当前没有事务,就抛出异常)
C、PROPAGATION_REQUIRES_NEW (新建事务,如果当前存在事务,把当前事务挂起)
D、PROPAGETION_NESTED: (支持当前事务,新增Savepoint点,与当前事务同步提交或回滚)

答:ACD

Spring 支持 7 种事务传播行为:
PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。

第二十五题: JAVA中的“==” 运算符 与 equals 使用上的区别。

答:

不同类型调用 == 比较,会出现编译错误,不能比较。
不同类型调用 equals 方法,先是比较类型,若不同的类型,返回假,
但是参数是基本类型,这时候,先会进行自动装箱。
比如int 为基本类型,将装箱为Integer类型再比较他们的内容。

第二十五题: JAVA的基本类型有那些?

答:

int 、 short 、 long 、 float 、double 、char 、 boolean 、 byte

第二十六题: 当我们需要所有线程都执行到某一处,才进行后面的代码,如何做?

答:

使用CyclicBarrier语法。
CountDownLatch 是等待一组线程执行完,才执行后面的代码。此时这组线程已经执行完。
CyclicBarrier 是等待一组线程至某个状态后再同时全部继续执行线程。此时这组线程还未执行完。

你可能感兴趣的:(练习题)