01Java语言基础
文章
11 异常处理
1 异常处理机制 异常与错误 异常的产生 异常的层次 2 异常使用 异常处理机制的关键字 异常类中的方法 捕获异常 多重捕获结构 throws/throw 抛出异常 finally关键字 try-with-resources 3 自定义异常 自定义异常 使用自定义的异常 处理自定义的异常 4 常见的异常 常见的运行时异常 常见的检查性异常 1 异常处理机制异常与错误异常是程序中的一些错误。 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。 运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。 错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。 异常的产生 用户输入了非法数据。 要打开的文件不存在。 网络通信时连接中断 JVM内存溢出。 异常的层次Java程序在执行过程中所发生的异常(广义上的一切不正常)事件可分...
12 Java注解
注解机制 1 注解概述 格式 分类 作用 原理 2 注解使用 注解的实现原理 注解的使用步骤 属性的数据类型及特别的属性:value和数组 总结 3 元注解 @Target @Retention @Documented @Inherited 4 JDK中的标准注解 @Override @Deprecated @SuppressWarnings @SafeVarargs @FunctionalInterface 5 Spring框架下一个注解的实现 登录校验——定义注解 登录校验——使用注解 登录校验——实现注解 Spring框架下的另一个实现 注解机制 Java注解是怎么实现的 注解 Annotation 实现原理与自定义注解例子 Java注解 1 注解概述格式123public @interface 注解名称{ 属性列表;} 分类根据其定义者的角色可以分为以下四种种: 元注解:修饰注解的注解 标准注解:JDK内置的注解 框架注解:第三方框架提供的注解 自定义注解:用户自定义的注解 还可以根据其出现的位置分为类、方法...
13 lambda表达式
lambda表达式概述 AKA 函数式编程。只有一个方法的类。方法即可代表类。 简介lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加简洁。 Lambda表达式的使用场景:用以简化接口实现。 接口实现 设计接口的实现类 12345Interface B{}Class A implements B{}new A(); 使用匿名内部类 12345//直接创建匿名内部类。Interface B{}new B(){} lambda表达式 123456//使用lambda表达式实现接口Interface B{}Test test = () -> { System.out.println("test");};test.test(); 注意事项这⾥类似于局部内部类、匿名内部类,依然存在闭包的问题。 如果在lambda表达式中,使用到了局部变量,那么这个局部变量会被隐式的声...
14 语法糖
参考文献 1 Java语法糖语法糖(Syntactic Sugar),也叫糖衣语法,是英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语。指的是,在计算机语言中添加某种语法,这种语法能使程序员更方便的使用语言开发程序,同时增强程序代码的可读性,避免出错的机会;但是这种语法对语言的功能并没有影响。 Java中的泛型,变长参数,自动拆箱/装箱,条件编译等都是语法糖。 泛型与C#中的泛型相比,Java的泛型可以算是“伪泛型”了。在C#中,不论是在程序源码中、在编译后的中间语言,还是在运行期泛型都是真实存在的。Java则不同,Java的泛型只在源代码存在,只供编辑器检查使用,编译后的字节码文件已擦除了泛型类型,同时在必要的地方插入了强制转型的代码。泛型代码: 12345public static void main(String[] args) { List<String> stringList = new ArrayList<String>(); stringList.add("oliv...
15 动态代理
Java 动态代理 参考文档https://juejin.cn/post/6924117553782456328?searchId=202312161209044A1A61473779E811BC95https://www.jianshu.com/p/e983ecf3e7a5 1 基本概念是什么动态代理在Java中有着广泛的应用,比如Spring AOP、Hibernate数据查询、测试框架的后端mock、RPC远程调用、Java注解对象获取、日志、用户鉴权、全局性异常处理、性能监控,甚至事务处理等。 代理模式代理模式:给某一个对象提供一个代理,并由代理对象来控制对真实对象的访问。代理模式是一种结构型设计模式。 设计模式-代理 按照场景分类代理模式按照职责(使用场景)来分类,至少可以分为以下几类:1、远程代理。 2、虚拟代理。 3、只能代理 4、保护(Protect or Access)代理。 按照实现分类如果根据字节码的创建时机来分类,可以分为静态代理和动态代理: 所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和真实主题角色的关系在运行前就确定了。 ...
16 javaSPI
参考文献https://www.zhihu.com/question/486985113/answer/2627178730 1 概述JavaSPI机制概述Java SPI机制:SPI全称为Service Provider Interface,服务提供接口,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 SPI就是一种将服务接口与服务实现分离以达到解耦、大大提升了程序可扩展行性的机制。引入服务提供者就是即SPI接口的实现者,通过本地注册来发现获取到具体的实现类。实现轻松可插拔。 Java SPI本质上其实就是“基于接口编程+策略模式+配置文件”组合实现的动态加载机制。 为了实现在模块装配的时候不用在程序里动态指明,这就需要一种本地服务发现机制。Java spi就是提供这样的一个机制:为某个接口寻找服务实现的机制。 JavaSpi起本身也是一种控制反转思想和依赖注入框架。通过额外的程序注入类的实现。包括控制反转和依赖注入两个过程。“Service Provider”和相应的工具”ServiceLoader”。其声明文件相当于...
19 staic关键字
static1 静态变量 静态变量:又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它。静态变量在内存中只存在一份。 实例变量:每创建一个实例就会产生一个实例变量,它与该实例同生共死。 static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。static成员变量的初始化顺序按照定义的顺序进行初始化。所以我们一般在这两种情况下使用静态变量:对象之间共享数据、访问方便。 123456789101112public class A { private int x; // 实例变量 private static int y; // 静态变量 public static void main(String[] args) { // int x = A.x; // Non-static fiel...
20 final关键字
final1. 数据声明数据为常量,可以是编译时常量,也可以是在运行时被初始化后不能被改变的常量。 对于基本类型,final 使数值不变; 对于引用类型,final 使引用不变,也就不能引用其它对象,但是被引用的对象本身是可以修改的。 如果引用时类的成员变量,则必须当场赋值,否则编译会报错。 1234final int x = 1;// x = 2; // cannot assign value to final variable 'x'final A y = new A();y.a = 1; 2. 方法声明方法不能被子类重写。当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。 private 方法隐式地被指定为 final,如果在子类中定义的方法和基类中的一个 private 方法签名相同,此时子类的方法不是重写基类方法,而是在子类中定义了一个新的方法。 3. 类声明类不允许被继承。
22 Java包机制
包1 基本概念包我们每天建的项目就是在一个目录下,我们每次都会建立一个包,这个包在磁盘下其实就是一个目录。包是用来分门别类的管理技术,不同的技术类放在不同的包下,方便管理和维护。 包名的命名规范: 12路径名.路径名.xxx.xxx// 例如:com.github.krislinzhao 包名一般是公司域名的倒写。例如:黑马是www.github.com,包名就可以定义成com.github.技术名称。 包名必须用’’.”连接。 包名的每个路径名必须是一个合法的标识符,而且不能是Java的关键字。 2 权限修饰符在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,我们之前已经学习过了public 和 private,接下来我们研究一下protected和缺省(default默认)修饰符的作用。 public:公共的,所有地方都可以访问。 protected:当前类 ,当前包,当前类的子类可以访问。 缺省(没有修饰符):当前类 ,当前包可以访问。 private:私有的,当前类可以访问。public > protected ...
23 native方法
https://blog.csdn.net/weixin_43653599/article/details/111592025 https://www.jianshu.com/p/21f7ebb9e63f














