Java知识串讲
一、JDK个版本之间的区别:
1.JDK1.5的新特性:
- 泛型ArrayList list = new ArrayList();-->ArrayList<int> list = new ArrayList<int>();
- 自动装箱/拆箱
- for - each
- static import(静态导入) 以前是:Math.squrt() --》squrt();
- 边长参数: int sum(int ... int list)有任意个参数,把它看做数组,通过...来表示
- 枚举
- 元数据(Meradata)
2.JDK1.6的新特性:
- 增强的for循环
- 监视器和管理:JavaSE6中内存泄漏增强了分析以及诊断能力。。当遇到java.lang.OutOfMemory异常的时候,可以得到一个完整的堆栈信息,并且当堆已经满了的时候,会产生一个Log文件记录这个致命错误,另外JVM还添加了一个选择,允许你在堆满的时候运行脚本。
- 插入式注解处理:插入式直接处理API(JSR 269)提供了一套标准API来处理Annotations(释文)
- 安全性
- Desktop类和SystemTray类
- 使用JAXB2来实现对象域XML之间的映射
- StAX
- 使用Compiler API
- 轻量级HTTPServer API
- 用console来发控制台程序
3.JDK1.7的新特性:
- 模块化特性:Java7也是采用了模块的划分出来提速,一些不是必须的模块并没有下载和安装,当虚拟机需要的时候,再下载相应的模块,同时对启动速度也有了很大的改善。
- 多语言支持:Java7的虚拟机对多种动态程序语言增加了支持,比如:Rubby,Python等等
- 开发者的开发效率得到了改善:switch中可以使用字符串。在多线程并发与控制方面:轻量级的分离与合并框架,一个支持并发访问的HashMap等等。通过注解增强程序的静态检查。提供了一些新的API用于文件系统的访问,异步的输入输出操作,socket通道的配置与绑定,多点数据包的传递等等。
- 执行效率的提高:对象指针由64为压缩到与32位指针相匹配的技术使得内存和内存带块的消耗得到了很大的降低,因而提高了执行效率。提供了新的垃圾回收机制来降低垃圾回收的负载和增强垃圾回收的效果。
- 堆积和类的语言支持Connections.sort();
- 自动资源管理
- 改进的通用实例创建类型推断
- 数字字面量下划线支持
- 二进制字面量
- 简化可变参数方法调用。
4.JDK1.8
- 接口的默认方法default方法名
- Lambda表达式
- 函数式接口
- 方法与构造函数引用
- Lambda作用域
- 访问局部变量
- 访问对象字段与静态变量
- 访问接口的默认方法
5.JDK1.9
- Jigsaw项目;模块化源码
- 简化进程API
- 轻量级JSON API
- 钱和货币API
- 改善锁争用机制
- 代码分段缓存
- 智能Java编译,第二阶段
- HTTP2.0客户端
- kulla计划:Java的REPL实现
二、继承出现的目的?
- 提高代码的复用性让类与类之间产生关系,给多态提供了前提
- 降低代码的冗余度
三、子类继承父类的哪些资源?
- 子类用用父类非private的属性和方法
- 子类可以拥有自己的属性和方法,即子类可以父类进行扩展
- 子类可以用自己的方式实现父类的方法
- Java的继承时单继承,但是可以多实现,单继承就是一个子类只能继承一个父类
- 提高了代码的耦合度,同时缺点也就随之而来,耦合度越高,代码联系越紧密,代码的独立性就越差
四、抽象类的特点?
- 抽象方法和抽象类使用abstract修饰
- 只要有抽象方法的类,一定是抽象类
- 抽象类中不一定有抽象方法
- 没有抽象方法的抽象类有意义,防止外界创建对象,防止外界实例化的方式:a)构造私有化b)抽象类c)内部类d)接口
- 抽象类不能实例化,得使用多态或者继承
- 抽象类是服务类,成员变量一般使用public或者protected
五、接口出现的目的?特点?
1.目的:
接口的目的是为了实现类的功能高度集中而存在的。一般情况下,实现类必须要实现接口的全部方法,可是有些情况却显得多余,为了避免这样的现象,出现了抽象接口。
2.特点:
- 接口使用interface关键字修饰
- 接口是常量和抽象方法的集合,在JDK1.8以后还可以有静态方法和默认方法
- 接口中的创两默认省略public static final 方法默认省略public abstract
- 接口不能够实例化
- 想要“实例化”一个接口,必须使用多态【接口的实现】
六、实现多态的几种方式:
- 利用继承,让子类重写父类的方法
- 抽象类的抽象方法实现多态
- 接口实现多态
七、设计原则:
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;
}
}
持续更新中...
Java知识串讲的更多相关文章
- Android开发学习必备的java知识
Android开发学习必备的java知识本讲内容:对象.标识符.关键字.变量.常量.字面值.基本数据类型.整数.浮点数.布尔型.字符型.赋值.注释 Java作为一门语言,必然有他的语法规则.学习编程语 ...
- java核心技术-(总结自杨晓峰-java核心技术36讲)
1. 谈谈你对java平台的理解 首先是java最显著的两个特性,一次写入处处运行:还有垃圾收集器gc,gc能够对java内存进行管理回收,程序员不需要关心内存的分配和回收问题 然后谈谈jre和jdk ...
- Java知识回顾 (11) 异常处理
距离最近的 Java知识回顾系列(10),2019.4.24日,到现在,已经近半年过去了. 感觉,做一件事情,如果有头无尾,实在不好,心里会一直悬着.所以,现在继续上面的内容. 再次声明,正如(1)中 ...
- Java知识体系
Java知识体系 java知识结构.jpg web框架.jpg 计算机课程体系.png 2016-08-19_090929.png 流行的哈希算法生存状况.jpg "JAVA之父" ...
- 逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构
逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构 一丶熟悉IDA,以及手工制作sig文件. IDA,静态分析工具,网上随便找一个即可下载. 首先,我们写一个可执行EXE,最简单的 使用IDA打 ...
- Java知识体系纲要
最近一段时间,把Java主要涉及到的大概念都大致学习了一遍,为了让自己能够更好地形成对Java知识体系的整体把握,先把学过的知识点添加到自己画的思维导图上. 整个Java知识体系的划分,我自己主要将它 ...
- Linux基础知识第九讲,linux中的解压缩,以及软件安装命令
目录 Linux基础知识第九讲,linux中的解压缩,以及软件安装命令 一丶Linux Mac Windows下的压缩格式简介 2.压缩以及解压缩 3.linux中的软件安装以及卸载 1.apt进行安 ...
- 逆向知识第一讲,IDA的熟悉使用
逆向知识第一讲,IDA的熟悉使用 一丶熟悉IDA,以及手工制作sig文件. IDA,静态分析工具,网上随便找一个即可下载. 首先,我们写一个可执行EXE,最简单的 使用IDA打开. 1.提示使用什么格 ...
- 震惊!90%的程序员不知道的Java知识!
震惊!90%的程序员不知道的Java知识! 初学Java的时候都会接触的代码 public static void main(String[] args){ ... } 当时就像背公式一样把这行代码给 ...
随机推荐
- Nginx location配置 正则表达式
一. location 的匹配符 Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }location @name { ... } 1. 语法格式 ...
- axios中qs的使用
首先qs是一个npm仓库所管理的包,可通过npm install qs命令进行安装. 地址: https://www.npmjs.com/package/qs qs.parse().qs.string ...
- Android Studio安装虚拟机步骤
1. 新建 或者 2. 按图中的步骤,选择一款设备,建议选择分辨率小的,不占内存 3. 按图 4. 按图 5. 点击finish后,选择之前下载的虚拟机,点next 6. 虚拟机重命名 7. 到这里, ...
- JS正则表达式的创建、匹配字符串、转义、字符类、重复以及常用字符
正则表达式都是操作字符串的 作用:对数据进行查找.替换.有效性验证 创建正则表达式的两种方式: // 字面量方式 /js/ // 构造函数方式 regular expression new RegEx ...
- MongoDB集群负载不均衡问题定位及解决
1.问题描述 这是一套运行在腾讯云上的MongoDB 3.6版本集群,共5个分片,每片规格是6核16GB. 在压测的过程中,发现第3个分片的CPU使用率长时间高达96%,其它4个分片的CPU使用率都没 ...
- 字节码操作、javassist使用
一.功能 1.动态生成新的类 2.动态改变某个类的结构(添加.删除.修改 新的属性.方法) 二.优势 1.比反射开销小,性能高 2.JAVAasist性能高于反射,低于ASM 使用javassis ...
- 【daily】文件分割限速下载,及合并分割文件
说明 主要功能: 1) 分割文件, 生成下载任务; 2) 定时任务: 检索需要下载的任务, 利用多线程下载并限制下载速度; 3) 定时任务: 检索可合并的文件, 把n个文件合并为完整的文件. GitH ...
- Redis-异步消息
关于异步消息,大家都知道,如下: 这些用起来都是比较复杂的,RabbitMQ先要创建Exchange,在创建Queue,还要将Queue和Exchange通过某种规则绑定起来.发消息之前要指定rout ...
- LaTex安装介绍
写在前面 很多的会议.期刊要求投稿使用LaTex编辑,而不是Word,使用好LaTex后,论文的排版任务确实会变得轻松. 1.下载软件 LaTex有很多衍生版,常用的推荐是Tex live,安装方式选 ...
- 声明式服务调用:Spring Cloud Feign
最近在学习Spring Cloud的知识,现将声明式服务调用:Spring Cloud Feign 的相关知识笔记整理如下.[采用 oneNote格式排版]