JQuery 详细教程

news/2024/5/17 11:26:13/文章来源:https://blog.csdn.net/qq15035899256/article/details/130611530

文章目录

  • 一、JQuery 对象
    • 1.1 安装和使用
    • 1.2 JQuery包装集对象
  • 二、JQuery 选择器
    • 2.1 基础选择器
    • 2.2 层次选择器
    • 2.3 表单选择器
  • 三、JQuery Dom 操作
    • 3.1 操作元素
      • 3.1.1 操作属性
      • 3.1.2 操作样式
      • 3.1.3 操作内容
    • 3.2 添加元素
    • 3.3 删除元素
    • 3.4 遍历元素
  • 四、JQuery 事件
    • 4.1 ready 加载事件
    • 4.2 bind() 绑定事件
  • 五、JQuery Ajax
    • 5.1 $.ajax()
    • 5.2 $.get()
    • 5.3 $.post()
    • 5.4 $.getJSON()


提示:以下是本篇文章正文内容,前端系列学习将会持续更新

一、JQuery 对象

JQuery 是⼀套兼容多浏览器的 JavaScript 脚本库.。核心理念是写得更少,做得更多,使⽤ JQuery 将极⼤的提高编写 JavaScript 代码的效率,帮助开发者节省了⼤量的⼯作,让写出来的代码更加优雅,更加健壮,“如⻁添翼”。同时网络上丰富的 JQuery 插件,也让我们站在巨⼈的肩膀上。

1.1 安装和使用

官网:https://jquery.com
在这里插入图片描述

选择 Download the uncompressed, development jQuery 3.4.1 开发版下载:1.完整版:jquery-3.4.1.js --> 学习版本 (学习源码 向⾼⼿学习是最好学习⽅法)。2.压缩版:jquery3.4.1.min.js --> 开发版本 (压缩版,减少传输)。
<!-- 在需要使用的页面引入即可 -->
<script src="js/jquery-3.4.1.js" type="text/javascript" ></script>

1.2 JQuery包装集对象

$ 符号在 jQuery 中代表对 jQuery 对象的引⽤, “jQuery” 是核⼼对象。通过该符号可以获取 jQuery 对象,只有 jQuery 对象才能调⽤ jQuery 提供的⽅法。

①Dom 对象

var div = document.getElementById("testDiv");
var divs = document.getElementsByTagName("div");

②Jquery 包装集对象

var jQueryObject = $("#testDiv"); // 方法一
var jQueryObject = jQuery("#testDiv"); // 方法二

③Dom对象转Jquery对象

var domDiv = document.getElementById('mydiv'); // 获取Dom对象
var jQueryObject = $(domDiv);

④Jquery对象转Dom对象

var jqueryDiv = $("#mydiv"); // 获取jQuery对象
var domDiv = jqueryDiv[0]; // 将以获取的jquery对象转为dom

回到目录…

二、JQuery 选择器

2.1 基础选择器

选择器名称举例
id选择器#id$("#testDiv") 选择id为testDiv的元素
元素名称选择器element$("div")选择所有div元素
类选择器.class$(".blue")选择所有class=blue的元素
选择所有元素*$("*")选择⻚⾯所有元素
组合选择器selector1,selector2,selectorN$("#testDiv,span,.blue")同时选中多个选择器匹配的元素
// id选择器
var idSelecter = $('#mydiv1');
// 元素选择器
var nameSe = $('div'); // 有多个div元素
// 类选择器 .class
var classSe = $('.blue'); // 有多个class=blue的元素
// 通⽤选择器:*
var all = $("*");
// 组合选择器
var unionSe = $('span, .blue, div');

2.2 层次选择器

选择器名称举例
后代选择器祖先 后代$("#parent div")选择id=parent的元素的所有div元素,所有后代
子代选择器parent > child$("#parent > div")选择id=parent的直接div⼦元素,所有儿子集
相邻选择器prev + next$(".blue + img")选择class=blue的下⼀个img元素,必须相邻
同辈选择器prev ~ sibling$(".blue ~ img")选择class=blue的之后的img元素,所有同辈元素
console.log("=========后代选择器-选择所有后代=====");
var ancestorS = $('#parent div');console.log("=========⼦代选择器-选择⼉⼦辈=====");
var child = $('#parent>div');console.log("=========相邻选择器=====");
var pre_next = $(".gray + img");console.log("=========同辈选择器,其后,(弟弟)=====");
var pre_siblings = $(".gray ~ img");

2.3 表单选择器

Forms名称举例
表单选择器:input查找所有的input元素:$(":input")
注意:会匹配所有的 input、textarea、select 和 button元素。
⽂本框选择器:text查找所有⽂本框:$(":text")
密码框选择器:password查找所有密码框:$(":password")
单选按钮选择器:radio查找所有单选按钮:$(":radio")
复选框选择器:checkbox查找所有复选框:$(":checkbox")
提交按钮选择器:submit 查找所有提交按钮:$(":submit")
图像域选择器:image查找所有图像域:$(":image")
重置按钮选择器:reset查找所有重置按钮:$(":reset")
按钮选择器:button查找所有按钮:$(":button")
⽂件域选择器:file查找所有⽂件域:$(":file")

回到目录…

三、JQuery Dom 操作

3.1 操作元素

3.1.1 操作属性

获取属性说明举例
attr(属性名)获取指定的属性值,固有属性和自定义属性均可操作attr('checked')
attr('name')
prop(属性名)获取指定的属性值,只能操作固有属性prop('checked')
设置属性说明举例
attr(属性名,属性值)设置指定的属性值,固有属性和自定义属性均可操作attr('checked',’checked’)
attr('name',’zs’)
prop(属性名,属性值)设置指定的属性值,只能操作固有属性。一般用于设置具有boolean类型的属性值prop('checked','true')
移除属性说明举例
removeAttr(属性名)移除指定的属性removeAttr('checked')
<body><input type="checkbox" name="ch" checked="checked" id="aa" abc="aabbcc"/>	aa<input type="checkbox" name="ch" id="bb" />	bb
</body>
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">/** 获取属性 **/var name = $("#aa").attr("name");var name2 = $("#aa").prop("name");// 返回值是boolean的属性(元素设置了属性)var ck1 = $("#aa").attr("checked"); // checked 或 undefinedvar ck2 = $("#aa").prop("checked"); // true 或 false/** 设置属性 **/$("#aa").attr("value","1");$("#bb").prop("value","2");// 返回值是boolean的属性$("#bb").attr("checked","checked");$("#bb").prop("checked",false);/** 移除属性 **/$("#aa").removeAttr("checked")
</script>
attr()和prop()的区别:1. 如果是固有属性,attr()和prop()方法均可操作2. 如果是自定义属性,attr()可操作,prop()不可操作3. 如果是返回值是boolean类型的属性若设置了属性,attr()返回具体的值,prop()返回true;若未设置属性,attr()返回undefined,prop()返回false;总结:如果属性的类型是boolean(checked单选/多选、selected下拉菜单、disabled按钮禁用),则使用prop()方法;否则使用attr()方法。

3.1.2 操作样式

方法说明
attr("class")获取class属性的值,即样式名称
attr("class","样式名")修改class属性的值,修改样式
addClass("样式名")添加样式名称
css()添加具体的样式,如css("font-size","40px")
css({"font-family":"楷体","color":"green"})
removeClass("样式名")移除样式名称
<head><meta charset="utf-8"><title>操作元素的样式</title><style type="text/css">div{padding: 8px;width: 180px;}.blue{background: blue;}.larger{font-size: 30px;}.pink{background: pink;}.green {background : green;}	</style>
</head>
<body><h3>css()方法设置元素样式</h3><div id="conBlue" class="blue larger">天蓝色</div><div id="conRed">大红色</div><div id="remove" class="blue larger">天蓝色</div>
</body>
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">// attr("class") 	获取元素的样式名var cla = $("#conBlue").attr("class");// attr("class","样式名")	设置元素的样式$("#conBlue").attr("class","green");// addClass("样式名")	添加样式$("#conBlue").addClass("larger");$("#conBlue").addClass("pink");// css()	添加具体的样式(添加行内样式)$("#conRed").css("font-size","40px");$("#conRed").css({"font-family":"楷体","color":"green"});// removeClass("样式名")		移除样式$("#remove").removeClass("larger");
</script>

3.1.3 操作内容

方法说明
html()获取元素的html内容
html("html, 内容")设定元素的html内容
text()获取元素的⽂本内容,不包含html
text("text 内容")设置元素的⽂本内容,不包含html
val()获取元素value值
val("值")设定元素的value值
<body><h3><span>html()和text()方法设置元素内容</span></h3><div id="div1"></div><div id="div2"></div><div id="text">北京</div><div id="text2"><h2>北京</h2></div><input type="text" name="uname" id="op" value="oop" />
</body>
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">// html("内容")	设置元素的内容,包含html标签(非表单元素)$("#html").html("<h2>上海</h2>");$("#html2").html("上海");// html()	获取元素的内容,包含html标签(非表单元素)var div1 = $("#div1").html();var div2 = $("#div2").html();// text("内容")	 设置元素的纯文本内容,不识别HTML标签(非表单元素)$("#text").text("北京");$("#text2").text("<h2>北京</h2>");// text()	获取元素的纯文本内容,不识别HTML标签(非表单元素)var txt = $("#text").text();var txt2 = $("#text2").text();// val()	获取元素的值(表单元素)var val = $("#op").val();// 	val("值")	设置元素的值(表单元素)$("#op").val("今天天气不错");
</script>

回到目录…

3.2 添加元素

创建元素:直接使⽤核⼼函数即可

$('元素内容');
$('<p>this is a paragraph!!!</p>');
添加元素说明
prepend(content)头插,在被选元素内部的开头插入元素或内容,被追加的 content 参数
$(content).prependTo(selector)头插,把 content 元素或内容加⼊ selector 元素开头
append(content)尾插,在被选元素内部的结尾插入元素或内容,被追加的 content 参数
$(content).appendTo(selector)尾插,把 content元素或内容插⼊selector 元素内,默认是在尾部
before()同级前插,在元素前插⼊指定的元素或内容:$(selector).before(content)
after()同级后插,在元素后插⼊指定的元素或内容:$(selector).after(content)
<body><span class="red">男神</span><span class="blue">偶像</span><div class="green"><span >小鲜肉</span></div> 
</body>
<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">/* 添加元素 */var span = "<span>小奶狗</span>";// 得到指定元素,并在元素的内部最前面追加内容$(".green").prepend(span);var span2 = "<span>小狼狗</span>";$(span2).prependTo($(".green"));// 尾部插入var span3 = "<span>小奶狗1</span>";var span4 = "<span>小奶狗2</span>";$(".green").append(span3);$(span4).appendTo($(".green"));// 将已存在内容追加到指定元素中$(".green").append($(".red"));/* 同级追加 */var sp1 = "<span class='pink'>女神</span>";var sp2 = "<span class='gray'>歌手</span>";$(".blue").before(sp1);$(".blue").after(sp2);
</script>

回到目录…

3.3 删除元素

方法说明
remove()删除所选元素或指定的⼦元素,包括整个标签和内容⼀起删。
empty()清空元素内容
// 删除元素
$("#div1").remove();
// 清空元素
$("p").empty();

回到目录…

3.4 遍历元素

方法示例说明
each()$(selector).each(function(index,element))参数 function 为遍历时的回调函数,index为元素索引,element是当前元素
// 获取所有的span,并遍历打印到控制台
$("span").each(function(index,element){console.log(index);console.log(element); // <span class="green">jquery</span>console.log(this);    // <span class="green">jquery</span>console.log($(this)); // jQuery对象: jQuery.fn.init(1)
});

回到目录…

四、JQuery 事件

4.1 ready 加载事件

  • ready() 类似于 onLoad() 事件,预加载事件 (当页面的 Dom 结构加载完毕后执行)。
  • ready() 可以写多个,按顺序执行。
// 语法:
$(document).ready(function(){// 执行代码
});
// 简写为:
$(function(){// 执行代码
});

示例

<script src="js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">$(function(){console.log("ready加载事件...");});$(document).ready(function(){console.log($("#p1"));});
</script>
<body><p id="p1">文本</p>
</body>

回到目录…

4.2 bind() 绑定事件

为被选元素添加⼀个或多个事件处理程序,并规定事件发⽣时运⾏的函数。

$(selector).bind(eventType, [eventData], handler(eventObject));
  • eventType :是⼀个字符串类型的事件类型,就是你所需要绑定的事件。
    这类类型可以包括:blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick
    mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave,change, select, submit, keydown, keypress, keyup, error
  • [eventData]:可省略,传递的参数,格式:{名:值,名2:值2}。
  • handler(eventObject):该事件触发执行的函数。

①为元素绑定单个事件

// 原生js绑定事件
document.getElementById("test").onclick = function(){console.log("test...");
};
// bind() 绑定
$("#test").bind("click",function(){console.log("世上无难事,只怕有心人");
});
// 直接绑定
$("#btntest").click(function(){$(this).prop("disabled",true); // 禁用按钮
});

②为元素绑定多个事件

// 方式一:链式编程
$("#btn2").bind("click",function(){console.log("按钮2被点击了...");
}).bind("mouseout",function(){console.log("按钮2移开了...");
});
// 方式二:JSON格式
$("#btn3").bind({"click":function(){console.log("按钮3被点击了...");},"mouseout":function(){console.log("按钮3移开了...");}
});
// 方式三:直接绑定
$("#btn4").click(function(){console.log("按钮4被点击了...");
}).mouseout(function(){console.log("按钮4移开了...");
});

③同时为多个事件绑定同一个函数

$("#btn1").bind("click mouseout",function(){console.log("按钮1...");
});

回到目录…

五、JQuery Ajax

5.1 $.ajax()

参数说明
type请求⽅式 GET/POST
url请求地址 url
async是否异步,默认是 true 表示异步
data要求为Object或String类型的参数,发送到服务器的数据
dataType要求为String类型的参数,预期服务器返回的数据类型。如:xml, html, script, json, jsonp, text
contentType设置请求头,默认为"application/x-www-form-urlencoded"
success请求成功时调⽤此函数
error请求失败时调⽤此函数

①发送GET请求

@GetMapping("/books")
@ResponseBody
public List<Book> bookList() {return bookService.getBooks();
}
<body><table id="table" border="1px"><tr><th>序号</th><th>标题</th><th>描述</th></tr></table>
</body>
<script src="js/jquery-3.4.1.js" type="text/javascript"></script>
<script>$.ajax({type: "get",url: "/books",async: true,dataType: "json",success: function(result) {result.forEach(function(book) {var tbody = `<tr><td>${book.bid}</td><td>${book.title}</td><td>${book.desc}</td></tr>`;$("#table").append(tbody);})}});
</script>

②发送POST请求

@PostMapping("/addBook2")
@ResponseBody
public Boolean add2(Book book) { // 不要加 @RequestBody注解return bookService.addBook(book) > 0;
}
<body><button id="addBook">添加书籍</button>
</body>
<script src="js/jquery-3.4.1.js" type="text/javascript"></script>
<script>$("#addBook").click(function() {$.ajax({type: "post",data: {bid: 8,title: "铁道游击队",desc: "一群英雄智斗日本鬼子"},url: "/addBook2",async: true,dataType: "json",success: function(result) {if(result) {alert("添加成功!");}else {alert("添加失败!");}},error: function() {alert("添加失败!");}});});
</script>

回到目录…

5.2 $.get()

// 1.请求json⽂件,忽略返回值
$.get('js/cuisine_area.json');// 2.请求json⽂件,传递参数,忽略返回值
$.get('js/cuisine_area.json', {name:"tom",age:100});// 3.请求json⽂件,拿到返回值,请求成功后可拿到返回值
$.get('js/cuisine_area.json', function(data){console.log(data);
});// 4.请求json⽂件,传递参数,拿到返回值 
$.get('js/cuisine_area.json', {name:"tom",age:100}, function(data){console.log(data);
});

5.3 $.post()

// 1.请求json⽂件,忽略返回值
$.post('../js/cuisine_area.json');// 2.请求json⽂件,传递参数,忽略返回值
$.post('js/cuisine_area.json', {name:"tom",age:100});// 3.请求json⽂件,拿到返回值,请求成功后可拿到返回值
$.post('js/cuisine_area.json', function(data){console.log(data);
});// 4.请求json⽂件,传递参数,拿到返回值 
$.post('js/cuisine_area.json', {name:"tom",age:100}, function(data){console.log(data);
});

5.4 $.getJSON()

// 表示请求返回的数据类型是JSON格式的ajax请求
$.getJSON('js/cuisine_area.json', {name:"tom",age:100}, function(data){console.log(data); // 要求返回的数据格式是JSON格式
});

回到目录…


总结:
提示:这里对文章进行总结:
本文是对JQuery的学习,首先认识了JQuery包装集对象和Dom对象的区别,又学习了JQuery选择器,后续又学习了JQuery对元素的增删查改,以及加载事件和绑定事件,最后使用了JQuery Ajax的四种封装方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_488545.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PBR核心理论与渲染原理

基于物理的渲染&#xff08;Physically Based Rendering&#xff0c;PBR&#xff09;是指使用基于物理原理和微平面理论建模的着色/光照模型&#xff0c;以及使用从现实中测量的表面参数来准确表示真实世界材质的渲染理念。 以下是对PBR基础理念的概括&#xff1a; 微平面理论…

Android View 事件分发机制,看这一篇就够了

在 Android 开发当中&#xff0c;View 的事件分发机制是一块很重要的知识。不仅在开发当中经常需要用到&#xff0c;面试的时候也经常被问到。 如果你在面试的时候&#xff0c;能把这块讲清楚&#xff0c;对于校招生或者实习生来说&#xff0c;算是一块不错的加分项。对于工作…

对STM32栈的理解Stack_Size EQU 0x00000400

对STM32栈的理解Stack_Size EQU 0x00000400 Stack_Size EQU 0x00000400表示什么意思可以通过查找flash内存的方式定位存储1.flash2.RAM内部 本人主要为个人参考网络及个人总结而来比较&#xff0c;如有雷同请告知&#xff0c;即刻删除 以下引用网上资料 理解堆和栈的区别 &…

PFCdocumentation_FISH Rules and Usage

目录 FISH Scripting FISH Rules and Usage Lines Data Types Reserved Names for Functions and Variables Scope of Variables Functions: Structure, Evaluation, and Calling Scheme Arithmetic: Expressions and Type Conversions Redefining FISH Functions Ex…

中断相关内容大全

中断基本概念&#xff1a;程序中断指计算机执行现行程序过程中&#xff0c;出现某种急需处理的异常情况或特殊请求&#xff0c;CPU暂时中止现行程序&#xff0c;而转去对这些异常情况或特殊请求进行处理&#xff0c;处理完毕后CPU又自动返回到现行程序的断点处&#xff0c;继续…

算法修炼之练气篇——练气十七层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…

【最新可用】chatGPT镜像网站国内使用,免费稳定!

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT 2023.5.8新增一个 ChatGPT 国内免翻版 【网站名称】&#xff1a;Chat GPT Ai 【使用环境】&#xff1a;移动端/电脑网页端 ChatGPT是一款功能强大的免费在线聊天机器人&#xff0c;具有人工智能…

JavaScript通过js的方式来计算平行四边形的面积的代码

以下为通过js的方式来计算平行四边形的程序代码和运行截图 目录 前言 一、通过js的方式来计算平行四边形&#xff08;html部分&#xff09; 1.1 运行流程及思想 1.2 代码段 二、通过js的方式来计算平行四边形&#xff08;js部分&#xff09; 2.1 运行流程及思想 2.2 代码…

C#中如何使用ObjectPool来提高StringBuilder的性能

在C#中我们知道使用StringBuilder能提高大量字符串拼接的效率&#xff0c;其实StringBuilder的效率也可以提升&#xff0c;那就是使用ObjectPool。以下介绍怎么使用ObjectPool提高StringBuilder的性能。一、简介 C# ObjectPool类是一个内置的类库&#xff0c;用于实现对象…

AFG1062任意波形/函数发生器 产品资料

AFG1000 任意波形/函数发生器&#xff0c;提供 25MHz 或 60MHz 带宽&#xff0c;2 个输出通道&#xff0c;在整个带宽内 1mVpp 到 10Vpp 输出振幅&#xff0c;泰克 AFG1000 任意波形/函数发生器可以生成各种实验室测试所需波形。 *重要的是&#xff0c;它在泰克任意函数发生器系…

基于知识图谱的个性化学习资源推荐系统的设计与实现(论文+源码)_kaic

摘 要 最近几年来&#xff0c;伴随着教育信息化、个性化教育和K12之类的新观念提出,一如既往的教育方法向信息化智能化的转变&#xff0c;学生群体都对这种不受时间和地点约束的学习方式有浓厚的兴趣。而现在市面上存在的推荐系统给学生推荐资料时不符合学生个人对知识获取的…

小曾同学【五周年创作纪念日】——努力向前冲的菜鸟

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c; 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。&#x1f60a; 座右铭&#xff1a;不想当开发的测试&#xff0c;不是一个好…

自主可控不走捷径,中国长城做难且正确的事

2020-2022年是中国信创产业的重要推广期&#xff0c;在国家战略的支持下&#xff0c;自主可控领域诸多相关企业均获得绝佳发展良机。 但信创产业“完成替代”不是终点&#xff0c;“实现领先”方是目标。如今势已启、路尚远&#xff0c;前景广阔的市场并不意味着自主可控相关企…

Hadoop之block切片

切片是一个逻辑概念 在不改变现在数据存储的情况下&#xff0c;可以控制参与计算的节点数目 通过切片大小可以达到控制计算节点数量的目的 有多少个切片就会执行多少个Map任务 hdfs上数据存储的一个单元,同一个文件中块的大小都是相同的 因为数据存储到HDFS上不可变&#xff0…

Lucene(1):Lucene介绍

Lucene官网&#xff1a; http://lucene.apache.org/ 1 搜索技术理论基础 1.1 lucene优势 原来的方式实现搜索功能&#xff0c;我们的搜索流程如下图&#xff1a; 上图就是原始搜索引擎技术&#xff0c;如果用户比较少而且数据库的数据量比较小&#xff0c;那么这种方式实现搜…

2路 QSFP,40G 光纤的数据实时采集(5GByte/s 带宽)板卡设计原理图 -PCIE732

板卡概述 PCIE732 是一款基于 PCIE 总线架构的高性能数据传输卡&#xff0c;板卡具有 1 个 PCIex8 主机接口、2 个 QSFP40G 光纤接口&#xff0c;可以实现 2 路 QSFP 40G 光纤的数据实时采集、传输。板卡采用 Xilinx 的高性 能 Kintex UltraScale 系列 FPGA 作为实时处理器…

小程序开发中的插件、组件、控件到底有什么区别?

小程序插件代码由一些自定义组件和 JS 代码文件构成&#xff0c;插件开发者在发布插件时&#xff0c;这些代码被上传到后台保存起来。当小程序使用插件时&#xff0c;使用者需填写插件的 AppID 和版本号&#xff0c;就可从后台获取相应的插件代码。小程序代码编译时&#xff0c…

2023什么蓝牙耳机好?经销商盘点新手必入蓝牙耳机品牌

蓝牙耳机是除手机外我们使用频率最高的数码产品&#xff0c;我做蓝牙耳机经销商五年来&#xff0c;对各个品牌都有深入了解。近期看到很多新手们咨询什么蓝牙耳机好&#xff0c;我给大家盘点一下新手必看的五大蓝牙耳机品牌。 1.JEET Air 2蓝牙耳机 推荐理由&#xff1a;专为舒…

知识点回顾(一)

1.final,finally ,finalize final?修饰符&#xff08;关键字&#xff09;如果一个类被声明为final&#xff0c;意味着它不能再派生出新的子类&#xff0c;不能作为父类被继承。因此一个类不能既被声明为 abstract的&#xff0c;又被声明为final的。将变量或方法声明为final&…

外强中干——双向带头循环链表

前言&#xff1a;众所周知&#xff0c;链表有八种结构&#xff0c;由单向或双向&#xff0c;有头或无头&#xff0c;循环或不循环构成。在本篇&#xff0c;将介绍8种链表结构中最复杂的——双向带头循环链表。听着名字或许挺唬人的&#xff0c;但实际上双向带头循环链表实现起来…