zoukankan      html  css  js  c++  java
  • 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代理

  • 相关阅读:
    瀑布流
    进度条
    图片延迟加载、scroll
    scroll 滚动广告
    json
    样式更改
    js 不同浏览器的宽度获取
    孤立点挖掘算法
    数据结构算法代码
    深入浅出JMS(一)--JMS基本概念
  • 原文地址:https://www.cnblogs.com/lun14061076/p/10545002.html
Copyright © 2011-2022 走看看