Java SE
文章平均质量分 87
java基础总结
chy1984
这个作者很懒,什么都没留下…
展开
-
Java @FunctionalInterface 函数式接口
接口中的抽象方法(函数)有且仅有1个;允许同时存在默认方法等其它类型的方法。jdk8 新增的 @FunctionalInterface 注解,用于标记函数式接口;java编译器会把满足函数式接口定义的任何接口都视为函数式接口,不管这些接口上是否标注了 @FunctionalInterface。原创 2022-10-09 20:00:00 · 1199 阅读 · 0 评论 -
Java Reflect 反射
反射:通过类的class对象来获取类的元信息,动态操作类中的字段、调用类中的方法。常见的应用场景开发通用框架时,从外部(配置文件)加载类的配置,动态创建对象、设置属性值,比如spring实现动态代理,动态创建代理对象,对原功能进行扩展、增强实现注解。优缺点优点:动态操作,可以根据传入的参数或从配置文件中读取的配置,动态创建对象、设置属性,十分灵活。缺点:①通过反射可以操作类的私有成员,破坏了类的封装性,存在安全隐患;②开销大,使用频率低时性能还行,频繁使用时严重影响性能。原创 2022-08-19 20:00:00 · 373 阅读 · 0 评论 -
Java Stream流式处理
findFirst()、findAny() 返回 Optional,但选取的元素是null时,这2个方法会直接抛出NPE,后续也就没必要用 Optional 的 orElse()、orElseGet() 来设置为 null 时的默认值。stream 流,是jdk8新增的一种集合处理方式,可以将集合转换为流,进而对集合中的元素进行排序、过滤、聚合等⼀系列的操作。相比于map(),mapToXxx() 还提供了该种类型的流的特有方法,比如数值型求和、平均数、最值。将流中的元素映射为对应的流(列表)原创 2022-04-15 13:06:18 · 4837 阅读 · 0 评论 -
Java 集合源码分析
集合用于存储指定类型的元素,部分集合还实现了栈、队列、树等数据结构。集合的两个根接口Collection 单列集合Map 双列集合/*** 存储map中所有的key*//*** 存储map中所有的value*/Map内置了2个单例集合分别存储key、value,key唯一标识一个键值对,使用Set存储,不可重复。集合的实现类都重写了toString()方法。原创 2021-11-02 13:31:56 · 1008 阅读 · 0 评论 -
Java String、StringBuilder、StringBuffer
并不是,编译器会自动优化代码,把修改String的操作转换为:创建一个StringBuilder,使用StringBuilder进行字符串的(1个或多个)修改操作,修改完成后将StringBuilder转换为String返回。编译器会优化为:在循环体中,创建一个StringBuilder,使用StringBuilder进行字符串的修改,转为String返回。如果所需容量大于 原容量*2 + 2,则扩容为实际所需容量(将要存储的字符长度),否则扩容为 原容量*2 + 2。都是使用char[ ]来存储字符。原创 2021-10-26 14:30:39 · 281 阅读 · 0 评论 -
Java 异常处理、初始化块、final关键字、运算符优先级、循环语句
循环这种批量操作的场景,往往要尽量避免循环被异常终止,保证循环的继续执行,在循环体中可能发生异常的地方使用try…比如使用循环批量推送短信,某次循环时发生异常,没有在循环内处理异常,让异常抛到了循环外,则循环会被终止,循环中后续批次的消息都不会发送。在循环体中,慎用throw直接抛出异常,如果循环体中的异常直接抛到了循环体外,会导致循环终止,后续批次都不会执行。>>>是无符号右移,和>>右移一样,只是不考虑最高位的正负,不管最高位原来是0还是1,都直接取0。如果多种异常的捕获处理逻辑相同,也可以这样写。..原创 2021-08-31 19:33:19 · 588 阅读 · 0 评论 -
JDK7~13的新特性
目录jdk7新的资源关闭方式 try-with-resourcesjdk8接口新增的默认方法、静态方法新增的base64加解密api新增的时间日期类、时间日期处理类新增的NPE处理类Optional新增的函数式接口、lambda表达式函数式接口lambda表达式jdk8内置的函数式接口新增的方法引用方式::新增的集合操作方式Streamstream的基本使用map()filter()sorted()limit()allMatch()、anyMatch()max()、min()reduce()foreach(原创 2021-02-24 19:34:30 · 833 阅读 · 6 评论 -
Java 注解、自定义注解
可以把在对类|接口、变量、方法的通用操作|处理抽出来,写成注解,从而在编译时、运行时自动做一些额处处理。注解的实现原理:注解实质是对目标进行增强,做一些额外的处理,通常使用aop进行实现,通过反射获取注解的元数据,生成代理代替目标进行工作。注解的优点:使用简单方便,复用性强。@Target(ElementType.METHOD) //注解的作用对象,String[] 可指定多个值,eg. @Target({ElementType.TYPE, ElementType.METHOD})原创 2020-11-22 20:16:48 · 1249 阅读 · 2 评论 -
Java proxy 代理
看invoke()的参数,在编译时不能确定要增强的方法,运行时根据传入的参数进行增强,动态生成代理,所以叫做动态代理;如果对目标类中的方法的增强逻辑都一样,用动态代理,实现了目标实现了接口,用jdk动态代理、cglib代理均可,如果目标没有实现接口,则用cglib代理。使用第三方的cglib库实现的代理叫做cglib代理。如果要针对目标类中的众多方法设置不同的增强,用静态代理,静态代理只能小范围使用,不然重复代码多、不好维护。静态代理、cglib动态代理都可以代理接口、类,jdk动态代理只能代理接口。...原创 2020-06-03 08:51:03 · 2306 阅读 · 2 评论 -
Java JDBC
目录jdbc简介StatementPreparedStatement从配置文件加载数据库配置jdbc事务管理说明 jdbc简介jdbc是一套数据库编程接口,由各数据库厂商提供实现(数据库驱动),使用相同的方式就可操作不同的数据库,实现了跨数据库编程。使用时添加数据库驱动到依赖中。 Statement//注册驱动,mysql5不带cj,mysql8带cjClass.forName("com.mysql.cj.jdbc.Driver");String url = "j原创 2020-05-22 10:38:33 · 438 阅读 · 0 评论 -
Java IO
目录File类RandomAccessFile类 File类windows路径可以用\或/,linux路径用/,为跨平台一律使用/File即可以指文件,也可以指目录(文件夹)。File类常用的方法String getName() //获取文件|文件夹名,文件名包括后缀boolean exists() boolean isFile() boolean isDirectory()long length() //文件|文件夹的大小,字节long last原创 2020-05-22 09:43:09 · 484 阅读 · 0 评论 -
Java 函数、类、枚举、接口、泛型、lambda表达式
目录函数类接口泛型创建对象的4种方式异常处理final关键字初始化块lambda表达式 函数递归函数:在方法体内调用方法本身,方法要有出口。函数重载:同一个类中,方法名相同,形参表不同(数据类型、参数个数),与返回值类型、修饰符无关。个数可变的参数:放在形参表末尾,调用时该位置可传入0个或多个指定类型的参数,实质是以数组方式传入,在函数体中以数组方式进行操作。public void test(String str, String... args) { //jvm会预先创建一个数组原创 2020-05-21 14:33:33 · 810 阅读 · 0 评论 -
Java 日期时间
可以使用 Calendar 的具体实现类 GregorianCalendar。SimpleDateForm是DateForm的子类,简单、强大,是主流方式。格式单一,功能简陋,但支持将String类型的时间日期转换为Date对象。相当于DateFormat、SimpleDateFormat的结合体。SimpleDateFormat很常用,使用时需要注意2个问题。Date的大部分方法都过时了,仅使用以下未过时的方法。原创 2020-05-21 08:39:00 · 925 阅读 · 1 评论 -
Java JDK常用的类
RoundingMode 枚举和 BigDecimal 内部定义的 ROUND_XXX 系列常量对应,可参考:https://blog.csdn.net/piaoranyuji/article/details/116594403。/是整除,如果2个操作数都是整数,则结果默认舍弃小数部分、只取整;只要有1个操作数是浮点数,结果就是浮点数。占位符可以使用#或者0,区别位数不足时,#不会自动填充,0会自动填充0。Object是所有类的根类,提供了对象的基本方法。#.## => 60.5 不会自动填充0。原创 2020-05-20 21:36:39 · 976 阅读 · 0 评论 -
Java 数据类型
通过 == 比较包装类型和基本类型时,会先自动拆箱将包装类型转换为基本类型,再进行比较,如果包装类型为null,自动拆箱时会发生NPE。以parallel开头的方法和不带此前缀的方法使用方式、效果相同,只是parallel系列方法通过cpu并行,数据量较大时可以提高效率。自动装箱:jvm根据需要自动将基本类型的值转换为包装类型;自动拆箱:jvm根据需要自动将包装类型转换为基本类型。数组创建后,容量|长度就固定了、不可改变,如果需要扩容,可以复制元素到新数组中。装箱:将基本类型的值转换为包装类型;原创 2020-05-20 20:09:08 · 917 阅读 · 0 评论 -
Java 常用命令、文档注释、命令行参数
see、@link 都可以链接到某个类、某个类的字段方法,链接到当前类中的字段、方法时可以省略类名。二者区别在于 @see 独立成行、首尾不能有其它文本,@link 要放在 { } 中、前后可以有其它文本。设置命令行参数,第一个表示源文件编码字符集是utf-8,第二个指定要生成的API文档的编码字符集是utf-8。指定API文档的语言代码,缺省时默认为操作系统使用的语言,大陆是简体中文。@throws、@exception 等效,更推荐使用 @throws。使用IDEA提取API文档。原创 2020-05-20 19:47:38 · 812 阅读 · 0 评论 -
JDK 1.8环境配置
不要跳过这一步,虽然可以直接在path变量中配置bin目录,但使用zk之类依赖jdk的软件时会使用JAVA_HOME这个环境变量,找不到会报错。rpm方式会自动配置环境变量,此处只介绍tar.gz方式,先放到/usr/local下。先看一下有没有安装jdk,不符合要求就 yum remove 卸载。1、新建环境变量JAVA_HOME,值为jdk主目录。3、 在Path中添加jdk的bin目录。原创 2020-05-20 17:59:15 · 490 阅读 · 1 评论