Java2SE基础知识点整理(二)

第一篇:Java2SE基础知识点整理(一)html

1.Interface与abstract类的区别java

No. 区别 抽象类 接口
1 定义关键字 abstract class interface
2 组成 常量、变量、抽象方法、普通方法、构造方法 全局常量、抽象方法
3 权限 可使用各类权限 只能是public
4 关系 一个抽象类能够实现多个接口 接口不能继承抽象类,却能够继承多接口
5 使用 子类使用extends继承抽象类 子类使用implements实现接口
5 使用 抽象类和接口的对象都是利用对象多态性的向上转型,进行接口或抽象类的实例化操做 抽象类和接口的对象都是利用对象多态性的向上转型,进行接口或抽象类的实例化操做
6 设计模式 模板设计模式 工厂设计模式、代理设计模式
7 局限 一个子类只能继承一个抽象类 一个子类能够实现多个接口

2.Static class 与non static class的区别
静态内部类表示为“外部类”,而且只能访问外部类中static类型的操做。web

3.java多态的实现原理
方法的覆写(Overriding)和重载(Overloading)。设计模式

4.实现多线程的两种方法:Thread与Runable
简单说来,继承Thread类,覆写它的run()方法,再启动start()启动一个线程;实现Runnable接口使用线程,依旧再覆写它的run()方法,以后使用Thread类中定义的public Thread(Runnable target)启动线程。数组

5.线程同步的方法:sychronized、lock、reentrantLock等
sychronized能够用来定义同步代码块或同步方法实现每次只有一个线程操做,其余线程等待。
Java5引入了ReentrantLock类。
lock()是sychronized关键字提供的一个锁,除此外还提供了锁的条件。多线程

6.锁的等级:方法锁、对象锁、类锁
请看这篇文章(点击此处
7.写出生产者消费者模式oracle

public class ProducerAndConsumer {

    public static void main(String[] args) {
        Message msg = new Message();
        new Thread(new Producer(msg)).start();
        new Thread(new Consumer(msg)).start();
    }   

}


class Message {
    private String title;
    private String content;
    //flag = true:表示能够生产,可是不能取走
    //flag = false:表示能够取走,可是不能生产
    private boolean flag = true;

    public synchronized void set(String title,String content){
        if(this.flag == false){
            try {
                super.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.title = title;
        try{
            Thread.sleep(100);
        }catch(InterruptedException e){
            e.printStackTrace();
        }
        this.content = content;
        this.flag = false;
        super.notify();
    }

    public synchronized void get(){
        if(this.flag == true){
            try {
                super.wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        try{
            Thread.sleep(100);
        }catch(InterruptedException e){
            e.printStackTrace();
        }
        System.out.println(this.title + "==>" + this.content);
        this.flag = true;
        super.notify();
    }

    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }


}

//定义生产者
class Producer implements Runnable{
    private Message msg = null;
    public Producer(Message msg){
        this.msg = msg;
    }
    @Override
    public void run() {
        for(int x = 0;x < 50;x++){
            if(x % 2 == 0){
                this.msg.set("《西游记》","一部神魔小说");
            } else{
                this.msg.set("《红楼梦》","一一部人情小说");
            }
        }

    }

}

//定义消费者
class Consumer implements Runnable{
    private Message msg;
    public Consumer(Message msg){
        this.msg = msg;
    }
    @Override
    public void run() {
        for(int x = 0; x < 50 ; x++){
            this.msg.get();
        }

    }

}

8.ThreadLocal的设计理念与做用
一个关于建立线程局部变量的类。通常建立的变量是能够被任何一个线程访问并修改的。使用ThreadLocal建立的变量只能被当前线程访问,其余线程没法访问和修改。
详细请移步到这篇文章(点击这里框架

9.ThreadPool用法与优点
Java中线程池是经过Executor框架实现的。这篇文章值得一读(点击这里这里写连接内容
10.Concurrent包里的其余东西:ArrayBlockingQueue、CountDownLatch等等ide

11.wait()和sleep()的区别
sleep()是Thread类定义的static方法,表示线程休眠,将执行机会给其余线程,可是监控状态依然保持,到时候会自动恢复。
wait()是Object类定义的方法,表示线程等待,一直到执行了notify()或notifyAll()后才结束等待。svg

12.foreach与正常for循环效率对比
foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。foreach语句是for语句的特殊简化版本,可是foreach语句并不能彻底取代for语句,然而,任何的foreach语句均可以改写为for语句版本。foreach并非一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。(参考:这里

13.Java IO与NIO
IO:面向流;阻塞IO
NIO:面向缓冲;非阻塞IO

14.反射的做用于原理
Class类是反射机制操做的源头。

15.泛型经常使用特色,List< String >可否转为List< Object >
不能够。由于<>里面的类型不同。

16.设计模式:单例、工厂、适配器、责任链、观察者等等

17.JNI的使用
关于这个JNI彻底能够另写一套专题了。就再也不写出答案了,你们能够搜索JNI百度百科或者去官网查看JNI文档(就是点这里)。