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){ ... } 当时就像背公式一样把这行代码给 ...
随机推荐
- centos6.5下编译安装单实例MySQL5.5
MySQL5.5版本安装3步曲: 1) cmake 2) make 3) make install 查看系统版本号 [root@meinv01 ~]# cat /etc/redhat-release ...
- Angular 从入坑到挖坑 - 组件食用指南
一.Overview angular 入坑记录的笔记第二篇,介绍组件中的相关概念,以及如何在 angular 中通过使用组件来完成系统功能的实现 对应官方文档地址: 显示数据 模板语法 用户输入 组件 ...
- (数据科学学习手札78)基于geopandas的空间数据分析——基础可视化
本文对应代码和数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 通过前面的文章,我们已经对geopanda ...
- Sunset: dusk: Vulnhub Walkthrough
靶机链接: https://www.vulnhub.com/entry/sunset-dusk,404/ 主机IP扫描: IP端口扫描: 21 端口 pyftpdlib 1.5.5 版本漏洞 25 ...
- 在本地搭建git服务器
GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用. 搭建Gi ...
- 一次线上nohup.out日志丢失的问题
今天有小伙伴求助,线上一个应用的nohup.out日志不更新了,但进程还是正常的.此时需要查看这个日志排查一些问题,这可怎么办呢? nohup.out文件的更新时间停留在了昨天9点36,日志也刚好打到 ...
- php根据字段相识度进行排序查询
$data = [ [ 'id'=>1, 'title'=>'test内容管理系统', ], [ 'id'=>2, 'title'=>'开源test', ], [ 'id'=& ...
- 快速建立使用django_rest_framework
快速建立使用django_rest_framework 测试API 其实djangorestframework就是进行增删改查 前往要注意的是 POST的接口的的URL一定要写完整 包括最后的 `/` ...
- python+appium+真机测试
appium环境搭建 操作系统: Windows 10 被测平台: Android真机 appium服务器: appium Desktop appium客户端: python-client 测试的AP ...
- C# WPF联系人列表(1/3)
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF联系人列表(1/3) 阅读导航 本文背景 代码实现 本文参考 1.本文背景 聊天软 ...