js语法+dom+js图片库+最佳实践+图片库改进版

【2】js语法

【2.2.4】数据类型

类型1)字符串
var mood = 'happy';
var moood = "happy";
类型2)数值;
var age = 33.24;
类型3)布尔值;

var married = true;

【2.2.5】数组

1)填充方式
填充方式1)
var beatles = Array();
var beatles = Array(4);
beatles[0] = "0";
填充方式2)
var beatles = ["0", "1"];
填充方式3)可以填入3种类型的混合数据;
var beatles = ["0", 0, true];
2)二维数组
var lennon = ["0", "1"];
var beatles = [];
beatles[0] = lennon; 
3)关联数组:下标是字符串;
var lennon = Array();
lennon["name"]="john";

【2.2.6】对象
var lennon = new Object();
lennon.name = "john";
lennon.year = 1999;
lennon.living = false;
还可以这样:
var lennon = {name:"1", age:2};

【2.6】函数
1)变量作用域
全局变量:可以在脚本的任意位置使用;
局部变量:只可以在声明它的那个函数内部使用;
注意:如果在函数内部不小心使用了全局变量,即使本意是使用局部变量,javascript 还是会认为引用那个全局变量;
2)如何声明全局变量和局部变量:

在某个函数中使用var,那个变量是局部变量;如果没有使用var,则该变量是全局变量;


<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><title>p29</title></head><body><script src="p29.js"></script></body>
</html>
function square(num) {total = num * num;return total;	
}
var total = 50;
var number = square(20);
alert(total);
【2.7】对象:由属性和方法组合在一起的数据实体;
var num = 7.1;
var num = Math.round(num);
alert(num);
var current_date = new Date();
var today = cur_date.getDay();
【2.7.2】 宿主对象
1)定义:由浏览器提供的预定义对象被称为宿主对象; 
2)宿主对象有:Form, Image 和 Element 等;
补充:宿主的含义: 指为寄生生物提供生存环境的生物;


【3】dom

【3.0】写在前面:
1)5个常用的DOM方法:
getElementById, getElmentsByTagName, getElementsByClassName, getAttribute 和 setAttribute 等;
【3.1】 文档: DOM中的 D: document, 把网页文档转换为一个文档对象;


【3.2】对象:DOM中的O:

1)js的3种对象,如下:
用户定义对象;由程序员自行创建的对象;
内建对象;内建在js里的对象; 如Array, Math 和 Date;
宿主对象;如 Form, Image 和 Element , window 等;
window对象对应着浏览器窗口本身;这个对象的属性和方法称为 BOM 浏览器对象模型,提供了 windom.open 和 windom.blur 等方法;


【3.3】模型:Model, DOM把一个网页文档当做一棵树;


<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><title>p34</title></head><body><h1>what to buy</h1><p title="a gentel reminder"> dont forget to buy this stuff.</p><ul id="purchases"><li>a tin of beans</li><li class="sale">cheese</li><li class="sale important">milk</li></ul><script src="p29.js"></script></body>
</html>
【3.4】3种节点类型
1)元素节点:dom的原子; 如 <body> <p> <ul>
2)文本节点:
<p>元素节点包含的文本   dont forget to buy this stuff  就是文本节点;
3)属性节点:<p>元素中的  title="a gentel reminder" 就是属性节点;

【3.4.4】CSS
cascading style sheet 层叠样式表;
1)设置样式如下:
body {
color:white;

background-color:black;

}


2) class属性 和 id属性如下:


<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><title>p34</title><style>body {color:white;background-color:black;}</style><link rel="stylesheet" href="p37.css" /></head><body><h1 class="special">what to buy</h1><p class="special" title="a gentel reminder"> dont forget to buy this stuff.</p><ul id="purchase"><li>a tin of beans</li><li class="sale">cheese</li><li class="sale important">milk</li></ul><script src="p29.js"></script></body>
</html>
body {color:white;background-color:black;}
.special {	font-style:italic;	
}
h1.special {text-transform:uppercase;
}#purchase {border:1px solid white;background-color:#333;color:#ccc;padding:1em;
}
#purchase {font-weight:bold;
}
【3.4.5】获取元素:有3种dom方法获取元素节点,通过元素id, 标签名字和类名类获取;
1) getElementById

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><title>p39</title><link rel="stylesheet" href="p39.css" /></head><body><h1 class="special">what to buy</h1><p class="special" title="a gentel reminder"> dont forget to buy this stuff.</p><ul id="purchase"><li>a tin of beans</li><li class="sale">cheese</li><li class="sale important">milk</li></ul><script>alert(typeof document.getElementById("purchase"));</script></body>
</html>
2)getElementsByTagName 返回一个对象数组;
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><title>p39</title><link rel="stylesheet" href="p39.css" /></head><body><h1 class="special">what to buy</h1><p class="special" title="a gentel reminder"> dont forget to buy this stuff.</p><ul id="purchase"><li>a tin of beans</li><li class="sale">cheese</li><li class="sale important">milk</li></ul><script>alert(typeof document.getElementById("purchase"));var items = document.getElementsByTagName("li");for (var i=0; i<items.length; i++) {alert(typeof items[i])}</script></body>
</html>

2.2)如果想知道某个元素包含多少个列表项,用如下方法:

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><title>p39</title><link rel="stylesheet" href="p39.css" /></head><body><h1 class="special">what to buy</h1><p class="special" title="a gentel reminder"> dont forget to buy this stuff.</p><ul id="purchase"><li>a tin of beans</li><li class="sale">cheese</li><li class="sale important">milk</li></ul><script>alert(typeof document.getElementById("purchase"));var items = document.getElementsByTagName("li");for (var i=0; i<items.length; i++) {alert(typeof items[i])}items = document.getElementsByTagName("*");alert(items.length);</script></body>
</html>
3)getElementsByClassName: 通过类名来获取元素;


<!DOCTYPE html><html lang="en"><head><meta charset="utf-8" /><title>p39</title><link rel="stylesheet" href="p39.css" /></head><body><h1 class="special">what to buy</h1><p class="special" title="a gentel reminder"> dont forget to buy this stuff.</p><ul id="purchase"><li>a tin of beans</li><li class="sale">cheese</li><li class="sale important">milk</li></ul><script src="p42.js">			</script></body>
</html>
// 找出node 的名为 className的元素;
function getElementsByClassName(node, className) {if (node.getElementsByClassName) {return node.getElementsByClassName(className);} else {var results = new Array();var elements = node.getElementsByTagName("*");for (var i=0; i<elements.length; i++) {if (elements[i].className.indexOf(className) != -1) {results[results.length] = element[i];}			}}return results;	
}
var shopping = document.getElementById("purchase");
var sales = getElementsByClassName(shopping, "sale");
alert(sales.length);

【3.5】获取和设置属性

【3.5.1】getAttribute 方法;


<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><title>p44</title><link rel="stylesheet" href="p39.css" /></head><body><h1 class="special">what to buy</h1><p class="special" title="a gentel reminder"> dont forget to buy this stuff.</p><ul id="purchase"><li>a tin of beans</li><li class="sale">cheese</li><li class="sale important">milk</li></ul><script>var param = document.getElementsByTagName("p");for (var i=0; i<param.length; i++) {var title_text = param[i].getAttribute("title"); // 获取属性if (title_text) alert(title_text);}</script></body>
</html>
【3.5.2】setAttribute 设置属性


<!DOCTYPE html><html lang="en"><head><meta charset="utf-8" /><title>p45</title><link rel="stylesheet" href="p39.css" /></head><body><h1 class="special">what to buy</h1><p class="special" title="a gentel reminder"> dont forget to buy this stuff.</p><ul id="purchase"><li>a tin of beans</li><li class="sale">cheese</li><li class="sale important">milk</li></ul><script>var param = document.getElementsByTagName("p");for (var i=0; i<param.length; i++) {var title_text = param[i].getAttribute("title"); // 获取属性if (title_text){param[i].setAttribute("title", "brand new title text"); // 设置属性alert(param[i].getAttribute("title"));} }</script></body>
</html>
补充:查找带有多个类名的元素,中间使用空格分隔,如下: 

document.getElementsByClassName("class1 class2");

【4】案例研究:javascript图片库

【4.1】标记

(1)
<!DOCTYPE html>
<html lang="en">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>Image Gallery</title>
</head>
<body><h1>Snapshots</h1><ul><li> <a href="images/fireworks.jpg" title="A fireworks display">Fireworks</a></li><li> <a href="images/coffee.jpg" title="A cup of black coffee">Coffee</a></li><li> <a href="images/rose.jpg" title="A red, red rose">Rose</a></li><li> <a href="images/bigben.jpg" title="The famous clock">Big Ben</a></li></ul>
</body>
</html>
【4.2】 javascript
【4.2.1】 非dom解决方案

1)改变属性值的方法,如下:
element.value = "the new value";
element.setAttribute("value", "the new value");
2)运行结果:

(2)
<!DOCTYPE html>
<html lang="en">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>Image Gallery</title>
</head>
<body><h1>Snapshots</h1><ul><li> <a href="images/fireworks.jpg" οnclick="showPic(this);return false"title="A fireworks display">Fireworks</a></li><li> <a href="images/coffee.jpg" οnclick="showPic(this);return false"title="A cup of black coffee">Coffee</a></li><li> <a href="images/rose.jpg" οnclick="showPic(this);return false"title="A red, red rose">Rose</a></li><li> <a href="images/bigben.jpg" οnclick="showPic(this);return false"title="The famous clock">Big Ben</a></li></ul><img id="placeholder" src="imges/placeholder.jpg" alt="my image gallery" /><script>	function showPic(whichpic){var source = whichpic.getAttribute("href");var placeholder = document.getElementById("placeholder");placeholder.setAttribute("src", source);	}</script>
</body>
</html>
分析: 在 onclick 事件处理函数所触发的 javascript代码里增加一条return false , 就可以防止用户被带到 目标链接窗口;,即不访问href属性值的url地址;

【4.4】对这个函数进行扩展
【4.4.1】childNodes属性: 获取body元素的全部子元素;
var body_element = document.getElementsByTagName("body")[0];
body_element.childNodes 获取body元素的全部子元素;function countBodyChildren() {
var body_element = document.getElementsByTagName("body")[0];
alert(body_element.childNodes.length);
}
window.onload = countBodyChildren;
我想让 countBodyChildren 这个函数在页面加载时就执行, 这需要使用 onload 事件处理函数;

(3)
<!DOCTYPE html>
<html lang="en">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>Image Gallery</title>
</head>
<body><h1>Snapshots</h1><ul><li> <a href="images/fireworks.jpg" οnclick="showPic(this);return false"title="A fireworks display">Fireworks</a></li><li> <a href="images/coffee.jpg" οnclick="showPic(this);return false"title="A cup of black coffee">Coffee</a></li><li> <a href="images/rose.jpg" οnclick="showPic(this);return false"title="A red, red rose">Rose</a></li><li> <a href="images/bigben.jpg" οnclick="showPic(this);return false"title="The famous clock">Big Ben</a></li></ul><img id="placeholder" src="imges/placeholder.jpg" alt="my image gallery" /><script>	function countBodyChildren() {var body_element = document.getElementsByTagName("body")[0];alert(body_element.childNodes.length);}window.onload = countBodyChildren;</script>
</body>
</html>
【4.4.2】nodeType属性
1)childNodes属性返回的数组包含所有类型的节点,不仅仅是元素节点;
2)nodeType总共有12种可取值,但其中仅3种具有使用价值:
元素节点的nodeType属性值为1;
属性节点的nodeType属性值为2;
文本节点的nodeType属性值为3;

【4.4.5】nodeValue属性
1)改变一个文本节点的值,使用dom提供的 nodeValue属性,来得到节点的值;
【4.4.6】firstChild 和 lastChild 属性:第一个元素和最后一个元素;
node.firstChild 等价于 node.childNodes[0];
node.lastChild 等价于 node。childNodes[node.childNodes.length-1]


【4.4.7】利用 nodeValue属性刷新这段描述
1)


(4)
源码:

function showPic(whichpic) {var source = whichpic.getAttribute("href");var placeholder = document.getElementById("placeholder");placeholder.setAttribute("src",source);var text = whichpic.getAttribute("title");var description = document.getElementById("description");// 利用nodeValue属性刷新这段描述description.firstChild.nodeValue = text;
} 
<!DOCTYPE html>
<html lang="en">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>Image Gallery</title><script type="text/javascript" src="scripts/showPic.js"></script><link rel="stylesheet" href="styles/layout.css" type="text/css" media="screen" />
</head>
<body><h1>Snapshots</h1><ul><li><a href="images/fireworks.jpg" title="A fireworks display" οnclick="showPic(this); return false;">Fireworks</a></li><li><a href="images/coffee.jpg" title="A cup of black coffee" οnclick="showPic(this); return false;">Coffee</a></li><li><a href="images/rose.jpg" title="A red, red rose" οnclick="showPic(this); return false;">Rose</a></li><li><a href="images/bigben.jpg" title="The famous clock" οnclick="showPic(this); return false;">Big Ben</a></li></ul><img id="placeholder" src="images/placeholder.gif" alt="my image gallery" /><p id="description">Choose an image.</p>
</body>
</html>

【5】最佳实践

【5.1】
1)js使用window对象的open()方法来创建新的浏览器窗口, 
window.open(url, name, features), 
【荔枝】
function popup(url){
window.open(url, "popup", "width=320,height=480");
}
【5.2.2】内嵌的事件处理函数
<a href="#" οnclick="popup('http://www.baidu.com')">;
return false;"> example </a>


<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Example</title>
<script type="text/JavaScript">
window.onload = function() {
if (!document.getElementsByTagName) return false;
var lnks = document.getElementsByTagName("a");
for (var i=0; i<lnks.length; i++) {
if (lnks[i].getAttribute("class") == "popup") {
lnks[i].onclick = function() {
popUp(this.getAttribute("href"));
return false;
}
}
}
}

function popUp(winURL) {
window.open(winURL,"popup","width=320,height=480");
}

</script>
</head>
<body>
<a href="https://www.baidu.com/" class="popup">baidu</a>
</body>
</html>

更加简单的写法是:
<a href="https://www.baidu.com/" οnclick="popUp(this.href);return false;">baidu</a>

【5.4】分离js 与 html;
1)当window对象触发onload事件时,document对象已经存在;
【html】
<!DOCTYPE html>
<html lang="en">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>Example</title>
<script type="text/JavaScript" src="p69.js">
</script>
</head>
<body><a href="https://www.baidu.com/" class="popup">baidu</a>
</body>
</html>

【js】

window.onload = prepareLinks;
function prepareLinks() {var links = document.getElementsByTagName("a");for (var i=0; i<links.length; i++) {if (links[i].getAttribute("class") == "popup") {links[i].onclick = function() {popUp(this.getAttribute("href"));return false;}}}	
} 
function popUp(url){window.open(url, "baidu", "width=320, height=480");
}
【5.6.3】压缩脚本:可以加快脚本加载速度;
1)压缩脚本:指的是把脚本文件不必要的字节,如空格和注释,统统删除,从而达到压缩的目的;
2)脚本压缩工具:
工具1) JSMin
工具2)YUI Compressor

工具3)Closure Compiler


【6】图片库改进版

【6.3.1】添加事件处理函数

(1)

<!DOCTYPE html>
<html lang="en">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>Image Gallery</title><script type="text/javascript" src="scripts/showPic.js"></script>
</head>
<body><h1>Snapshots</h1><ul id="imagegallery"><li><a href="images/fireworks.jpg" title="A fireworks display">Fireworks</a></li><li><a href="images/coffee.jpg" title="A cup of black coffee" >Coffee</a></li><li><a href="images/rose.jpg" title="A red, red rose">Rose</a></li><li><a href="images/bigben.jpg" title="The famous clock">Big Ben</a></li></ul><img id="placeholder" src="images/placeholder.gif" alt="my image gallery" /><p id="description">Choose an image.</p>
</body>
</html>// 改变占位符的图片和标题
function showPic(whichpic) {if (!document.getElementById("placeholder")) return true;var source = whichpic.getAttribute("href");var placeholder = document.getElementById("placeholder");placeholder.setAttribute("src",source);if (!document.getElementById("description")) return false;if (whichpic.getAttribute("title")) {var text = whichpic.getAttribute("title");} else {var text = "";}var description = document.getElementById("description");if (description.firstChild.nodeType == 3) {description.firstChild.nodeValue = text;}return false;
}function prepareGallery() {if (!document.getElementsByTagName) return false;if (!document.getElementById) return false;if (!document.getElementById("imagegallery")) return false;var gallery = document.getElementById("imagegallery");var links = gallery.getElementsByTagName("a");for ( var i=0; i < links.length; i++) {// 添加事件处理函数,当点击的时候links[i].onclick = function() {return showPic(this);}links[i].onkeypress = links[i].onclick;}
}
// 添加函数func 到 window.onload 函数的执行列表;// onload 函数会在 document加载完毕后执行;function addLoadEvent(func) {var oldonload = window.onload;if (typeof window.onload != 'function') {window.onload = func;} else {window.onload = function() {oldonload();func();}}
}addLoadEvent(prepareGallery);
【6.3.2】共享onload事件
1)addLoadEvent函数: 计划在页面加载完毕时执行传入参数表示的函数;
function addLoadEvent(func) {var oldonload = window.onload;if (typeof window.onload != 'function') {window.onload = func;} else {window.onload = function() {oldonload();func();}}
}
2)


(2)
<!DOCTYPE html>
<html lang="en">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>Image Gallery</title><script type="text/javascript" src="scripts/showPic.js"></script><link rel="stylesheet" href="styles/layout.css" type="text/css" media="screen" />
</head>
<body><h1>Snapshots</h1><ul id="imagegallery"><li><a href="images/fireworks.jpg" title="A fireworks display"><img src="images/thumbnail_fireworks.jpg" alt="Fireworks" /></a></li><li><a href="images/coffee.jpg" title="A cup of black coffee" ><img src="images/thumbnail_coffee.jpg" alt="Coffee" /></a></li><li><a href="images/rose.jpg" title="A red, red rose"><img src="images/thumbnail_rose.jpg" alt="Rose" /></a></li><li><a href="images/bigben.jpg" title="The famous clock"><img src="images/thumbnail_bigben.jpg" alt="Big Ben" /></a></li></ul><img id="placeholder" src="images/placeholder.gif" alt="my image gallery" /><p id="description">Choose an image.</p>
</body>
</html>
function showPic(whichpic) {if (!document.getElementById("placeholder")) return true;var source = whichpic.getAttribute("href");var placeholder = document.getElementById("placeholder");placeholder.setAttribute("src",source);if (!document.getElementById("description")) return false;if (whichpic.getAttribute("title")) {var text = whichpic.getAttribute("title");} else {var text = "";}var description = document.getElementById("description");if (description.firstChild.nodeType == 3) {description.firstChild.nodeValue = text;}return false;
}
// 加载函数
function prepareGallery() {if (!document.getElementsByTagName) return false;if (!document.getElementById) return false;if (!document.getElementById("imagegallery")) return false;var gallery = document.getElementById("imagegallery");var links = gallery.getElementsByTagName("a");for ( var i=0; i < links.length; i++) {links[i].onclick = function() {// 具体点击事件的响应函数return showPic(this);}links[i].onkeypress = links[i].onclick;}
}
// 把函数func 添加到 页面加载完毕时执行的函数列表中;
// window.onload 用于绑定点击事件与响应函数;
function addLoadEvent(func) {var oldonload = window.onload;if (typeof window.onload != 'function') {window.onload = func;} else {window.onload = function() {oldonload();func();}}
}addLoadEvent(prepareGallery);
【6.5】 js的优化版本
// 【荔枝】用到了firstChild 和 nodeType的js
// 鼠标点击响应函数
function showPic(whichpic) {if (!document.getElementById("placeholder")) return true;var source = whichpic.getAttribute("href");var placeholder = document.getElementById("placeholder");placeholder.setAttribute("src",source);if (!document.getElementById("description")) return false;if (whichpic.getAttribute("title")) {var text = whichpic.getAttribute("title");} else {var text = "";}var description = document.getElementById("description");// 用到了 firstChild 和 nodeType;if (description.firstChild.nodeType == 3) { // 3 表示文本节点description.firstChild.nodeValue = text;}return false;
}
// 被加载的函数
function prepareGallery() {if (!document.getElementsByTagName) return false;if (!document.getElementById) return false;if (!document.getElementById("imagegallery")) return false;var gallery = document.getElementById("imagegallery");var links = gallery.getElementsByTagName("a");for ( var i=0; i < links.length; i++) {links[i].onclick = function() {return showPic(this);}links[i].onkeypress = links[i].onclick; // 不推荐使用 onkeypress 属性}
}
// 在页面加载完成后,被加载函数。
// 
function addLoadEvent(func) {var oldonload = window.onload;if (typeof window.onload != 'function') {window.onload = func;} else {window.onload = function() {oldonload();func();}}
} 
addLoadEvent(prepareGallery);


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

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

相关文章

RabbitMQ--topic

Topic类型的Exchange与Direct相比&#xff0c;都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符&#xff01; Routingkey 一般都是有一个或多个单词组成&#xff0c;多个单词之间以”.”分割&#xff0c;…

阿里巴巴对Java编程【控制语句】的规约

转载自 阿里巴巴对Java编程【控制语句】的规约控制语句1. 【强制】在一个 switch 块内&#xff0c;每个 case 要么通过 break / return 等来终止&#xff0c;要么注释说明程序将继续执行到哪一个 case 为止 &#xff1b; 在一个 switch 块内&#xff0c;都必须包含一个 default…

RabbitMQ消息

如何确保RabbitMQ消息的可靠性&#xff1f; 开启生产者确认机制&#xff0c;确保生产者的消息能到达队列开启持久化功能&#xff0c;确保消息未消费前在队列中不会丢失开启消费者确认机制为auto&#xff0c;由spring确认消息处理成功后完成ack开启消费者失败重试机制&#xff…

阿里巴巴对Java编程【注释规约】的规约

转载自 阿里巴巴对Java编程【注释规约】的规约注释规约1. 【强制】类、类属性、类方法的注释必须使用 Javadoc 规范&#xff0c;使用/**内容*/格式&#xff0c;不得使用// xxx 方式。 说明&#xff1a;在 IDE 编辑窗口中&#xff0c; Javadoc 方式会提示相关注释&#xff0c;生…

动态创建标记+css_dom+js动态效果

【7】动态创建标记【7.1】一些传统方法【7.1.1】document.write方法&#xff0c;不推荐使用 &#xff08;1&#xff09;<!DOCTYPE html> <html lang"en"> <head><meta http-equiv"content-type" content"text/html; charsetutf-…

orcle安装及用户初始化

1.orcle资源 orlce安装包点击下载 2.首次安装 参照: https://jingyan.baidu.com/article/f79b7cb32095f79144023eae.html 3.卸载后安装 先卸载清除本地的orcle服务 参照: https://jingyan.baidu.com/article/6b18230943e9d7fb59e1590f.html再重新下载资源解压安装’’ 注意…

JDK8新特性之Lambda表达式

转载自 JDK8新特性之Lambda表达式 什么是Lambda表达式 Java 8的一个大亮点是引入Lambda表达式&#xff0c;使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时&#xff0c;也会随之被编译成一个函数式接口。 Lambda语法 一行执行语句的写法&#xff1a; (paramete…

eclipse发布web项目到tomcat服务器

README: 使用eclipse发布web项目到tomcat有很多坑儿的。下面依依道来。 step1&#xff09;eclipse建立web 项目&#xff1a;step2&#xff09;在tomcat服务器上为该web项目配置的虚拟目录&#xff0c;即把该web项目发布到tomcat&#xff1a; tomcat的server.xml 增加如下语句&…

springboot设置默认端口访问界面

1.项目结构 2.配置方法 <1>配置类默认加载 Configuration public class WebConfigurer implements WebMvcConfigurer {Overridepublic void addViewControllers(ViewControllerRegistry registry) {//默认地址&#xff08;可以是页面或后台请求接口&#xff09;registr…

Java BigDecimal和double区别

转自&#xff1a; https://www.cnblogs.com/mingforyou/p/3344489.htmlBigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double&#xff0c;但是如果需要精确计算的结果&#xff0c;则必须使用BigDecimal类&#xff0c;而且使用BigDecimal类也可以进行大数的…

JDK8新特性之接口默认方法与静态方法

转载自 JDK8新特性之接口默认方法与静态方法 接口默认方法与静态方法 有这样一些场景&#xff0c;如果一个接口要添加一个方法&#xff0c;那所有的接口实现类都要去实现&#xff0c;而某些实现类根本就不需要实现这个方法也要写一个空实现&#xff0c;所以接口默认方法就是为…

mybatis generator Unknown system variable 'query_cache_size' 的解决方法

出现这种错误&#xff0c;很显然是数据库驱动程序 与 数据库版本不对应&#xff1b;如 mybatis使用 mysql-5.1.10的驱动程序&#xff0c;而mybatis配置的数据源连接的是 mysql-8.0.11 &#xff0c;修改 pom文件即可&#xff0c;如下&#xff1a; <dependency><groupId…

Java NoSuchElementException: No value present 问题解决

1 问题描述 java.util.NoSuchElementException: No value 2 问题分析 2.1 Java 1、使用stream()流里面的max().get()、min().get()、findFirst().get()方法&#xff0c;由于max()、min()、findFirst()方法会返回Optional对象&#xff0c;如果Optional对象里面没有数据&#xf…

JDK8新特性之Optional

转载自 JDK8新特性之Optional Optional是什么 java.util.Optional Jdk8提供 Optional&#xff0c;一个可以包含null值的容器对象&#xff0c;可以用来代替xx ! null的判断。 Optional常用方法 of public static <T> Optional<T> of(T value) {return new Opti…

使用maven聚合安装多个maven工程到本地仓库报错的解决方法:child module pom.xml does not exist

转自&#xff1a; https://stackoverflow.com/questions/26021141/maven-child-module-does-not-exist 1&#xff09;在maven项目Parent中的 pom.xml 中 使用聚合安装多个 maven工程到本地仓库&#xff0c;pom配置如下&#xff1a; <project xmlns"http://maven.apache…

JDK8新特性之重复注解

转载自 JDK8新特性之重复注解 什么是重复注解 下面是JDK8中的重复注解&#xff08; java.lang.annotation.Repeatable&#xff09;定义的源码。 Documented Retention(RetentionPolicy.RUNTIME) Target(ElementType.ANNOTATION_TYPE) public interface Repeatable {Class<…

JDK8之新特性扩展篇

转载自 JDK8之新特性扩展篇 BASE64 base64编码解码已经被加入到了jdk8中了。 import java.nio.charset.StandardCharsets; import java.util.Base64;public class Base64Test {public static void main(String[] args) {String text "hello javastack";String en…

eclipse maven 项目发布到tomcat 报错 Failed to scan JAR [file:/C:/xxxxx.jar] from WEB-INF/lib

报错信息如下&#xff1a; 警告: Failed to scan JAR [file:/D:/Development/Tomcat/apache-tomcat-7.0.35-64bit/webapps/Monday2/WEB-INF/lib/com.springsource.net.sf.cglib-2.2.0.jar] from WEB-INF/lib java.util.zip.ZipException: error in opening zip fileat java.uti…

SpringCloud配置中心高可用搭建

转载自 SpringCloud配置中心高可用搭建 本文通过config server连接git仓库来实现配置中心&#xff0c;除了git还可以使用svn或者系统本地目录都行。 引入依赖 <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId…

maven项目 报错 java.lang.ClassNotFoundException: org.springframework.web.filter.HiddenHttpMethodFilter

报错信息如下&#xff1a; 严重: Exception starting filter hiddenHttpMethodFilter java.lang.ClassNotFoundException: org.springframework.web.filter.HiddenHttpMethodFilterat org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)at …