java基础2

Posted on 2017-09-15 19:42  _裸奔到月球  阅读(91)  评论(0)    收藏  举报

  1、异常处理:

    Throwable:Error:不可以捕获

           Exception:检查异常和运行时异常,可以捕获

  2、IO流:

    分为两大类:字节流和字符流

    字节流:InputStream,OutputStream

    字符流:Reader和Writer

    File fiile = new File("c:\\test.txt");

    syso可以接受能转换成字符串的参数

  3、垃圾回收器GC

    原理:使用有向图来记录和管理堆内存中的所有对象,通过有向图就可以辨识哪些对象是可达的。finalize方法是 在对象空间被回收之前调用,可以主动通知垃圾回收期运行,但不一定马上执行。

    内存泄漏:1:堆中申请的空间没有被释放;2:对象不再被使用,但还仍然在内存中保留着,Java一般是第二种情况

  4、堆和栈的区别

    都是在内存中存储数据的地方。基本类型数据和对象的引用变量都放在栈中;其他的放在堆(通过new创建的)和常量区中(字符串常量和数据类型常量)。

  5、collection框架(set,queue,stack,list,map)

    set:数据不能重复,两个实现类hashSet、TreeSet,TreeSet中的元素是有序的

    List:可重复,有序的集合,按对象进入的顺序保存对象,实现类:LinkedList、ArrayList、Vector

      三者却别:ArrayList和Vector是基于一个Object数组,在内存分配一块连续的空间,连续存储,所以可以通过索引快速获得值,但是插入数据时需要移动元素,所以较慢;都有一个初始数组大小,如果元素个数大于它,则动态分配数组空间,Vector是2倍,ArrayList是1.5倍;两者的最大却别是ArrayList是线程安全的,Vector是线程不安全的;所以Vector效率低于ArrayList;对于LinkedList,它是基于双向列表的,由于查询时需要从头遍历所以较慢,但是插入数据时不需要移动数据,所以较快;它也是线程不安全的

    Map:提供一个键映射到值的数据结构。实现类:HashMap(基于散列表,查询快速)、TreeMap(基于红黑树)、LinkedHashMap(列表维护顺序)

      HashMap和HashTable的区别:

        hashmap可以存在一个null值的键;HashMap舍弃了contains方法,改为了containsKey和containsValue;HashMap不是线程安全的,HashTable是线程安全的;HashMap采用iterator,HashTable采用Enummeration

  6、多线程

    线程:是指能够执行程序代码的一个执行单元;4中状态:就绪、运行、挂起、结束,各个线程有自己的栈空间,但共享对空间。

    同步和异步:

      同步:多个线程访问时,以某种顺序来确保资源在某一时刻只能被一个线程使用,以保证资源的安全;实现方法:同步代码块和同步方法。

      异步:每个线程都包含了运行时自身所需要的数据或方法,因此,在进行输入输出处理时,不必关心其他线程的状态和行为,也不必等到输入输出处理完毕才返回;异步能提高程序的效率;

    实现Java多线程方法3:

      1、继承Thread类,重写run方法,并start;继承一般是指对这个类加强,所以用第二个方法。

      2、实现Runnable接口,实现run方法;new Thread(new Runnable(){run()}).start();推荐,因为只有一个run方法重写。

      3、实现Callable接口,重写call方法;

    一个类既可继承Thread类也可以是先Runnable接口。调用start方法是首先让线程处于就绪状态,JVM再来调用run方法;如果直接调用run方法,跟普通单线程调用没啥却别;

  7、实现同步的方法

    synchronized关键字;

    wait和notify方法;

    Lock接口和ReentrantLock实现类;

  8、sleep()方法和wait()方法有什么区别

    sleep和wait都是使线程暂停执行一段时间的方法,但:

    原理不同:sleep是Thread类的静态方法,是线程用来控制自身流程的,它会使线程暂停执行一段时间,而把执行机会让给其他线程,等到计时时间一到,此线程会自动苏醒(Thread.sleep(1000)):而wait方法是Object的方法,用于线程间的通信,这个方法会使当前拥有该对象锁的进程等待,直到其他线程调用notify()方法时才醒来。

    对锁的处理机制不同:sleep主要是让线程暂停执行一段时间,时间一到自动恢复,不涉及线程间的通信,因此调用sleep不会释放锁,而wait会释放所站的锁。

    使用区域不同:wait只能在同步控制方法或者同步语句块使用,而sleep可以在任何地方使用。且sleep必须捕获异常,wait不用。

    synchronized和lock的不同:

    用法上:synchronize可加在方法上也可以加在特定代码块,括号中表示需要锁的对象;Lock显示指定起始位置和终止位置;

    性能上:资源竞争不激烈的情况下,synchronize的性能优于ReentrantLock;(new ReentrantLock().lock()/unlock())

    锁机制:syn自动解锁,不会因为异常而导致锁没释放,Lock手动解锁,且必须是在finally里释放,否则会死锁

  最好不要同时使用这两种机制。

  如果一个方法是静态方法,那么它的同步锁是当前类的字节码,普通方法的是this,两个不一样,所以不同步。

  如果这个同步方法里用了wait,那么其他线程可以访问同一对象的其他syn方法。

  9、守护线程

    是指程序运行时在后台提供的一种通用服务的线程,典型例子就是垃圾回收期。

    JVM中只有守护线程运行时,JVM会自动关闭

  10、Class.forName的作用

      把类加载到JVM中,它会返回一个与带有给定字符串名的类或接口相关联的Class对象。

  11、transient:一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个的所有属性和方法都会自动序列化。但是有种情况是有些属性是不需要序列号的,所以就用到这个关键字。只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

  

 

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3