java语言基础知识点(每日更新6.27)

Java中类之间的六种关系:

  • 第一种:继承关系,例如:子类继承父类,子接口继承父接口。
  • 第二种:实现关系,例如:类实现接口。
  • 第三种:依赖关系,例如:一个类作为另一个类中方法的参数存在,这种关系具有偶然性和临时性。
  • 第四种:关联关系,例如:一个类作为另一个类中的成员变量存在,它是一种强依赖关系。
  • 第五种:聚合关系,例如:整体和部分之间,他们是可以分离的拥有各自的生命周期,并且部分是相同的。像鸟群和鸟。
  • 第六种:组合关系,它是一种强聚合,并且整体和部分之间不可分离,具有相同的生命周期,整体包含该部分,也包含其他部分,其他部分和该部分是不相同的,像cpu和计算机,计算机除了包括cpu还有键盘和显示器等。
    1、在Java中,关于HashMap类的描述,以下错误的是()?
    正确答案: A
    A.HashMap能够保证其中元素的顺序
    B.HashMap允许将null用作值
    C.HashMap允许将null用作键
    D.HashMap使用键/值得形式保存数据
解析: HashMap是基于哈希算法来确定元素的位置(槽)的,当我们向集合中存入数据时,它会计算传入的Key的哈希值,并利用哈希值取余来确定槽的位置,与存入的先后顺序无关,所以可以认定为HashMap是无序的。因此答案A错误。

B.HashMap允许存在多条null值
C.HashMap允许且仅允许一条null键
D.Map就是通过键/值形式保存数据的
2、CMS垃圾回收器在那些阶段是没用用户线程参与的
正确答案: A C
A.初始标记
B.并发标记
C.重新标记
D.并发清理
CMS收集器是一种以获取最短回收停顿时间为目标的收集器,它是基于标记清除算法实现的,它的运作过程相对于其他收集器来说要更复杂一些,整个过程分为四个步骤,包括:初始标记、并发标记、重新标记、并发清除。其中初始标记、重新标记这两个步骤需要暂停整个JVM。

初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快。

并发标记阶段就是从GC Roots的直接关联对象开始遍历整个对象图的过程,这个过程耗时较长但是不需要停顿用户线程,可以与垃圾收集线程一起并发运行。

重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间通常会比初始标记阶段稍长一些,但也远比并发标记阶段的时间短。

并发清除阶段,清理删除掉标记阶段判断的已经死亡的对象,由于不需要移动存活对象,所以这个阶段也是可以与用户线程同时并发的。
3、只有实现了()接口的类,其对象才能序列化。
正确答案: A
A.Serializable
B.Cloneable
C.Comparable
D.Writeable

解析:Serializable接口是专门提供给类实现序列化用的。要实现序列化对象必须要实现 Serializable 接口。

4、下面有关java final的基本规则,描述错误的是?
正确答案: B
A.final修饰的类不能被继承
B.final修饰的成员变量只允许赋值一次,且只能在类方法赋值
C.final修饰的局部变量即为常量,只能赋值一次。
D.final修饰的方法不允许被子类覆盖

final:

final修饰的成员变量为基本数据类型时,在赋值之后无法改变。当final修饰的成员变量为引用数据类型时,在赋值后其指向地址无法改变,但是对象内容还是可以改变的。
final修饰的成员变量在赋值时可以有三种方式。1、在声明时直接赋值。2、在构造器中赋值。3、在初始代码块中进行赋值。
final修饰的方法,不允许被子类覆盖。
final修饰的类,不能被继承。
final修饰的变量,不能改变值。
final修饰的引用类型,不能再指向别的东西,但是可以改变其中的内容。
5、表达式(short)10/10.2*2运算后结果类型是()
正确答案: C
short
int
double
float

解析: 首先,要注意是(short)10/10.22,而不是(short) (10/10.22),前者只是把10强转为short,又由于式子中存在浮点数,所以会对结果值进行一个自动类型的提升,浮点数默认为double,所以答案是double;后者是把计算完之后值强转short。

6、Hashtable 和 HashMap 的区别是:
正确答案: B C D E
A.Hashtable 是一个哈希表,该类继承了 AbstractMap,实现了 Map 接口
B.HashMap 是内部基于哈希表实现,该类继承AbstractMap,实现Map接口
C.Hashtable 线程安全的,而 HashMap 是线程不安全的
D.Properties 类 继承了 Hashtable 类,而 Hashtable 类则继承Dictionary 类
E.HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

解析:

Hashtable:
(1)Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。
(2)Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。
(3)HashTable直接使用对象的hashCode。
HashMap:
(1)由数组+链表组成的,基于哈希表的Map实现,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。
(2)不是线程安全的,HashMap可以接受为null的键(key)和值(value)。
(3)HashMap重新计算hash值

Hashtable,HashMap,Properties继承关系如下:

public class Hashtable<K,V> extends Dictionary<K,V>
    implements Map<K,V>, Cloneable, java.io.Serializable
 
public class HashMap<K,V>extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable

java.lang.Objecct
  java.util.Dictionary<K,V>
    java.util.Hashtable<Object,Object>
      java.util.Properties 

正则表达式匹配:

\d      匹配一个数字字符。等价于 [0-9]。
\D     匹配一个非数字字符。等价于 [^0-9]。
\f       匹配一个换页符。等价于 \x0c 和 \cL。
\n      匹配一个换行符。等价于 \x0a 和 \cJ。
\r       匹配一个回车符。等价于 \x0d 和 \cM。
\s      匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S      匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t       匹配一个制表符。等价于 \x09 和 \cI。
\v      匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w     匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。
\W    匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。

7、在java中,下列对继承的说法,正确的是( )

正确答案: A
A.子类能继承父类的所有成员
B.子类继承父类的非私有方法和状态
C.子类只能继承父类的public方法和状态
D.子类只能继承父类的方法

解析:使用反射可以看出子类是继承了父类的私有方法的(不管是否是final),只是直接调用父类的私有方法是不可以的,但是利用反射的方式可以调用。字段同理。

8、有关静态初始化块说法正确的是?
正确答案: A B C
A.无法直接调用静态初始化块
B.在创建第一个实例前或引用任何静态成员之前,将自动调用静态初始化块来初始化
C.静态初始化块既没有访问修饰符,也没有参数
D.在程序中,用户可以控制何时执行静态初始化块
JAVA的初始化顺序:

父类的静态成员初始化>父类的静态代码块>子类的静态成员初始化>子类的静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造方法

注意:

1.静态成员和静态代码块只有在类加载的时候执行一次,再次创建实例时,不再执行,因为只在方法区存在一份,属于一整个类。

2.上述的是通用的加载顺序,如果没有则省略。
9、下面的switch语句中,x可以是哪些类型的数据:()
switch(x)
{
default:
System.out.println(“Hello”);
}

解析:以java8为准,switch支持10种类型 基本类型:byte char short int 对于包装类 :Byte,Short,Character,Integer String enum 2、实际只支持int类型 Java实际只能支持int类型的switch语句,那其他的类型时如何支持的 a、基本类型byte char short 原因:这些基本数字类型可自动向上转为int, 实际还是用的int。 b、基本类型包装类Byte,Short,Character,Integer 原因:java的自动拆箱机制 可看这些对象自动转为基本类型 c、String 类型 原因:实际switch比较的string.hashCode值,它是一个int类型 如何实现的,网上例子很多。此处不表。 d、enum类型 原因 :实际比较的是enum的ordinal值(表示枚举值的顺序),它也是一个int类型 所以也可以说 switch语句只支持int类型

10、下面所示的java代码,运行时,会产生()类型的异常
int Arry_a[] = new int[10];
System.out.println(Arry_a[10]);
正确答案: D
A.ArithmeticException
B.NullPointException
C.IOException
D.ArrayIndexOutOfBoundsException

解析:定义的数组长度为10,角标即为0-9访问数组角标10会出现数组角标越界异常

11、哪个正确
正确答案: A C D
A.abstract类只能用来派生子类,不能用来创建abstract类的对象。
B.final类不但可以用来派生子类,也可以用来创建final类的对象。
C.abstract不能与final同时修饰一个类。
D.abstract类定义中可以没有abstract方法。

解析:final类不能用来派生子类,因为用final修饰的类不能被继承;

12、以下哪些jvm的垃圾回收方式采用的是复制算法回收
正确答案: A D
A.新生代串行收集器
B.老年代串行收集器
C.并行收集器
D.新生代并行回收收集器
E.老年代并行回收收集器
F.cms收集器

两个最基本的java回收算法:复制算法和标记清理算法
复制算法:两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法
标记清理:一块区域,标记可达对象(可达性分析),然后回收不可达对象,会出现碎片,那么引出
标记-整理算法:多了碎片整理,整理出更大的内存放更大的对象
两个概念:新生代和年老代
新生代:初始对象,生命周期短的
永久代:长时间存在的对象
整个java的垃圾回收是新生代和年老代的协作,这种叫做分代回收。
P.S:Serial New收集器是针对新生代的收集器,采用的是复制算法
Parallel New(并行)收集器,新生代采用复制算法,老年代采用标记整理
Parallel Scavenge(并行)收集器,针对新生代,采用复制收集算法
Serial Old(串行)收集器,新生代采用复制,老年代采用标记整理
Parallel Old(并行)收集器,针对老年代,标记整理
CMS收集器,基于标记清理
G1收集器:整体上是基于标记 整理 ,局部采用复制

综上:新生代基本采用复制算法,老年代采用标记整理算法。cms采用标记清理。

13、下面哪些接口直接继承自Collection接口()
正确答案: A C
A.List
B.Map
C.Set
D.Iterator
image

java的基本编程单元是类,基本存储单元是变量。

14、Java 中,以下不是修饰符 final 作用的是( )。

正确答案: C
A.修饰常量
B.修饰不可被继承的类
C.修饰不可变类
D.修饰不可覆盖的方法

final的作用:
    1. 修饰变量,变量的引用地址不可变,但是地址中的内容可以变。
    2. 修饰方法,方法不可被重写,但是还是可以重载
    3. 修饰类,类不可继承。

不可变类,说的是一个类一旦被实例化,就不可改变自身的状态。常见的比如String和基本数据类型的包装类,对于这种不可变类,一旦在进行引用传递的时候,形参一开始就和实际参数指向的不是一个地址,所以在方法中对形参的改变,并不会影响实际参数。

15、要导入java/awt/event下面的所有类,叙述正确的是?()

正确答案: C
A.import java.awt.和import java.awt.event.都可以
B.只能是import java.awt.

C.只能是import java.awt.event.

D.import java.awt.*和import java.awt.event.*都不可以

java.awt.*是导入java\awt包下所有的类,并不包括其子包下的类。
java.awt.event.*才能导入java\awt\event包下的类。

16、下面代码输出结果是?
int i = 5;
int j = 10;
System.out.println(i + ~j);

正确答案: C
A.Compilation error because”~”doesn’t operate on integers
B.-5
C.-6
D.15

-n=~n+1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingshengda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值