17:JavaSE回顾总结 || 温故而知新
Java SE 回顾总结及检测
一、JavaSE回顾总结思维导图绘制

二、JavaSE阶段测试
1. 笔试题(50分)
-
用一个生活案例,描述出面向对象这个概念!
答:面向对象就是将某一个事物得共同点抽取出来,比如说学生,学生都有学号,有姓名,有班级,所以可以把这些属性抽象出来作为学生这个类的属性,然后在以后想创建一个学生对象的时候,可以使用前边抽象出来的学生类直接new一个对象,这样的话,后边每当需要一个学生对象的时候,就可以new出来,不需要一次次去写。
-
native,volative关键字作用!各举一个java中的例子!
答:native:使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。native的意思就是通知操作系统,这个函数你必须给我实现,因为我要使用。 所以native关键字的函数都是操作系统实现的, java只能调用。例子:比如多线程中的private native void start0();
volative:可以让共享变量具有可见性和有序性,可见性是指当多个线程访问同一个共享变量时,一个线程修改了这个变量的值,其他线程能够立即看到修改后的值。有序性是指程序执行的顺序按照代码的先后顺序执行。volatile 很适合只有一个线程修改,其他线程读取的情况。volatile 变量被修改之后,对其他线程立即可见。例子:
-
写出结果,分析原因,代码如下:
public class switchTest{ public static void main(String[] args){ String param = null; switch(param){ case "null": System.out.println("null"); break; default: System.out.println("default"); } } }程序运行的结果是什么?为什么会出现这种情况?
答:程序运行的时候会发现报空指针异常的错误。原因参考官方文档是:switch 的表达式必须是 char, byte, short, int, Character, Byte, Short, Integer, String, 或者 enum 类型,否则会发生编译错误。同时switch 语句必须满足以下条件,否则会出现编译错误:
- 与 switch 语句关联的每个 case 都必须和 switch 的表达式的类型一致;
- 如果 switch 表达式是枚举类型,case 常量也必须是枚举类型;
- 不允许同一个 switch 的两个 case 常量的值相同;
- 和 switch 语句关联的常量不能为 null ;
- 一个 switch 语句最多有一个 default 标签。
switch 语句执行的时候,首先将执行 switch 的表达式。如果表达式为 null, 则会抛出 NullPointerException,整个 switch 语句的执行将被中断。研究Java虚拟机可以发现:虚拟机为了实现 switch 的语法,将参数表达式转换成 int。而这里的参数为 null, 从而造成了空指针异常。

-
线程的五种状态,以及线程常用的方法。
答:线程的五种状态:
- 创建状态
- 就绪状态
- 运行状态
- 阻塞状态
- 死亡状态
线程常用的方法:
- sleep(休眠)
- join(插队)
- yield(礼让)
- isLive(是否存活)
- start(开启)
- setPriority(设置优先级)
- interrupt(中断,不推荐使用)
-
通过反射如何创建对象,执行对象的方法,修改对象的字段,如果是私有的该怎么办?
答:得到一个Class对象,然后用这个对象new instance() ,即可通过反射创建一个该类的对象。
执行对象的方法:对象.getMethod(“方法名”,参数类型的类),之后使用该方法.invoke(对象,参数)
修改对象的字段:对象.getField(“字段名”),然后使用该字段.set(对象,参数)
如果是私有的:则需要设置可访问为True,即setAccessible(true),这样就可以关闭掉安全监测了。
2. 代码题:多线程聊天室(50分)
- GUI +10分
- 多线程+20分
- 集合+10分
- 可阅读性+5分
- 网络编程+5分

由于时间问题,该部分没有完成。

浙公网安备 33010602011771号