Java实用知识记录 —— 截止到Java8
记录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的更多相关文章
- java面试知识记录
1.数据库 (1)数据库优化 面试求职:数据库常见面试题(数据库优化思路) 数据库优化方案整理 (2)数据库的事务 MySQL——事务(Transaction)详解 MySQL 事务 2.设 ...
- mybatis和java一些知识记录
<where> <if test="userName != null and userName != ''"> and user_name like con ...
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 毕向东—Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 黑马毕向东Java基础知识总结
Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记 侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...
- Java并发知识总结,超详细!
首先给大家分享一个github仓库,上面放了200多本经典的计算机书籍,包括C语言.C++.Java.Python.前端.数据库.操作系统.计算机网络.数据结构和算法.机器学习.编程人生等,可以sta ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- DataBase MongoDB基础知识记录
MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...
- JAVA实用案例之文件导出(JasperReport踩坑实录)
写在最前面 想想来新公司也快五个月了,恍惚一瞬间. 翻了翻博客,因为太忙,也有将近五个多月没认真总结过了. 正好趁着今天老婆出门团建的机会,记录下最近这段时间遇到的大坑-JasperReport. 六 ...
随机推荐
- 201521123023《Java程序设计》第五周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 Q1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过 ...
- 201521123066 《java程序设计》第一周学习总结
本周学习总结 (1)学习了Java的跨平台运行是因为有虚拟机,其特点是具有简单性,结构中立. (2)老师使用了新的作业模式,要学会发现其中的优势并好好学习使用. 书面作业 (1)为什么java程序可以 ...
- 201521123063 《Java程序设计》 第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 读操作 (1)读取控制台输入: BufferedReader br = new BufferedReader( ...
- Java第十二周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...
- [js高手之路]Node.js模板引擎教程-jade速学与实战4-模板引用,继承,插件使用
一.block 模块复用 把需要复用的模块用block定义 block后面跟上模块的名字,引用一次block 内容就会被复用一次 编译之后的结果: 二,继承模板(extends) 在实际开发中,网站的 ...
- could not get next sequence value
1.触发事件 在电脑A上敲项目代码,数据库原始资料是直接使用别人写好的sql导入(建表和导入表数据等): 将电脑A上数据库的资料,使用PL/SQL Developer导出项目中所用表(此时未导出Ora ...
- Java Annotation注解继承说明
有关Annotation的继承说明: 1.JDK文档中的说明是:只有在类上应用的Annotation才能被继承,而实际应用时的结果是:除了类上应用的Annotation能被继承外,没有被重写的方法的A ...
- Spring @RequestParam乱码问题
在网上找了很多资料才找到解决的方法,通过URL传递命名参数,后台接收的却是乱码解决方法如下: 方法一:将接收的参数重新编码 @RequestMapping(value="/handle&qu ...
- SQL三类语句
1. DDL (Data Definition Language, 数据定义语言) CREATE: 创建数据库和表等对象 DROP: 删除数据库和表等对象 ALTER: 修改数据库和表等对象的结构 2 ...
- Opengl4.5 中文手册—E
索引 A B C D E F G H I J K L M N O P Q ...