Java知识串讲

一、JDK个版本之间的区别:

1.JDK1.5的新特性:

  1. 泛型ArrayList list = new ArrayList();-->ArrayList<int> list = new ArrayList<int>();
  2. 自动装箱/拆箱
  3. for - each
  4. static import(静态导入) 以前是:Math.squrt() --》squrt();
  5. 边长参数: int sum(int ... int list)有任意个参数,把它看做数组,通过...来表示
  6. 枚举
  7. 元数据(Meradata)

2.JDK1.6的新特性:

  1. 增强的for循环
  2. 监视器和管理:JavaSE6中内存泄漏增强了分析以及诊断能力。。当遇到java.lang.OutOfMemory异常的时候,可以得到一个完整的堆栈信息,并且当堆已经满了的时候,会产生一个Log文件记录这个致命错误,另外JVM还添加了一个选择,允许你在堆满的时候运行脚本。
  3. 插入式注解处理:插入式直接处理API(JSR 269)提供了一套标准API来处理Annotations(释文)
  4. 安全性
  5. Desktop类和SystemTray类
  6. 使用JAXB2来实现对象域XML之间的映射
  7. StAX
  8. 使用Compiler API
  9. 轻量级HTTPServer API
  10. 用console来发控制台程序

3.JDK1.7的新特性:

  1. 模块化特性:Java7也是采用了模块的划分出来提速,一些不是必须的模块并没有下载和安装,当虚拟机需要的时候,再下载相应的模块,同时对启动速度也有了很大的改善。
  2. 多语言支持:Java7的虚拟机对多种动态程序语言增加了支持,比如:Rubby,Python等等
  3. 开发者的开发效率得到了改善:switch中可以使用字符串。在多线程并发与控制方面:轻量级的分离与合并框架,一个支持并发访问的HashMap等等。通过注解增强程序的静态检查。提供了一些新的API用于文件系统的访问,异步的输入输出操作,socket通道的配置与绑定,多点数据包的传递等等。
  4. 执行效率的提高:对象指针由64为压缩到与32位指针相匹配的技术使得内存和内存带块的消耗得到了很大的降低,因而提高了执行效率。提供了新的垃圾回收机制来降低垃圾回收的负载和增强垃圾回收的效果。
  5. 堆积和类的语言支持Connections.sort();
  6. 自动资源管理
  7. 改进的通用实例创建类型推断
  8. 数字字面量下划线支持
  9. 二进制字面量
  10. 简化可变参数方法调用。

4.JDK1.8

  1. 接口的默认方法default方法名
  2. Lambda表达式
  3. 函数式接口
  4. 方法与构造函数引用
  5. Lambda作用域
  6. 访问局部变量
  7. 访问对象字段与静态变量
  8. 访问接口的默认方法

5.JDK1.9

  1. Jigsaw项目;模块化源码
  2. 简化进程API
  3. 轻量级JSON API
  4. 钱和货币API
  5. 改善锁争用机制
  6. 代码分段缓存
  7. 智能Java编译,第二阶段
  8. HTTP2.0客户端
  9. kulla计划:Java的REPL实现

二、继承出现的目的?

  1. 提高代码的复用性让类与类之间产生关系,给多态提供了前提
  2. 降低代码的冗余度

三、子类继承父类的哪些资源?

  1. 子类用用父类非private的属性和方法
  2. 子类可以拥有自己的属性和方法,即子类可以父类进行扩展
  3. 子类可以用自己的方式实现父类的方法
  4. Java的继承时单继承,但是可以多实现,单继承就是一个子类只能继承一个父类
  5. 提高了代码的耦合度,同时缺点也就随之而来,耦合度越高,代码联系越紧密,代码的独立性就越差

四、抽象类的特点?

  1. 抽象方法和抽象类使用abstract修饰
  2. 只要有抽象方法的类,一定是抽象类
  3. 抽象类中不一定有抽象方法
  4. 没有抽象方法的抽象类有意义,防止外界创建对象,防止外界实例化的方式:a)构造私有化b)抽象类c)内部类d)接口
  5. 抽象类不能实例化,得使用多态或者继承
  6. 抽象类是服务类,成员变量一般使用public或者protected

五、接口出现的目的?特点?

1.目的:

接口的目的是为了实现类的功能高度集中而存在的。一般情况下,实现类必须要实现接口的全部方法,可是有些情况却显得多余,为了避免这样的现象,出现了抽象接口。

2.特点:

  1. 接口使用interface关键字修饰
  2. 接口是常量和抽象方法的集合,在JDK1.8以后还可以有静态方法和默认方法
  3. 接口中的创两默认省略public static final 方法默认省略public abstract
  4. 接口不能够实例化
  5. 想要“实例化”一个接口,必须使用多态【接口的实现】

六、实现多态的几种方式:

  1. 利用继承,让子类重写父类的方法
  2. 抽象类的抽象方法实现多态
  3. 接口实现多态

七、设计原则:

1.开闭原则:对扩展开放,对修改关闭
    在原有项目中添加新的文件,实现新的功能,还不改动原有的代码
  2.里氏替换原则:父类出现的地方,可以用子类替换,子类出现的地方可以用父类替换。
    父类出现的地方可以用子类替换:使用架构或者模版
    子类出现的地方可以用父类替换

  里氏替换原则,是对开闭原则的补充(只要出现里氏替换原则必然会出现开闭原则)

3. 依赖倒转原则:

   依赖于抽象而不依赖于实现

  依赖于约束(形参和返回值)而不依赖于过程

  依赖于标准而不依赖于实现细节

4. 接口隔离原则:==单一只能原则(一个接口只干一件事情)

  作用:奖励依赖降低耦合

5. 迪米特法则:多用继承,少用组合

6. 合成复用原则:多用组合,少用继承

八、单例模式:

懒汉式:

public class Singleton{
     //私有化构造方法,提供一个公共的方法来实例化 
    private static Singleton instance = null; 
    private Singleton(){}
     //提供公共的方法
     public Object getSing(){
         if(instance == null){
               instance = new Singleton;
        }
        return instance;
    }
 }

饿汉式:

public class Singleton{
    //私有构造方法,提供一个公有的方法
    private Singleton(){}
    private static Singleton instance = new Singleton();
    //公有的方法
    public Object getSing(){
        return instance;
    }    
}

持续更新中...

api

相关推荐