17:JavaSE回顾总结 || 温故而知新

Java SE 回顾总结及检测

一、JavaSE回顾总结思维导图绘制

二、JavaSE阶段测试

1. 笔试题(50分)

  1. 用一个生活案例,描述出面向对象这个概念

    答:面向对象就是将某一个事物得共同点抽取出来,比如说学生,学生都有学号,有姓名,有班级,所以可以把这些属性抽象出来作为学生这个类的属性,然后在以后想创建一个学生对象的时候,可以使用前边抽象出来的学生类直接new一个对象,这样的话,后边每当需要一个学生对象的时候,就可以new出来,不需要一次次去写。

  2. native,volative关键字作用!各举一个java中的例子!

    答:native:使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。native的意思就是通知操作系统,这个函数你必须给我实现,因为我要使用。 所以native关键字的函数都是操作系统实现的, java只能调用。例子:比如多线程中的private native void start0();

    volative:可以让共享变量具有可见性和有序性,可见性是指当多个线程访问同一个共享变量时,一个线程修改了这个变量的值,其他线程能够立即看到修改后的值。有序性是指程序执行的顺序按照代码的先后顺序执行。volatile 很适合只有一个线程修改,其他线程读取的情况。volatile 变量被修改之后,对其他线程立即可见。例子:![]( https://img-blog.csdnimg.cn/20210131223749687.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Mzc2Mjg0,size_16,color_FFFFFF,t_70#pic_center)

  3. 写出结果,分析原因,代码如下:

    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 语句必须满足以下条件,否则会出现编译错误:

    1. 与 switch 语句关联的每个 case 都必须和 switch 的表达式的类型一致;
    2. 如果 switch 表达式是枚举类型,case 常量也必须是枚举类型;
    3. 不允许同一个 switch 的两个 case 常量的值相同;
    4. 和 switch 语句关联的常量不能为 null ;
    5. 一个 switch 语句最多有一个 default 标签。

    switch 语句执行的时候,首先将执行 switch 的表达式。如果表达式为 null, 则会抛出 NullPointerException,整个 switch 语句的执行将被中断。研究Java虚拟机可以发现:虚拟机为了实现 switch 的语法,将参数表达式转换成 int。而这里的参数为 null, 从而造成了空指针异常。

image-20220123223255699

  1. 线程的五种状态,以及线程常用的方法。

    答:线程的五种状态:

    1. 创建状态
    2. 就绪状态
    3. 运行状态
    4. 阻塞状态
    5. 死亡状态

    线程常用的方法:

    1. sleep(休眠)
    2. join(插队)
    3. yield(礼让)
    4. isLive(是否存活)
    5. start(开启)
    6. setPriority(设置优先级)
    7. interrupt(中断,不推荐使用)
  2. 通过反射如何创建对象,执行对象的方法,修改对象的字段,如果是私有的该怎么办?

    答:得到一个Class对象,然后用这个对象new instance() ,即可通过反射创建一个该类的对象。

    执行对象的方法:对象.getMethod(“方法名”,参数类型的类),之后使用该方法.invoke(对象,参数)

    修改对象的字段:对象.getField(“字段名”),然后使用该字段.set(对象,参数)

    如果是私有的:则需要设置可访问为True,即setAccessible(true),这样就可以关闭掉安全监测了。

2. 代码题:多线程聊天室(50分)

  1. GUI +10分
  2. 多线程+20分
  3. 集合+10分
  4. 可阅读性+5分
  5. 网络编程+5分

image-20220123003935163

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

posted @ 2022-01-29 18:23  Laxsilence  阅读(66)  评论(1)    收藏  举报