
Java基础教程
文章平均质量分 79
讲述了Java基础的内容详解,可以更好的帮助大家巩固Java基础。
zues~
每天都是快乐的一天,记得好好的活着。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
敲代码的速度
打字速度可以说是成为一名程序员的基本功,程序员的打字速度在工作中越来越重要,下面就为大家分享一下我在联系打字速度的时候一些小经验,希望对大家有帮助。刚开始学习编程的时候,我每天都会抽出1个小时进行打字练习,我刚开始学习的时候,打字速度让我都大跌眼界,54/分的打字速度大大降低了敲代码的速度,现在我已经联系两个月了,速度也是达到了170/分。原创 2023-09-25 20:06:24 · 579 阅读 · 0 评论 -
【Java面试】如果一个线程两次调用start(),会出现什么问题?
在Java里面,一个线程只能调用一次start()方法,第二次调用会抛IllegalThreadStateException异常。再调用一次start(),相当于让这个正在运行的线程重新运行,不管从线程的安全性角度,还是从线程本身的执行逻辑,都是不合理的。当我们第一次调用start()方法的时候,线程的状态可能处于终止或者非NEW状态下的其他状态。因此为了避免这个问题,在线程运行的时候会先判断当前线程的运行状态。在Java里面,线程的生命周期包括6种状态。一个线程本身是具备一个生命周期的。原创 2023-08-19 14:22:14 · 237 阅读 · 0 评论 -
Java线程调度以及算法
Java的线程调度程序是JVM的一部分,它决定应该运行哪个线程。无法保证线程调度程序将选择运行哪个可运行线程。一次只能有一个线程在一个进程中运行。线程调度程序主要使用抢占式或时间切片调度来调度线程。在抢占式调度下,优先级最高的任务一直执行,直到它进入等待或死亡状态或更高优先级的任务出现。在时间切片下,任务执行预定义的一段时间,然后重新进入就绪任务池。然后,调度程序根据优先级和其他因素确定接下来应执行的任务。原创 2023-08-13 15:26:53 · 482 阅读 · 0 评论 -
【Java面试题】线程中start方法和run方法的区别?
start作用是启动一个新线程。当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。但是这并不意味着线程就会立即运行。只有当CPU分配时间片时,这个线程获得时间片时,才开始执行run()方法。start()不能被重复调用,它调用run()方法,run()方法是你必须重写的。run()就和普通的成员方法一样,可以被重复调用。如果直接调用run方法,并不会启动新线程!原创 2023-08-19 14:39:24 · 330 阅读 · 0 评论 -
【Java面试题】线程创建的三种方式及区别?
总结:Runnable和Callable功能一样的,都是构造线程执行的任务;其区别可以简单理解为有无返回值的区别,通常Callable使用的比较多。原创 2023-08-19 15:06:45 · 657 阅读 · 0 评论 -
高级进阶多线程——多任务处理、线程状态(生命周期)、三种创建多线程的方式
Java中的多线程是一个同时执行多个线程的进程。线程是一个轻量级的子进程,是最小的处理单元。多进程和多线程都用于实现多任务处理。但是,一般使用多线程而不是多进程,这是因为线程使用共享内存区域。它们不分配单独的内存区域以节省内存,并且线程之间的上下文切换比进程花费的时间更少。Java多线程主要用于游戏,动画等。原创 2023-08-12 11:18:44 · 650 阅读 · 0 评论 -
Java——线程睡眠全方位解析
Thread.sleep 和 TimeUnit 是让线程休眠并在一段时间后自动唤醒,而 wait、Condition、LockSupport 提供了休眠和唤醒线程的方法,其中 Condition 为 wait 方法的升级版,而 LockSupport 是更底层的让线程休眠和唤醒的方法,它可以实现唤醒某个指定的线程,这是其它方法所不具备的(功能)。线程睡眠作为并发编程的重要一环,不仅可以有效的控制线程的执行时间,还可以提高程序的运行效率和稳定性,因此在实际开发中,需要合理的应用线程睡眠技术。原创 2023-08-13 15:46:36 · 14711 阅读 · 0 评论 -
【Java面试题】多进程及多线程的区别?
没有线程的进程可以被视为单线程的,如果一个进程拥有多个线程,则执行过程不是一条直线的,而是多条线共同完成。同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器PC,线程的切换开销小(部分寄存器)除了CPU外,不会为线程分配内存,只能共享那个所在线程的资源,拥有相同的地址空间。每个进程都有独立的代码和数据空间(进程上下文),进程间的切换开销大。每个进程相互独立,不影响主程序的稳定性,子进程崩溃没关系;线程是进程的一部分,所以线程被称为轻权或轻量级进程。一个线程的崩溃可能影响到整个程序的稳定性;原创 2023-08-19 15:29:45 · 221 阅读 · 0 评论 -
Java 9 新特性概述
Java 9 正式发布于 2017 年 9 月 21 日。作为 Java8 之后 3 年半才发布的新版本,Java 9 带来了很多重大的变化。其中最重要的改动是 Java 平台模块系统的引入。除此之外,还有一些新的特性。本文对 Java9 中包含的新特性做了概括性的介绍,可以帮助你快速了解 Java 9。原创 2023-08-25 19:58:30 · 1002 阅读 · 0 评论 -
线程的生命周期详解
线程的状态是按照箭头方向来走的,比如线程从New状态是不可以直接进入Blocked状态的,它需要先经历Runnable状态。线程生命周期不可逆:一旦进入Runnable状态就不能回到New状态;一旦被终止就不可能再有任何状态的变化。所以一个线程只能有一次New和Terminated状态,只有处于中间状态才可以相互转换。也就是这两个状态不会参与相互转化。原创 2023-08-24 19:57:30 · 880 阅读 · 0 评论 -
Java反射机制是什么?
是 Java 语言的一个重要特性。在学习 Java 反射机制前,大家应该先了解两个概念,编译期和运行期。是指把源码交给编译器编译成计算机可以执行的文件的过程。在 Java 中也就是把 Java 代码编成 class 文件的过程。编译期只是做了一些翻译功能,并没有把代码放在内存中运行起来,而只是把代码当成文本进行操作,比如检查错误。是把编译后的文件交给计算机执行,直到程序运行结束。所谓运行期就把在磁盘中的代码放到内存中执行起来。原创 2023-08-17 21:08:30 · 471 阅读 · 1 评论 -
交换排序——选择排序和冒泡排序的区别是什么?
冒泡排序属于交换排序算法的一种;选择排序算法是原地排序算法的一种;冒泡排序的核心思想是把相邻的元素进行两两比较,当一个元素大于右侧相邻的元素时,就交换它们的位置;当一个元素小于或等于右侧相邻的元素时,则保持位置不变。选择排序的实现思想,就是不断地从未排序的元素中选择最大(或最小)的元素,放入到已排好序的元素集合中,直到未排序的元素为空。两者的区别简单了说就是冒泡排序在比较的过程中待排序的数据会发生位置改变,而选择排序法在比较过程中,是记录较大/较小数据的索引,只有在找到最大/最小数据的时候才会发生交换。原创 2023-08-12 17:38:10 · 1722 阅读 · 0 评论 -
IDEA常用快捷键整理(详细版)
是一个非常强大的 Java 集成开发环境(IDE)。不仅功能丰富,而且易于使用。本文将为大家整理一份 IntelliJ IDEA 中的快捷键大全,帮助提高开发效率,发挥 IDEA 的最大潜力。原创 2023-08-12 09:45:15 · 452 阅读 · 0 评论 -
Java不可变集合详解
不可变集合,英文叫 immutable,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。从上面代码可以看出 Set、List 比较简单,程序只要为它们的 of() 方法传入 N 个集合元素即可创建 Set、List 集合。创建不可变的 Map 集合有两个方法。使用 of() 方法时只要依次传入多个 key-value 对即可;还可使用 ofEntries() 方法,该方法可接受多个 Entry 对象,因此程序显式使用 Map.entry() 方法来创建原创 2023-08-11 20:59:11 · 408 阅读 · 0 评论 -
Java泛型集合简明教程
我们编写一个数组并对数组进行排序,不管是对浮点型数组、整型数组、字符串数组或者是其他任何类型的数组进行排序,我们可以利用方法重载的方式,针对每种类型的数组分别编写一个排序方法,需要为几种类型的数组排序,我们就定义几个排序方法。如果是这么实现的,代码可重用性太差。或者是定义一个方法,里面设置一个Object[]类型的参数,这样无论是哪种类型都可以处理了。这样定义方法我们需要在Object类型和整型、String类型或其他类型之间进行强制类型转换。原创 2023-08-11 20:29:37 · 431 阅读 · 0 评论 -
Java 包装类(Wrapper)
Java是一个面向对象的编程语言,但是Java中的八种基本数据类型却是不面向对象的,为了使用方便和解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八种基本数据类型对应的类统称为包装类(Wrapper Class),包装类均位于java.lang包。各数据类型对应的包装类这里除了int (包装类为Integer)和char(包装类为Character)外,其他数据类型的包装类型都是自己的首字母大写,所有记忆起来会比较容易。原创 2023-08-11 19:36:44 · 539 阅读 · 0 评论 -
Java集合ArrayList详解
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。原创 2023-08-03 20:43:23 · 7877 阅读 · 0 评论 -
Java Collection接口详解
/ 创建集合 list1// 创建集合 list2// 向 list1 添加一个元素// 向 list1 添加一个元素// 将 list1 的所有元素添加到 list2// 向 list2 添加一个元素System.out.println("list2 集合中的元素如下:");由于 Collection 是接口,不能对其实例化,所以上述代码中使用了 Collection 接口的 ArrayList 实现类来调用 Collection 的方法。原创 2023-08-05 09:30:26 · 306 阅读 · 0 评论 -
Java List(列表)
List 是一个有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List 集合默认按元素的添加顺序设置元素的索引,第一个添加到 List 集合中的元素的索引为 0,第二个为 1,依此类推。List 实现了 Collection 接口,它主要有两个常用的实现类:ArrayList 类和 LinkedList 类。这些类在Collections框架中定义并实现List接口。原创 2023-08-05 09:39:53 · 2186 阅读 · 0 评论 -
LinkedList和ArrayList有什么区别?
ArrayList和LinkedList的大致区别: ArrayList是Array(动态数组)的数据结构。LinkeedList是List(链表)的数据结构。当随机访问List(get 和 set操作)时,ArrayList比LinkedList效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。当对数据进行增加和删除的操作(add 和 remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以进行增删操作时,会对操作原创 2023-08-05 10:29:34 · 175 阅读 · 0 评论 -
遍历Map集合的四种方式
2、使用 for-each 循环遍历 key 或者 values,一般适用于只需要 Map 中的 key 或者 value 时使用。Map 以及实现 Map 的接口类(如 HashMap、TreeMap、LinkedHashMap、Hashtable 等)都可以用以下几种方式遍历。Map 集合的遍历与 List 和 Set 集合不同。Map 有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历。1、在 for 循环中使用 entries 实现 Map 的遍历(最常见和最常用的)。原创 2023-08-07 21:27:31 · 902 阅读 · 0 评论 -
Java 集合框架
集合是一个对象,可容纳其他对象的引用。集合接口声明对每一种类型的集合可以执行的操作。集合框架的类和接口均在java.util包中。任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换。原创 2023-08-04 20:18:26 · 239 阅读 · 0 评论 -
链表——LinkedList类的概述和实现
上面我们讲了各种链表,每个链表都包括一个LinkedList对象和许多Node对象,LinkedList对象通常包含头和尾节点的引用,分别指向链表的第一个节点和最后一个节点。而每个节点对象通常包含数据部分data,以及对上一个节点的引用prev和下一个节点的引用next,只有下一个节点的引用称为单向链表,两个都有的称为双向链表。next值为null则说明是链表的结尾,如果想找到某个节点,我们必须从第一个节点开始遍历,不断通过next找到下一个节点,直到找到所需要的。栈和队列都是ADT。原创 2023-08-05 10:19:31 · 1450 阅读 · 0 评论 -
Java Set集合:HashSet和TreeSet类
Set 集合类似于一个罐子,程序可以依次把多个对象“丢进”Set 集合,而 Set 集合通常不能记住元素的添加顺序。也就是说 Set 集合中的对象不按特定的方式排序,只是简单地把对象加入集合。Set 集合中不能包含重复的对象,并且最多只允许包含一个 null 元素。Set 实现了 Collection 接口,它主要有两个常用的实现类:HashSet 类和 TreeSet类。原创 2023-08-07 20:49:11 · 246 阅读 · 0 评论 -
Java Map集合详解 :HashMap类
Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键(key)对象和一个值(value)对象。用于保存具有映射关系的数据。Map 集合里保存着两组值,一组值用于保存 Map 里的 key,另外一组值用于保存 Map 里的 value,key 和 value 都可以是任何引用类型的数据。Map 的 key 不允许重复,value 可以重复,即同一个 Map 对象的任何两个 key 通过 equals 方法比较总是返回 false。原创 2023-08-07 21:21:43 · 925 阅读 · 0 评论 -
使用Lambda表达式、foreach循环、Predicate操作、Stream操作遍历Collection集合
Java8 为 Iterable 接口新增了一个 forEach(Consumer action) 默认方法,该方法所需参数的类型是一个函数式接口,而 Iterable 接口是 Collection 接口的父接口,因此 Collection 集合也可直接调用该方法。当程序调用 Iterable 的 forEach(Consumer action) 遍历集合元素时,程序会依次将集合元素传给 Consumer 的 accept(T t) 方法(该接口中唯一的抽象方法)。原创 2023-08-08 20:43:06 · 918 阅读 · 0 评论 -
双端列表 —— Deque 接口概述,使用ArrayDeque实现队列和双端队列数据结构
Deque译为双端队列,在双向都能作为队列来使用,同时可用作栈。Deque接口的方法是对称成比例的。Deque接口继承Queue接口,因此具有Queue,Collection,Iterable的方法属性。原创 2023-08-10 21:16:25 · 1950 阅读 · 0 评论 -
列队 Queue 接口概述
在Java中,Queue(队列)是一种基本的数据结构,用于按照先进先出(FIFO)的顺序存储元素。2. ArrayDeque:ArrayDeque也实现了Queue接口,并且支持队列的操作。它使用可调整大小的数组来存储元素,可以在队列的两端进行高效地插入和删除操作。3. PriorityQueue:PriorityQueue是一种基于优先级的队列,它允许你根据元素的自然顺序或自定义的Comparator来确定元素的优先级。原创 2023-08-10 20:50:40 · 314 阅读 · 0 评论 -
Java Vector(向量)
Vector(向量)是 java.util 包中的一个类,该类实现了类似动态数组的功能。向量和数组相似,都可以保存一组数据(数据列表)。但是数组的大小是固定的,一旦指定,就不能改变,而向量却提供了一种类似于“动态数组”的功能,向量与数组的重要区别之一就是向量的容量是可变的。可以在向量的任意位置插入不同类型的对象,无需考虑对象的类型,也无需考虑向量的容量。向量和数组分别适用于不同的场合,一般来说,下列场合更适合于使用向量:如果需要频繁进行对象的插入和删除工作,或者因为需要处理的对象数目不定。原创 2023-08-10 20:25:10 · 1579 阅读 · 0 评论 -
JavaSE基础测试03及答案
java中实现多态的机制是依靠父类或接口的引用指向子类。其中父类的引用是在程序运行时动态的指向具体的实例,调用该引用的方法时,不是根据引用变量的类型中定义的方法来运行,而是根据具体的实例的方法。finalize是Object类的一个方法,如果子类中重写了该方法,在垃圾收集器执行的时候会调用被回收对象的此方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体。2、设有数组的定义int[] a = new int[3],则下面对数组元素的引用错误的是()原创 2023-06-29 19:18:06 · 465 阅读 · 0 评论 -
JavaSE基础测试01及答案
考试题,题库原创 2023-06-09 20:10:47 · 351 阅读 · 0 评论 -
JavaSE基础测试04及答案
当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。2.当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。1、判断输入的字符串是中文,英文,数字,其它字符(使用Scanner、正则表达式)原创 2023-06-29 19:29:32 · 373 阅读 · 0 评论 -
JavaSE基础测试02及答案
否则,两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。否则,只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;否则,只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;(1、)java.lang包下的类是默认导入的,不需要import显示导入类 ((4、)java程序类,类名必须是大写,如果不是大写则编译不通过,程序报错。原创 2023-06-15 20:31:00 · 212 阅读 · 0 评论 -
Java面试题 如何提高自己的算法?
需求:机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。原创 2023-08-03 21:03:10 · 278 阅读 · 0 评论 -
第四章运算符—关系运算符
关系运算符中“关系”二字的含义是指一个数据与另一个数据之间的关系,这种关系只有成立与不成立两种可能情况,可以用逻辑值来表示,逻辑上的 true 与 false 用数字 1 与 0 来表示。关系成立时表达式的结果为 true(或 1),否则表达式的结果为 false(或 0)。在本程序中,使用 input.nextInt() 接收用户从键盘输入的两个数,然后通过关系运算符来比较这两个数之间的大小。关系运算符的优先级为:>、=、原创 2023-06-10 09:29:19 · 5900 阅读 · 0 评论 -
第七章运算符—运算符优先级
例如,(1+3)+(3+2)*2,这个表达式如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14。这里x得到13,而不是20,因为乘法运算符比加法运算符有较高的优先级,所以先计算3 * 2得到6,然后再加7。运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。④ 由于逻辑与比逻辑或的优先级高,这里将 ② 和 ③ 的结果进行逻辑与运算,即 ++x && ++z。下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。例外,其中,单目运算符、赋值运算符和三目运算符是。原创 2023-06-10 10:49:05 · 546 阅读 · 0 评论 -
第一章 运算符—算术运算符
JavaScript 共提供10个算术运算符,用来完成基本的算术运算。x + y减法运算符:x - y乘法运算符:x * yx / yx ** yx % y++x或者x++--x或者x--数值运算符:+x-x减法、乘法、除法运算法比较单纯,就是执行相应的数学运算。下面介绍其他几个算术运算符,重点是加法运算符。原创 2023-06-09 21:07:00 · 415 阅读 · 0 评论 -
第二章运算符—赋值运算符
在该程序中,表示商品单价的 price 变量值为 10.25,而现在降了 1.25,在原来的基础上减去 1.25 即可获取现在的单价。不是数学中的等号,它表示一个动作,即将其右侧的值送到左侧的变量中(左侧只允许是变量,不能是表达式或其他形式);例如,在基本的赋值运算符的基础之上,可以结合算术运算符,以及后面要学习的位运算符,组合成复合的赋值运算符。赋值运算符的符号为“=”,它是双目运算符,左边的操作数必须是变量,不能是常量或表达式。赋值运算符还可与其他运算符结合,扩展成功能更加强大的赋值运算符。原创 2023-06-09 21:24:36 · 1667 阅读 · 0 评论 -
第三章运算符—逻辑运算符
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。结果为 boolean 型的变量或表达式可以通过逻辑运算符结合成为逻辑表达式。注意:短路与(&&)和短路或(||)能够采用最优化的计算方式,从而提高效率。结合方向是:逻辑非(单目运算符)具有右结合性,逻辑与和逻辑或(双目运算符)具有左结合性。逻辑运算符是对布尔型变量进行运算,其结果也是布尔型,具体如表 所示。运算符的优先级高于算术运算符,而。逻辑运算符的优先级为:!原创 2023-06-09 21:37:21 · 228 阅读 · 0 评论 -
第五章运算符—位运算符
其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为 1,那么计算结果才为 1,否则为 0。,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为 0 或同时为 1)时,结果为 0;,其运算规则是:参与运算的数字,低位对齐,高位不足的补零。,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。,其运算规则是:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。原创 2023-06-10 10:18:07 · 583 阅读 · 0 评论