
JavaSE
文章平均质量分 86
JavaSE学习
Coca1cole
~
展开
-
Java新特性
包作为依赖时(包括JDK官方库),实际上很多功能我们并不会用到,但是由于它们是属于同一个依赖捆绑在一起,这样就会导致我们可能只用到一部分内容,但是需要引用一个完整的类库,实际上我们可以把用不到的类库排除掉,大大降低依赖库的规模。记录类型在Java 16才正式开放使用,记录类型本质上也是一个普通的类,不过是final类型且继承自java.lang.Record抽象类的,它会在编译时,会自动编译出。Lambda为所需要的接口提供了一个方法作为它的实现,而之后创建实现类就只需要交给JVM去处理就好了。原创 2023-11-02 13:10:20 · 223 阅读 · 0 评论 -
Java-多线程进阶
CAS: 全称Compare and swap,字面意思:”比较并交换“一个 CAS 涉及到以下操作:比较 A 与 V 是否相等(比较)如果比较相等,将 B 写入 V(交换)返回操作是否成功当多个线程同时对某个资源进行CAS操作,只能有一个线程操作成功,但是并不会阻塞其他线程,其他线程只会收到操作失败的信号。CAS 可以视为是一种乐观锁. (或者可以理解成 CAS 是乐观锁的一种实现方式)java 的 CAS 利用的的是 unsafe 这个类提供的 CAS 操作。原创 2023-10-25 08:29:44 · 225 阅读 · 0 评论 -
Java多线程案例
Executors 本质上是 ThreadPoolExecutor 类的封装,ThreadPoolExecutor 提供了更多的可选参数, 可以进一步细化线程池行为的设定。定时器也是软件开发中的一个重要组件. 类似于一个 “闹钟”. 达到一个设定的时间之后, 就执行某个指定好的代码。阻塞队列的一个典型应用场景就是 “生产者消费者模型”. 这是一种非常典型的开发模型。待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取。阻塞队列是一种特殊的队列. 也遵守 “先进先出” 的原则。原创 2023-10-23 12:30:32 · 199 阅读 · 0 评论 -
Java-IO流
实际上进行I/O操作的并不是BufferedInputStream,而是我们传入的FileInputStream,而BufferedInputStream虽然有着同样的方法,但是进行了一些额外的处理然后再调用FileInputStream的同名方法,这样的写法称为。读取的是一个字符串或是一个个字符,但是我只能往一个OutputStream里输出,但是OutputStream又只支持byte类型,如果要往里面写入内容,进行数据转换就会很麻烦,那么能否有更加简便的方式来做这样的事情呢。原创 2023-10-22 10:36:17 · 182 阅读 · 0 评论 -
Java多线程编程
每个线程都有一个自己的工作内存,可以使用ThreadLocal类,来创建工作内存中的变量,它将我们的变量值存储在内部(只能存储一个变量),不同的线程访问到ThreadLocal对象时,都只能获取到当前线程所属的变量。synchronized用的锁是存在Java对象头里的,synchronized的底层是使用操作系统的mutex lock实现的。synchronized上锁是需要传入对象的,当对象不同时,获取到的是不同的锁,因此并不能保证自增操作的原子性。注:优先级高的线程理论上来说更容易被调度到;原创 2023-10-21 21:05:02 · 319 阅读 · 0 评论 -
Java泛型
泛型方法会在使用时自动确定泛型类型,比如上我们定义的是类型T作为参数,同样的类型T作为返回值,实际传入的参数是一个字符串类型的值,那么T就会自动变成String类型,因此返回值也是String类型。我们前面说了,重写的条件是需要和父类的返回值类型和形参一致,而泛型默认的原始类型是Object类型,子类明确后变为其他类型,这显然不满足重写的条件,但是为什么依然能编译通过呢?泛型其实就一个待定类型,我们可以使用一个特殊的名字表示泛型,泛型在定义时并不明确是什么类型,而是需要到使用时才会确定对应的泛型类型。原创 2023-10-21 09:39:47 · 151 阅读 · 0 评论 -
Java面向对象进阶
异常其实就两大类,一个是编译时异常,一个是运行时异常编译时异常只需要继承Exception就行了运行时异常只需要继承RuntimeException就行了还有一种类型是Error,它是所有错误的父类,同样是继承自Throwable的//Math也是java.lang包下的类,所以说默认就可以直接使用//我们可以使用pow方法直接计算a的b次方//abs方法可以求绝对值//快速取最大值//快速取最小值//求一个数的算术平方根//求π/2的正弦值,这里我们可以使用预置的PI进行计算。原创 2023-10-20 08:21:50 · 146 阅读 · 0 评论 -
Java集合类
集合类其实就是为了更好地组织、管理和操作我们的数据而存在的,包括列表、集合、队列、映射等数据结构。原创 2023-10-19 21:12:14 · 232 阅读 · 0 评论 -
Java网络编程
通过Socket技术(它是计算机之间进行的或一种方式),我们就可以实现两台计算机之间的通信Socket也被翻译为套接字,是操作系统底层提供的一项通信技术,它支持TCP和UDP而Java就对socket底层支持进行了一套完整的封装,我们可以通过Java来实现Socket通信一旦TCP连接建立,服务端和客户端之间就可以相互发送数据,直到客户端主动关闭连接。原创 2023-10-17 20:59:14 · 250 阅读 · 0 评论 -
JavaSE抽象类和接口
在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。Object是Java默认提供的一个类,Java里面所有的类都会默认继承Object类,即所有类的对象都可以使用Object的引用进行接收。在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是一个类可以实现多个接口。接口的本质就是一种抽象出来的公共方法,Java不能进行多继承类,但是可以多实现接口,以丰富类的方法。原创 2023-04-10 12:36:35 · 532 阅读 · 2 评论 -
JavaSE异常
Java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构具体方式:自定义异常类,然后继承自Exception 或者 RunTimeException实现一个带有String类型参数的构造方法,参数含义:出现异常的原因if(!throw new UserNameException("用户名错误!");} if(!throw new PasswordException("用户名错误!");原创 2023-04-10 00:24:18 · 422 阅读 · 0 评论 -
Java的String类为什么要设成immutable类型
,因为这样的话,如果变量改变了它的值,那么其它指向这个值的变量的值也会一起改变。因为字符串是不可变的,所以它的值是不可改变的,否则黑客们可以钻到空子,改变字符串指向的对象的值,造成安全漏洞。如果你知道一个对象是不可变的,那么需要拷贝这个对象的内容时,就不用复制它的本身而只是复制它的地址,复制地址(通常一个指针的大小)需要很小的内存效率也很高。,因为在多线程同时进行的情况下,一个可变对象的值很可能被其他进程改变,这样会造成不可预期的结果,而使用不可变对象就可以避免这种情况。字符串自己便是线程安全的。转载 2023-04-09 14:19:29 · 264 阅读 · 1 评论 -
JavaSE继承和多态
并在子类构造方法中选择合适的父类构造方法调用,否则编译失败在子类构造方法中,super(…)调用父类构造时,必须是子类构造函数中第一条语句super(…)只能在子类构造方法中出现一次,并且不能和this同时出现。原创 2023-04-06 17:30:48 · 639 阅读 · 0 评论 -
【 JavaSE 】 类和对象
前言本章主要讲解:类的定义方式以及对象的实例化类中的成员变量和成员方法的使用对象的整个初始化过程类和对象初步认知C语言是面向过程:关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题面向过程注重的是过程,在整个过程中所涉及的行为,就是功能JAVA是基于面向对象:关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成面向对象注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来举例:将大象放入冰箱面向过程: 1.把冰箱打开 2原创 2021-09-15 23:47:38 · 472 阅读 · 49 评论 -
【 JavaSE 】 深入数组
前言本章主要讲解数组基本用法什么是数组数组本质上就是让我们能 "批量" 创建相同类型的变量(相同的类型)注:特别是表示大量的数据,用数组非常便捷创建数组基本语法:// 动态初始化数据类型[] 数组名称 = new 数据类型 [] { 初始化数据 };// 静态初始化数据类型[] 数组名称 = { 初始化数据 };示例:int[] arr = new int[]{1, 2, 3};int[] arr = {1, 2, 3};注:...原创 2021-09-09 21:05:14 · 858 阅读 · 89 评论 -
【 JavaSE 】方法的使用
目录前言方法的基本用法定义语法注意事项实参和形参方法的重载什么是重载重载要解决的问题方法递归什么是递归递归执行过程分析递归练习总结递归特点前言本章我们主要讲解:方法的基本用法 方法的重载 方法的递归方法的基本用法简单来说方法:方法就是一个代码片段,类似于 C 语言中的函数存在的意义:能够模块化的组织代码 做到让代码被重复使用,一份代码可以用在多个位置 让代码更好理解、更简单 直接调用现有方法,不必重复造轮子定义原创 2021-09-07 10:09:09 · 894 阅读 · 70 评论 -
【 JavaSE 】 程序逻辑控制
前言本章主要讲解:1. Java中程序的逻辑控制语句 2. Java中的输入输出方式顺序结构 按照代码书写的顺序一行一行执行分支结构if 语句基本语法形式:if(布尔表达式){ //条件满足时执行代码}if(布尔表达式){ //条件满足时执行代码}else{ //条件不满足时执行代码}//多分支if(布尔表达式){ //条件满足时执行代码}else if(布尔表达式){ //条件满足时执行代码}else{ ...原创 2021-09-03 20:05:32 · 1251 阅读 · 68 评论 -
【 JavaSE 】 数据类型和运算符
前言本文主要讲解:理解基本数据类型Java类型汇总整型变量-int\长整型变量-long\短整形变量-short基本语法格式:int 变量名 = 初始值;long 变量名 = 初始值;short 变量名 = 初始值;包装类:Integer(依旧是整形); Long ; Short 示例:int num = 10; // 定义一个整型变量System.out.println(num);long num = 10L; // 定义一个长整型变量, ...原创 2021-08-30 21:16:04 · 1051 阅读 · 77 评论