Java核心編程快速學習(轉載)

http://www.cnblogs.com/wanliwang01/p/java_core.htmlhtml

Java核心編程部分的基礎學習內容就不一一介紹了,本文的重點是JAVA中相對複雜的一些概念,主體內容以下圖所示。java

 

 

 

反射reflect是理解Java語言工做原理的基礎,Java編譯器首先須要將咱們編寫的.java源文件編譯爲.class字節碼,而後再JVM虛擬機上運行,接下來經過一個表格,來了解反射的基本操做。編程

功能數組

示例安全

泛化的Class引用併發

Class<?> intClass = int.classapp

Class<? extends Number> bounded = int.classide

Class<? super Person> per = Person.clss.getSuperClass();函數式編程

type.newInstance();函數

類型轉換前先作檢查

Instanceof()

@SuppressWarnings("unchecked")

反射操做

Class<?> x = Class.forName("xxx");

Method[] methods = x.getMethods();

Constructor[] ctors = x.getConstructors();

Method m = x.getDeclaredMethod("name");

m.setAccessible(true);

m.invoke(new XXX());

動態代理

DynamicProxyHandler implements InvocationHandler…

Proxy.newProxyInstance(X.class.getClassLoader(), new Class[]{X.classs}

, new DynamicProxyHandler(real));

泛型接口

public interfacte Generator<T>{T next();}

泛型方法

public <T> T get();

匿名內部類

很是重要的概念,在jdk1.8如下時,須要使用該方式實現函數函數式編程

        List<String> ids = Lists.transform(travelTicketList, new Function<TravelTicketInfoDTO, String>() {

            @Override

            public String apply(TravelTicketInfoDTO dto) {

                return dto.getId();

            }

        });

爲了兼容性,泛型存在編譯時進行擦除的操做。

泛型的邊界限制

class A<T extends Dimension & HasColor & Weight>

Tip:

使用類的準備工做包括3個步驟:加載,由類加載器執行,查找classpath指定路徑,並從字節碼中建立一個Class對象;連接,驗證字節碼,爲靜態域分配空間;初始化,首先初始化超類,而後執行靜態初始化器和初始化塊。

Tuple元組的概念(C#中很經常使用),將一組對象直接打包存儲的一個對象,該對象只能讀取,且不能新增。

 

JDK提供的容器很是的多,主要的有HashMap,HashSet,ArrayList、LinkedList,以及最多見的數組。

定義

詮釋

List

ArrayList, LinkedList

Set

HashSet, TreeSet, LinkedHashSet

Tree表示其底層經過tree結構存儲,保持有序

Map

HashMap,TreeMap,LinkedHashMap,IdentityHashMap

Queue, Stack

 

Enum

其繼承之Enum,默認提供一個values方法(編譯時織入)用於獲取枚舉類型數組

平常使用中,一般須要添加value和describe兩個參數和1個valueOf的方法,方面展現

在java中,switch和enum很容易實現狀態機,職責鏈等;EnumMap/Set的使用;

Tip:

Collections類中提供了不少的的便捷方法用於容器操做,此外,guava庫對以上的容器類型提供了一個很是有用的擴充,尤爲是XXXs.xxx也提供類不少便捷的靜態方法。

在使用集合時,必定要注意其可變性,以及線程安全等問題,纔不容易出錯。

好比系統提供的線程安全的集,List<String> list = Collections.synchronizedList(new ArrayList<String>());

當針對大對象時,爲了便於垃圾回收,java提供了Reference類及其子類,SoftReference,WeakReference,PhantomReference,WeakHashMap等。

 

提到併發,不可避免的設計不少的概念,但這裏就不一一介紹,這兒將經過解決問題的方式來展現java併發方面的知識,快速便捷的實現"靴子落地"。

問題

解決方案

如何建立一個任務?

  1. 實現Runnable接口
  2. new Thread();
  3. 使用 Executor

        ExecutorService exec = Executors.newFixedThreadPool(5);

        exec.execute(new Runnable() {

            public void run() {

            }

        });

如何在任務中返回值?

class CallDemo implements Callable<String>

如何休眠?

        Thread.sleep(500);

        TimeUnit.MILLISECONDS.sleep(500);

如何設置優先級?

如何讓出控制權?

如何設置爲後臺線程

Thread.currentThread().setPriority(1);

Thread.yield();

thread.setDaemon(true);

如何處理異常

MyUncaghtExceptionHandler implements UncaughtExceptionHandler

t.setUncaughtExceptionHandler(new MyUncaghtExceptionHandler());

如何解決共享資源競爭

  1. Synchronized void f(){}
  2. Lock lock = new ReentrantLock();

lock.lock();

  1. volatile, 可使long和double獲取原子性
  2. 原子類 AtomicInteger, AtomicLong, AtomicReference
  3. 臨界區

synchronized (new Object()) {}

  1. ThreadLocal

ThreadLocal<Integer> value = new ThreadLocal<Integer>();

如何終結和中斷任務

exec.shutdown();

Future<?> f= exec.submit(new ExceptionThread());

f.cancel(true);

while(Thread.interrupted()){

線程之間如何協做

wait(), notifyAll(), 生產者消費者模式

死鎖, 哲學家就餐問題

Java有什麼同步工具類麼?

CountDownLatch, CyclicBarrier, DelayQueue, PriorityBlockingQueue

ScheduledExecutor, Semaphore, Exchanger

此外,還提供了不少免鎖容器,好比ConcurrentHashMap

 

  • I/O系統

Java提供了很是全面的I/O功能,經過一個表格來熟悉經常使用類,具體操做實現當時查找資料便可。

基礎類型

實現類

InputStream

ByteArrayInputStream, StringBufferInputStream, FileInputStream

OutputStream

..對應input

FilterInput/OutputStream

DataInputStream, BufferedInputStream

Reader/Writer

InputStreamReader, OutputStreamWriter, FileReader, FileWriter, StringReader…

Java nio

通道和緩衝器

ByteBuffer, CharBuffer,

文件加鎖

FileOutputStream fos = new FileOutputStream("xxx");

FileLock fl = fos.getChannel().tryLock();

文件壓縮

CheckedInputStream, ZipOutputStream

Serializable

writeObject, readObject

 

  • 註解

Java提供了3中標準註解和4種元註解,加粗部分爲最經常使用的選項。

定義

詮釋

標準註解

@Override, @Deprecated, @SuppressWarnings

@Target

CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE

@Retention

SOURCE, CLASS, RUNTIME

其餘

@Documented , @Inherited

建立註解

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

public @interface AnnoStudy {

    public int id() default -1;

}

操做註解

AnnoStudy anno =

CollectionStudy.class.getMethod("first", null).getAnnotation(AnnoStudy.class);

 

  1. Bruce, Eckel. Java編程思想(第4版)[M]. 北京:機械工業出版社, 2017.
做  者: 熊二哥 
出  處: http://www.cnblogs.com/wanliwang01/ 
相關文章
相關標籤/搜索