Java核心编程快速入门
Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体内容如下图所示。


反射reflect是理解Java语言工作原理的基础,Java编译器首先需要将我们编写的.java源文件编译为.class字节码,然后再JVM虚拟机上运行,接下来通过一个表格,来了解反射的基本操作。
|
功能 |
示例 |
|
泛化的Class引用 |
Class<?> intClass = int.class Class<? extends Number> bounded = int.class 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等。
常见enum扩展
public enum DemoEnum {
First(0, "第一个"),Second(1, "第二个"), Third(1, "第三个");
private Integer value;
private String describe;
private DemoEnum(Integer value, String describe) {
this.value = value;
this.describe = describe;
}
public Integer getValue() {
return value;
}
public String getDescribe() {
return describe;
}
public static boolean exist(Integer value) {
boolean result = false;
DemoEnum enu = valueOf(value);
if (enu != null)
result = true;
return result;
}
public static DemoEnum valueOf(Integer value) {
DemoEnum[] enums = DemoEnum.values();
for (DemoEnum item : enums) {
if (item.getValue() == value) {
return item;
}
}
return null;
}
public static boolean exist(String value) {
boolean result = false;
DemoEnum enu = valueOf(value);
if (enu != null)
result = true;
return result;
}
}

提到并发,不可避免的设计很多的概念,但这里就不一一介绍,这儿将通过解决问题的方式来展示java并发方面的知识,快速便捷的实现"靴子落地"。
|
问题 |
解决方案 |
|
如何创建一个任务? |
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()); |
|
如何解决共享资源竞争 |
lock.lock();
synchronized (new Object()) {}
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); |
- Bruce, Eckel. Java编程思想(第4版)[M]. 北京:机械工业出版社, 2017.
Java核心编程快速入门的更多相关文章
- Java核心编程快速学习
Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体内容如下图所示. 反射reflect是理解Java语言工作原理的基础,Java编译器首先需要将我们编写的 ...
- Java核心编程快速学习(转载)
http://www.cnblogs.com/wanliwang01/p/java_core.html Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体 ...
- Java程序员快速入门Go语言
这篇文章帮助Java程序员快速入门Go语言. 转载至 开源中国社区. http://www.oschina.net 本文将以一个有代表性的例子为开始,以此让Java程序员对Go语言有个初步认识,随后将 ...
- .Net Core WebAPI 基于Task的同步&异步编程快速入门
.Net Core WebAPI 基于Task的同步&异步编程快速入门 Task.Result async & await 总结 并行任务(Task)以及基于Task的异步编程(asy ...
- COM编程快速入门
COM编程快速入门 COM编程快速入门 http://www.vckbase.com/index.php/wv/1642 COM是一种跨应用和语言共享二进制代码的方法.与C++不同,它提倡源代码重 ...
- 【Java】Spring快速入门(一)
Spring介绍 Spring可以轻松创建Java企业应用程序.它提供了在企业环境中使用Java语言所需的一切,支持Groovy和Kotlin作为JVM上的替代语言,并可根据应用程序的需要灵活地创建多 ...
- Java并发编程快速学习
上周的面试中,被问及了几个关于Java并发编程的问题,自己回答的都不是很系统和全面,可以说是"头皮发麻",哈哈.因此果断购入<Java并发编程的艺术>一书,学习后的体会 ...
- Spring框架的IOC核心功能快速入门
2. 步骤一:下载Spring框架的开发包 * 官网:http://spring.io/ * 下载地址:http://repo.springsource.org/libs-release-local/ ...
- Haskell 函数式编程快速入门【草】
什么是函数式编程 用常规编程语言中的函数指针.委托和Lambda表达式等概念来帮助理解(其实函数式编程就是Lambda演算延伸而来的编程范式). 函数式编程中函数可以被非常容易的定义和传递. Hask ...
随机推荐
- (转)java中使用memcache
背景:公司项目中使用java和memcache相结合来搭建缓存,所以要了解下缓存的基础知识! 1 了解memcache 1.1 基础知识 什么是Memcache? Memcache集群环境下缓存解决方 ...
- 关于xmlhttp会使用ie的缓存的问题及解决
在浏览器(如:IE)的客户端使用xmlhttp读取网络资源的时候,需要考虑到浏览器本地缓存的问题. 如果希望读取的数据是实时更新的,也就是不想从本地缓存中读取数据,我之前常用的方法是在请求网址后面加一 ...
- C++代理模式
主要根据代理模式整理,感谢作者分享! [DP]上的定义:为其他对象提供一种代理以控制对这个对象的访问.有四种常用的情况:(1)远程代理,(2)虚代理,(3)保护代理,(4)智能引用.本文主要介绍虚代理 ...
- Docker 镜像加速器
Docker 镜像加速器 我们使用Docker的第一步,应该是获取一个官方的镜像,例如mysql.wordpress,基于这些基础镜像我们可以开发自己个性化的应用.我们可以使用Docker命令行工 ...
- Java基础-虚拟内存之映射字节缓冲区(MappedByteBuffer)
Java基础-虚拟内存之映射字节缓冲区(MappedByteBuffer) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.映射字节缓冲区 1>.什么是虚拟内存 答:虚拟内 ...
- shell脚本中自定义日志记录到文件
自定义日志函数和前期变量 # adirname - return absolute dirname of given file adirname() { odir=`pwd`; cd `dirname ...
- JDBC编程示例
package com.lovo.test; import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLE ...
- np.random.rand均匀分布随机数和np.random.randn正态分布随机数函数使用方法
np.random.rand用法 觉得有用的话,欢迎一起讨论相互学习~Follow Me 生成特定形状下[0,1)下的均匀分布随机数 np.random.rand(a1,a2,a3...)生成形状为( ...
- elementUI下拉框错误记录
选择广东省深圳市,保存,再编辑是这样效果 原因 保存的那张表相关字段为字符串,而生成下拉框该字段是整数,两者改成一致即可 修改后
- Oozie 生成JMS消息并向 JMS Provider发送消息过程分析
一,涉及到的工程 从官网下载源码,mvn 编译成 Eclipse工程文件: