博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础相关
阅读量:4335 次
发布时间:2019-06-07

本文共 3206 字,大约阅读时间需要 10 分钟。

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

 

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

 

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

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

自动拆箱装箱:,基本数据类型的包装类只在数字范围-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

 

泛型

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

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

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

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

 

Class类和Object类

class.forName

对象.getClass

类名.class

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

 

反射机制

注解

 

枚举类

 

集合框架

Collection

List:ArrayList、LinkedList、Vector、Stack

Set:EnumSet、HashSet、HashSet

Map:HashMap,TreeMap,HashTable

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

 

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

原文:

在序列化过程中,如果被序列化的类中定义了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

Lock类:

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

BlockingQueue:ArrayListBlockingQueue,LinkedListBlockingQueue,DelayQueue,SynchronousQueue

ConcurrentHashMap

CachedThreadPool,SingleThreadPool,FixedThreadPool,ScheduledExecutorService

ThreadPoolExecutor:,(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流与网络编程

字节流、字符流。

 

代理

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

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

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

 

转载于:https://www.cnblogs.com/lun14061076/p/10545002.html

你可能感兴趣的文章
FreeBSD更换默认csh为bash
查看>>
SQL Server临时表的使用方案
查看>>
继承了HttpServlet后,如何获得ServletConfig?
查看>>
[转]Ogre Script Cache Plugin
查看>>
spring mybatis解决application.properties注入变量问题
查看>>
signal(SIGPIPE, SIG_IGN)
查看>>
思软OA办公系统合同管理解决方案之合同管理系统产品理念
查看>>
Java常用的运算符
查看>>
Android学习笔记之控件GridView
查看>>
oracle sql语句运行效率
查看>>
RunRunLoop初识
查看>>
.NET正则基础之——平衡组
查看>>
mybatis 详解(三)------入门实例(基于注解)
查看>>
51Nod1336 RMQ逆问题 其他
查看>>
zoj1709 poj1562
查看>>
Android 实现 HttpClient 请求Https
查看>>
JSTL标签概述
查看>>
AngularJS中的DOM与事件
查看>>
Gitlab的使用
查看>>
es6-promise源代码重点难点分析
查看>>