zoukankan      html  css  js  c++  java
  • java知识整理

    整理一下Java知识点。

     一、final finally finalize区别

    1、final

    修饰符(关键字)。被final修饰的类,不能再派生出新的子类,不能作为父类而被子类继承。因此一个类不能既被abstract声明,又被final声明。将变量或方法声明为final,可以保证他们在使用的过程中不被修改。被声明为final的变量必须在声明时给出变量的初始值,而在以后的引用中只能读取。被final声明的方法也同样只能使用,不能重载。

    2、finally

    异常处理的最终执行操作。不管有没有异常被抛出、捕获,finally块都会被执行。在代码逻辑中有需要无论发生什么都必须执行的代码,就可以放在finally块中。一般,如文件读取的流(Stream)的关闭操作,db连接的connection关闭等等,close()方法一般都是放在finally中执行的。
    3、finalize

    Object的方法。Java8 API中如下描述。

    Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.

    在垃圾回收器发现没有引用指向对象时(意思就是说准备回收这个对象),会调用这个方法。

    二、java创建对象

    创建对象的四种方法。乍一听,四种,这么多?其实大家只是不归纳整理,我们都用过这四种。
    (1)new关键字。
    (2)newInstance()
    Class.forName("XXX").newInstance():只能调用无参的构造方法。
    Constructor.newInstance():无论参数个数多少,它都能调用。
    官方有个例子,讲解的很好:
    https://docs.oracle.com/javase/tutorial/reflect/member/ctorInstance.html
    (3)colne
    例子写的太详细了,我没必要再写一遍了:
    https://dzone.com/articles/java-cloning-copy-constructor-vs-cloning
    (4)反实例化
    从数据流到对象。

    三、Thread类里如何判断这个线程持有锁

    Thread类里有个方法public static boolean holdsLock(Object obj)

    Returns true if and only if the current thread holds the monitor lock on the specified object.

    仅当在指定对象上持有监视器锁的时候返回true。

    四、线程池 达到最大线程数时,再有任务请求时会怎么办

    ThreadPoolExecutor方法中有一个参数RejectedExecutionHandler,它来控制线程数量超出时的处理。

    它的实现由四种,默认的是RejectedExecutionException抛出异常;

    其他分别是不做任何处理,直接忽略掉这个任务;提交任务的线程自己执行任务;把队列头部的任务直接扔掉,然后提交这个任务到队列中。

    当然了,自己去实现这个RejectedExecutionHandler也可以,但一般情况下,不需要。

    为什么wait,notify,notifyAll方法在Object队象中

    一个经典问题,整理一下,说一下自己的看法。

    1.wait和notfiy它不并不是普通的方法,也不是像synchronized那样的关键字,它是线程间通讯的一种机制。放在Object class中是种好的选择。

       此外,当进入临界的代码时,线程需要被锁,它们也在等待锁的到来,但是它们不知道哪个线程正在持有锁,相反,它们只知道锁正在被某个线程占用,以及它们应该等待锁,

       而不是知道哪个线程在synchronized块中,让它们释放锁。

    2.锁面向于每个对象,这也是放在Object Class中的一个重要原因。

    六、谈谈String

    String a = new String("123");

    首先我们猜猜这里创建了几个对象?

    不是1个,也不是2个。常量池里有“123”,那么就创建一个对象(new String),如果常量池里没有“123”,那么就会创建2个对象。

    有篇文章写的很好,说得很明白,里面还有几个例子:

    http://www.java67.com/2014/08/difference-between-string-literal-and-new-String-object-Java.html

  • 相关阅读:
    基于jQuery的鼠标悬停时放大图片的效果制作
    让document.write的广告无阻塞的加载
    浅谈DOM事件的优化
    前端自动化构建和发布系统的设计
    parseQueryString
    元素缩放
    apply用法
    3D旋转
    CSS居中的多种方法
    System Center Configuration Manager 2016 域准备篇(Part2)
  • 原文地址:https://www.cnblogs.com/lihao007/p/8576797.html
Copyright © 2011-2022 走看看