记录Java实用知识点,截止(包括)到Java8,只作概要的描述,不涉及到具体细节。

变量:
int、long的包装类支持无符号位操作,即其在内存中的位可以用来全部表示正数。
“_”可以用来分隔数值(整形、浮点数皆可),且可以用在多种数值系统里(二进制、十六进制等)。例:3.14_15F,0xCAFE_BABE。
如果一个常量(static final)是基本类型或字符串字面量,编译器会直接把常量替换成相应的值,对常量变更,则所有使用此常量的类需要重新编译。
对静态变量初始化时,可以使用静态初始化块,也可以在赋值表达式中直接引用静态方法。例:static int i = staticMethod(); 实例变量同理,不过要注意实例方法被子类覆盖问题(可以使用final方法)。

继承:
方法重载属于静态多分派(既考虑静态调用对象,又考虑方法参数),在编译时确定;方法重写属于动态单分派(只考虑实际调用对象),在运行时确定。
在源码中方法签名只由名称和参数确定,在字节码中方法签名还包括返回类型、异常等等。
方法重写的条件包括:子类有权限访问父类的方法,方法签名相同,权限、返回类型、抛出异常兼容。
实例中的静态方法可以被继承,但无法被覆盖,属于静态分派。接口中的静态方法无法被继承。
多继承时,类方法优先于接口默认方法;两个接口继承同一个接口中的方法,如果一个接口覆盖了此方法,则此接口优先。

泛型:
泛型允许将类型当作参数使用。Java泛型通过擦除实现,仅在编译期对泛型进行类型检查。
参数化类型指有类型参数的泛型,原生类型指不带泛型参数的泛型(非泛型类型不是原生类型)。
为了兼容性,参数化类型和原生类型可以相互转换,因此会破坏泛型的稳定性。例:List<String> sLi = new ArrayList<>();List rawLi = sLi;rawLi.add(1);
同一个泛型的不同参数化类型不能相互转换,但使用通配符、边界限定能改变此种行为。
在容器中,下界、无界通配符限定后除了null不能添加别的元素,上界通配符限定可以添加上界的子集元素。
可以使用辅助方法捕获通配符的类型信息,从而解除使用通配符的限制。如可以将List<?>的变量传给接受List<T>作为参数的方法,捕获通配符的类型。

内部类:
成员内部类通过外部类实例创建,Outer.Inner inner = out.new Inner(); 在内部类中可通过    Outer.this(外部类类名.this)访问外部类同名实例变量。
在内部类(局部类、匿名类)中使用外部类的局部变量(或方法参数)时必须为final或等效于final(因为局部变量与对象生命周期不同),使用外部类实例变量不受此限制。
非静态内部类中不能有静态成员、静态代码块(常量除外)。
接口是固有静态的,不能在局部块中定义。

Lambda:
Lambda表达式使用功能性接口简化代码的编写,表现上比内部类更加简洁。
遇到方法重载时,Lambda表达式使用参数、方法返回类型等去推断目标类型,从而决定调用哪个方法。
Lambda表达式使用词法作用域,Lambda表达式本身不引入额外的作用域层次,也不继承接口(目标类型)中的变量。在Lambda表达式中使用外部局部变量时,该变量也必须为final或等效于final。
词法作用域范围由在代码中的位置决定,动态作用域范围由运行时环境决定,大多数编程语言使用词法作用域。
功能性接口(functional interface)指只包含一个抽象方法的接口,但接口中可以有多个默认方法或静态方法。
Java8预定义了几个功能性接口,如Predicate<T>用来判定某个条件、Consumer<T>用来执行某个行为、Function<T,R>接受T类型的操作并返回R类型的值(T映射到R)。
Stream用来对数组、容器等进行流式操作,Stream中的方法接受功能性接口类型作为参数并返回Stream,所以能进行链式调用。

注解:
注解是一种特定的接口,用来对程序进行描述。注解本身只是一种元数据,但可以通过程序对被注解的程序进行处理。
类型注解(type annotation)可以用在任何使用类型(Type)的地方,包括变量声明、构造实例(new 表达式)、转型、继承、异常抛出等。
类型注解可以用来增强Java的类型检查,避免程序中潜在错误,如可以使用@NonNull来避免NullPointerException。
可重复注解可以在一个目标上被多次使用。由于兼容性问题,可重复注解还需定义相应的容器注解才能使用(不知道注解里面为什么不能用泛型,不然容器注解就不需要重复定义)。
容器注解的目标(@Target)必须是可重复注解的目标的子集,否则不能通过编译。

异常:
方法执行出错时,抛出相应异常到方法调用栈帧,如果异常没有得到处理,则沿调用栈一直传递,直至线程终结。异常不能跨线程捕获。
受检异常指程序能够预期并应得到处理的异常,错误指程序外部不可预期的异常,运行时异常指程序内部由代码问题造成的异常,应该避免。错误和运行时异常为非受检异常。
异常总是被第一个匹配的catch块捕获,在一个catch块中能捕获多个异常,如catch(E1|E2 e),捕获多个异常时,异常参数为隐式final类型。
try、catch中如果有返回值,会先存储返回值(此处返回值不是变量本身,而是变量所指向的具体值或对象引用),执行完finally块再返回,如果finally有返回值则会覆盖try、catch中的返回值。finally抛出的异常会压制(suppress)try、catch中抛出的异常。
try-with-resources语句自动关闭(调用close方法)实现java.lang.AutoCloseable(java.io.Closeable为其子接口)的资源(resource),关闭顺序与声明顺序相反,try块中抛出的异常会压制try-with-resources中关闭资源时抛出的异常。catch、finally块在资源关闭后执行。
在异常对象上调用getSuppressed方法(Throwable中定义)可以获取被压制的异常。
方法中抛出的异常声明可以为调用其它方法时所抛出的异常类型的所有可能被抛出的具体子类异常集合。

传统I/O:
I/O(传统I/O,非NIO)需要在应用程序(用户态)和操作系统(内核态)之间切换。
缓冲通过减少程序与外部活动(磁盘、网络等)之间的切换次数,从而提高性能。
字符流是对字节流的封装,底层使用字节流进行I/O操作,在此基础上提供字符与字节之间的转换。

Java实用知识记录 —— 截止到Java8的更多相关文章

  1. java面试知识记录

    1.数据库 (1)数据库优化      面试求职:数据库常见面试题(数据库优化思路) 数据库优化方案整理 (2)数据库的事务 MySQL——事务(Transaction)详解 MySQL 事务 2.设 ...

  2. mybatis和java一些知识记录

    <where> <if test="userName != null and userName != ''"> and user_name like con ...

  3. Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  4. 毕向东—Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  5. 黑马毕向东Java基础知识总结

    Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记    侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...

  6. Java并发知识总结,超详细!

    首先给大家分享一个github仓库,上面放了200多本经典的计算机书籍,包括C语言.C++.Java.Python.前端.数据库.操作系统.计算机网络.数据结构和算法.机器学习.编程人生等,可以sta ...

  7. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  8. DataBase MongoDB基础知识记录

    MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...

  9. JAVA实用案例之文件导出(JasperReport踩坑实录)

    写在最前面 想想来新公司也快五个月了,恍惚一瞬间. 翻了翻博客,因为太忙,也有将近五个多月没认真总结过了. 正好趁着今天老婆出门团建的机会,记录下最近这段时间遇到的大坑-JasperReport. 六 ...

随机推荐

  1. 201521123071 《JAVA程序设计》第四周学习总结

    1. 本周学习总结 1.1 1.2 在本周的学习中,主要学习了以下几点: 注释的应用,并能在Eclipse中查看 继承的基本定义,关键字super的用法,覆盖与重载 多态与is-a,instanceo ...

  2. Python笔记2.1

    所有类型如下图: 一 基础数据类型 1)数字类型 复制代码 >>> 2/2+2*2 5.0 >>> (50-5*6)/4 5.0 >>> 8/5 ...

  3. 201521123063 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 网络通讯的两种方式 TCP方式:类似于打电话,能够建立专门的虚拟连接,数据传输可靠 UDP方式:类似与发短 ...

  4. 201521123088《java程序与设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1. 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出 ...

  5. thymeleaf模板引擎调用java类中的方法(附源码)

    前言 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去解决 ...

  6. 06jQuery-04-DOM操作

    jQuery既然是为了帮助你能从js的繁琐中解脱出来,自然在DOM操作上也有自己的一套. 1.修改Text和HTML 之前我们提到过,如果用JS的话,你要修改Text或者HTML需要用到其innerH ...

  7. 一条语句导致CPU持续100%

    一大早收到一堆CPU预警邮件,通常每天只在统计作业执行期间会收到2~3封CPU预警邮件.这次的预警来自另一台服务器,并且明细数据显示其CPU一直维持在49%.登录到服务器,查看任务管理器(查看资源监视 ...

  8. MySQL索引优化实例说明

    下面分别创建三张表,并分别插入1W条简单的数据用来测试,详情如下: [1] test_a 有主键但无索引   CREATE TABLE `test_a` (   `id` int(10) unsign ...

  9. 微服务~Eureka实现的服务注册与发现及服务之间的调用

    微服务里一个重要的概念就是服务注册与发现技术,当你有一个新的服务运行后,我们的服务中心可以感知你,然后把加添加到服务列表里,然后当你死掉后,会从服务中心把你移除,而你作为一个服务,对其它服务公开的只是 ...

  10. TETeLasr Cutting System 开机回零问题

    TETeLasr Cutting System 开机回零问题    :打开 "轴信息"    :打开 加工参数-->机器参数-->脉冲当量: X轴==4000 Y轴== ...