Java基础相关

Posted Lun_Z

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础相关相关的知识,希望对你有一定的参考价值。

https://blog.csdn.net/a724888/article/details/70038420

程序员江湖陆小凤的博客,作为学习Java的顺序目录还可以,内容结合其它博客看比较容易理解,以下未加外链的在此人博客Java分类下基本能找到。

 

面向对象三大特性:继承、封装和多态

 

java基本数据类型:byte(8位),short(16),int,long,float,double,boolean(8),char(16)

对应包装类:Byte,Short,Integer,Long,Float,Double,Boolean,Character

自动拆箱装箱:https://www.cnblogs.com/wang-yaz/p/8516151.html,基本数据类型的包装类只在数字范围-128到127中用到常量池,会自动拆箱装箱,其余数字范围的包装类则会新建实例

 

final关键字:

final修饰基本数据类型保证不可变

修饰引用类型保证引用不能指向别的对象,否则报错

修饰类,不能被继承,类的实例分配空间后地址不可变,子类不能重写所有父类方法

修饰方法,子类不能重写该方法

 

抽象类和接口

可以有方法实现,有非final成员变量,用abstract修饰,可以有构造方法,但只能由子类实例化

接口可用extends加多个接口实现多继承,接口只能有public final类型的成员变量,接口只能有抽象方法、不能有方法体,接口不能实例化,但是可以作为引用类型

 

代码块和加载顺序

假设该类是第一次进行实例化,加载顺序如下:

静态代码块比非静态优先,从早到晚包括:静态代码块和静态成员变量顺序根据代码位置前后来决定,代码块和成员变量顺序也根据代码位置来决定,最后才调用构造方法

1、父类静态变量

2、父类静态代码块(若有多个按代码先后顺序执行)

3、子类静态变量

4、子类静态代码块(若有多个按代码先后顺序执行)

5、父类非静态变量

6、父类非静态代码块(若有多个按代码先后顺序执行)

7、父类构造函数

8、子类非静态变量

9、子类非静态代码块(若有多个按代码先后顺序执行)

10、子类构造函数

 

外部类、内部类

外部类只有public和default两种修饰,全局访问和包内访问

内部类可以有全部访问权限,概念为一个成员变量,故访问权限设置与一般成员变量相同,非静态内部类是外部类一个成员变量,只和外部类的实例有关,静态内部类是独立于外部类存在的一个类,与外部类实例无关,可以通过外部类.内部类直接获取Class类型

 

异常

Throwable

Error(jvm完全无法处理的系统错误,只能终止运行) 和Exception,日志框架,log4j,slf4j

 

泛型 https://blog.csdn.net/s10461/article/details/53941091

java中是伪泛型,运行期自动进行泛型擦除,将泛型替换为实际上传入的类型

泛型通配符1、泛化 2、<? extends Number> 上边界 3、<? super Integer>下边界 此种方式限制上下边界

泛型的使用:泛型类,泛型接口,泛型方法

数组的类型不可以是类型变量,除非是采用通配符的方式

 

Class类和Object类

class.forName

对象.getClass

类名.class

clone()调用需要实现Cloneable接口

 

反射机制

https://www.jianshu.com/p/5b3acad0f025

注解

https://www.cnblogs.com/acm-bingzi/p/javaAnnotation.html

https://www.cnblogs.com/liangweiping/p/3837332.html

 

枚举类

https://blog.csdn.net/javazejian/article/details/71333103

 

集合框架

Collection

List:ArrayList、LinkedList、Vector、Stack

Set:EnumSet、HashSet、HashSet

Map:HashMap,TreeMap,HashTable

Queue:ArrayBlockQueue,PriorityBlockingQueue,LinkedBlockingQueue,ArrayDeque,LinkedBlockingDeque,LinkedList

https://blog.csdn.net/a724888/article/details/80215706

http://calvin1978.blogcn.com/articles/collection.html

 

序列化:实现serializable接口,transient修饰符保证某个成员变量不被序列化

原文:https://blog.csdn.net/a724888/article/details/80210095

在序列化过程中,如果被序列化的类中定义了writeObject 和 readObject 方法,虚拟机会试图调用对象类里的 writeObject 和 readObject 方法,进行用户自定义的序列化和反序列化。

如果没有这样的方法,则默认调用是 ObjectOutputStream 的 defaultWriteObject 方法以及 ObjectInputStream 的 defaultReadObject 方法。

why transient

ArrayList实际上是动态数组,每次在放满以后自动增长设定的长度值,如果数组自动增长长度设为100,而实际只放了一个元素,那就会序列化99个null元素。为了保证在序列化的时候不会将这么多null同时进行序列化,ArrayList把元素数组设置为transient。

why writeObject and readObject

前面说过,为了防止一个包含大量空对象的数组被序列化,为了优化存储,所以,ArrayList使用transient来声明elementData。 但是,作为一个集合,在序列化过程中还必须保证其中的元素可以被持久化下来,所以,通过重写writeObject 和 readObject方法的方式把其中的元素保留下来。

writeObject方法把elementData数组中的元素遍历的保存到输出流(ObjectOutputStream)中。

readObject方法从输入流(ObjectInputStream)中读出对象并保存赋值到elementData数组中。

 

多线程:

线程7种状态:new runable running blocked waiting time_waiting terminate

https://www.cnblogs.com/wxd0108/p/5479442.html

Lock类:

java.util.concurrent包内,三个实现,ReentrantLock,ReentrantReadWriteLock.ReadLock,ReentrantReadWriteLock.WriteLock

BlockingQueue:ArrayListBlockingQueue,LinkedListBlockingQueue,DelayQueue,SynchronousQueue

ConcurrentHashMap

CachedThreadPool,SingleThreadPool,FixedThreadPool,ScheduledExecutorService

ThreadPoolExecutor:https://www.cnblogs.com/dolphin0520/p/3932921.html,https://www.cnblogs.com/cjsblog/p/8214921.html(1.8)

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler);

1、如果正在运行的线程数少于核心线程数,则新建一个线程去运行这个任务

2、如果工作队列没有满,则放到工作队列中

3、如果工作队列已满(PS:workQueue.offer(command)返回false),则再新建线程

4、若线程数已经达到最大线程数则reject(command)

 

IO流与网络编程

字节流、字符流。

 

代理

https://www.cnblogs.com/cenyu/p/6289209.html

https://www.jianshu.com/p/471c80a7e831

https://blog.csdn.net/a724888/article/details/77194098

静态代理:使用时定义接口或父类,被代理对象与代理对象一起实现相同的接口或是继承相同父类

动态代理(JDK代理,接口代理):代理对象,不需要实现接口;代理对象的生成,是利用JDK的API,动态的在内存中构建代理对象

Cglib代理(子类代理):目标对象只是一个单独的对象,并没有实现任何的接口,这个时候就可以使用以目标对象子类的方式类实现代理,这种方法就叫做:Cglib代理

 

以上是关于Java基础相关的主要内容,如果未能解决你的问题,请参考以下文章

java二进制相关基础

用Java拯救我--String类的相关基础知识

Java基础相关

java web 相关基础概念的汇总

JAVA SE基础篇36.时间处理相关类

Java基础—java创建对象相关