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){ ... } 当时就像背公式一样把这行代码给 ...
随机推荐
- 查看 Linux 中文件打开情况(lsof)
前言 我们都知道,在linux下,“一切皆文件”,因此有时候查看文件的打开情况,就显得格外重要,而这里有一个命令能够在这件事上很好的帮助我们-它就是lsof. Linux 下有哪些文件 在介绍lsof ...
- 普通版js运动框架
//获取样式 function getStyle(obj){ if(obj.currentStyle){ return obj.currentStyle[attr]; }else{ return ge ...
- Vue.js 从源码理解v-for和v-if的优先级的高低
在vue.js里面,v-for和v-if是可以一起使用作用在某个元素上,网上看到一篇文章说永远不要把v-for和v-if同时用在同一个元素上,感觉有点瞎扯,官网也注明了可以一起使用的,还把两个指令的优 ...
- SAP S4HANA如何取到采购订单ITEM里的'条件'选项卡里的条件类型值?
SAP S4HANA如何取到采购订单ITEM里的'条件'选项卡里的条件类型值? 最近在准备一个采购订单行项目的增强的function spec.其中有一段逻辑是取到采购订单行项目条件里某个指定的条件类 ...
- Android Gradle报错 (Error:No such property: GradleVersion for class: JetGradlePlugin) 的原因与解决
Error:No such property: GradleVersion for class: JetGradlePlugin 错误原因:IDE 版本(GradlePlugin)和 Gradle 版 ...
- Hibernate(六)--缓存策略
缓存: 缓存就是数据库数据在内存中的临时容器,包括数据库数据在内存中的临时拷贝,它位于数据库与数据库访问中间层,ORM在查询数据时,首先会根据自身的缓存管理策略,在缓存中查找相关数据,如果发现所需的数 ...
- sql server 基本操作
1输入如下命令,即可通过SQL Server命令行启动.停止或暂停的服务. SQL Server命令行如下: 启动SQL ServerNET START MSSQLSERVER 暂停SQL Serve ...
- 深入浅出 .NET C# 反射技术
反射这个词听起来就很牛逼是吧? 嗯的确,反射是比较高级的特性,只有语言基础很扎实的Dev们才应该使用它. 搞点反射,可以提高程序的灵活性.可扩展性.耦合度. 反射这东西,是为了动态地运行时加载,相比于 ...
- JavaBIO利用装饰器模式来组织和扩展接口
Stream接口,它直接负责字节流的传输. Reader/Writer接口,它本身不能读直接读写数据,而是以Stream接口为内部核心,在外围装饰增强,负责字符流的读写.字符和字节的转换过程必须指定字 ...
- List保持顺序去重
Map<String, List<Bean>> orderMap = list.stream().collect(Collectors.groupingBy(Bean::get ...