仿firebug的控制台输出,兼容IE

我离不开firefox,主要是离不开firebug,用firebug调试css,js实在是太方便了。
相信很多人和我一样,在firefox下常常用console.log()输出一些对象或变量的值,
在ie里常常用alert()弹出一些对象或变量的值,来作调试
当然,能够在ie下使用console.log的调试功能当然是最好的,哪怕只是最简单的一个变量值的输出也比alert友好一些。
于是有了下面这个简易版的console.log

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ie下的console.log</title>
<style>
body {background: #ffffff; color: #444;}
a{ color: #08e; text-decoration: none; border: 0; background-color: transparent;}
body,div,q,iframe,form,h5{ margin: 0; padding: 0;}
a img,fieldset { border: none 0; }
body,td,textarea { word-break: break-all; word-wrap: break-word; line-height:1.5;}
body,input,textarea,select,button { margin: 0; font-size: 12px; font-family: Tahoma, SimSun, sans-serif;}
div,p,table,th,td { font-size:1em; font-family:inherit; line-height:inherit;}
</style>
</head>
<body>
<div id="div1" class="style1"></div>
<p><input type="button" value="返回一个object" onclick="test1()" />
<input type="button" value="返回一个element" onclick="test2()" />
<input type="button" value="返回一个function" onclick="test3()" />
<input type="button" value="返回一个arrary" onclick="test4()" />
</p>
<div id="div2" class="style1"></div>
<script>sometext("div1",200);sometext("div2",200);</script>
</body>
</html>


<script type="text/javascript">
var debug=true;
var $id = function (id) {//避免与jQuery的$函数冲突
return typeof id == "string" ? document.getElementById(id) : id;
};
if(!$){var $=$id;}
if(!window.console){
window.console={}
window.console.cache=[];
window.console.constr=function(_value){
if(!_value)return;
var result = [];
if (_value instanceof Function){
result.push(_value);
}else if(_value!=undefined&&Boolean(_value.nodeName)&&Boolean(_value.nodeType)){
result.push(_value.nodeName.toLowerCase());
result.push(_value.getAttribute("id")?"id="+_value.getAttribute("id"):"");
result.push(_value.getAttribute("className")?"class="+_value.getAttribute("className"):"");
return "<"+result.join(" ")+">";
}else if(_value instanceof Array){
for(var i=0; i< _value.length; i++){
if(typeof _value[i]== 'string')
result.push("\""+_value[i]+"\"");
else
result.push(_value[i]);
}
return "["+result.join(", ")+"]";
}else if(typeof _value == "object"){
for (var p in _value){
if(_value.hasOwnProperty(p) && p!='prototype'){
result.push("'"+p+"':"+_value[p]);
}
};
return "{"+result.join(", ")+"}";
}else if(typeof _value == 'string'){
return "\""+_value+"\"";
}else if(typeof _value == 'number' && isFinite(_value)){
result.push(_value);
}else{
result.push(_value);
}
return result.join("");
}
window.console.log=function(outputValue){
if(!debug)return;
if(!outputValue)return null;
var bgColor=bgColor||"#fff";
consoleDiv =$id("_console");
if(!consoleDiv){
consoleDiv=document.createElement("div");
consoleDiv.id="_console";
consoleDiv.style.cssText="position:absolute; z-index:9999; left:0%;top:"+Math.max(document.documentElement.scrollTop, document.body.scrollTop)+"px; width:62%; background-color:#fff; border:1px solid #359; opacity:0.9; filter:alpha(opacity=90); padding:4px;"
consoleDiv.innerHTML='<div id="_consoleHead" style="background-color:#cde; height:20px; color:#000; font-size:12px; line-height:20px; cursor:move;"><a style="color:#123; float:right; text-decoration:none; margin:1px 2px 0;" href="javascript:$id(\'_console\').style.display=\'none\';void(0);">[关闭]</a><a style="color:#123; float:right; text-decoration:none; margin:1px 2px 0;" href="javascript:$id(\'_consoleBody\').innerHTML=\'\';void(0);">[清空]</a></div>';
consoleDivBody=document.createElement("div");
consoleDivBody.id="_consoleBody";
consoleDivBody.style.cssText="font-size:12px; line-height:1.5;color:#333; width:100%; max-height:150px; overflow:auto;"
consoleDivBody.innerHTML='';

consoleDiv.appendChild(consoleDivBody);
document.getElementsByTagName("BODY")[0].appendChild(consoleDiv);
if(Drag)
Drag.init($id("_consoleHead"),consoleDiv);//注册拖拽方法,可以使用自己的拖拽方法来代替,以减少代码量
}
consoleDiv.style.display="";
var consoleDivTop=consoleDiv.style.top.replace(/\D/gi,"");
if(consoleDivTop<Math.max(document.documentElement.scrollTop, document.body.scrollTop)||consoleDivTop>Math.max(document.documentElement.scrollTop, document.body.scrollTop)+(document.compatMode == "BackCompat"?document.body.clientHeight:document.documentElement.clientHeight))
consoleDiv.style.top=Math.max(document.documentElement.scrollTop, document.body.scrollTop)+"px";
var newItem=document.createElement("div");
newItem.style.cssText="border-top:1px solid #cde; padding:3px;font-family:'Courier New'; font-size:13px; background-color:"+bgColor;
var content = [];
for(var i=0, len=arguments.length; i<len; i++){
content.push( window.console.constr(arguments[i]) );
}
newItem.innerHTML= content.join(" ");
$id("_consoleBody").appendChild(newItem);
$id("_consoleBody").scrollTop=9999;
};
}
/***小巧的拖拽类***/
var Drag={
"obj":null,
"init":function(handle, dragBody, e){
if (e == null) {
handle.onmousedown=Drag.start;
}
handle.root = dragBody;
if(isNaN(parseInt(handle.root.style.left)))handle.root.style.left="0px";
if(isNaN(parseInt(handle.root.style.top)))handle.root.style.top="0px";
handle.root.onDragStart=new Function();
handle.root.onDragEnd=new Function();
handle.root.onDrag=new Function();
if (e !=null) {
var handle=Drag.obj=handle;
e=Drag.fixe(e);
var top=parseInt(handle.root.style.top);
var left=parseInt(handle.root.style.left);
handle.root.onDragStart(left,top,e.pageX,e.pageY);
handle.lastMouseX=e.pageX;
handle.lastMouseY=e.pageY;
document.onmousemove=Drag.drag;
document.onmouseup=Drag.end;
}
},
"start":function(e){
var handle=Drag.obj=this;
e=Drag.fixEvent(e);
var top=parseInt(handle.root.style.top);
var left=parseInt(handle.root.style.left);
//alert(left)
handle.root.onDragStart(left,top,e.pageX,e.pageY);
handle.lastMouseX=e.pageX;
handle.lastMouseY=e.pageY;
document.onmousemove=Drag.drag;
document.onmouseup=Drag.end;
return false;
},
"drag":function(e){
e=Drag.fixEvent(e);
var handle=Drag.obj;
var mouseY=e.pageY;
var mouseX=e.pageX;
var top=parseInt(handle.root.style.top);
var left=parseInt(handle.root.style.left);
if(document.all){Drag.obj.setCapture();}else{e.preventDefault();};//作用是将所有鼠标事件捕获到handle对象,对于firefox,以用preventDefault来取消事件的默认动作:
var currentLeft,currentTop;
currentLeft=left+mouseX-handle.lastMouseX;
currentTop=top+(mouseY-handle.lastMouseY);
handle.root.style.left=currentLeft +"px";
handle.root.style.top=currentTop+"px";
handle.lastMouseX=mouseX;
handle.lastMouseY=mouseY;
handle.root.onDrag(currentLeft,currentTop,e.pageX,e.pageY);
return false;
},
"end":function(){
if(document.all){Drag.obj.releaseCapture();};//取消所有鼠标事件捕获到handle对象
document.onmousemove=null;
document.onmouseup=null;
Drag.obj.root.onDragEnd(parseInt(Drag.obj.root.style.left),parseInt(Drag.obj.root.style.top));
Drag.obj=null;
},
"fixEvent":function(e){//格式化事件参数对象
var sl = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
var st = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
if(typeof e=="undefined")e=window.event;
if(typeof e.layerX=="undefined")e.layerX=e.offsetX;
if(typeof e.layerY=="undefined")e.layerY=e.offsetY;
if(typeof e.pageX == "undefined")e.pageX = e.clientX + sl - document.body.clientLeft;
if(typeof e.pageY == "undefined")e.pageY = e.clientY + st - document.body.clientTop;
return e;
}
};
/***测试***/
function sometext(ele,n){
var strArr=["可","以","清","心","也"];
var writeStr=""
for(i=0;i<n;i++){
index=parseInt(Math.random()*5);
for(j=0;j<5;j++){
str=index+j>4?index+j-5:index+j;
writeStr+=strArr[str];
}
}
$(ele).innerHTML=writeStr;
}
function test1(){
console.log("这是一个js对象:",{w:100,h:50,area:function(){return this.w*this.h}})
}
function test2(){
console.log("这是一个dom对象:",$id("div1"))
}
function test3(){
var arr=function(w,h){return w*h;}
console.log("这是一个js函数:",arr)
}
function test4(){
var arr=[1,2.2,"a","abc",true,false,new Date(),/<[^>]*>/,function(){alert(0);}]
console.log("这是一个数组:",arr)
}
</script>


在完成上面的简易版console.log()的过程中,看了一下firebug的代码,于是有了下面的加强版
console.log()
对类型的识别更准确,还有多种高亮区分数据类型哦。
当然,代码量也多了许多,有200多行。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ie下的console.log</title>
<style>
body {background: #ffffff; color: #444;}
a{ color: #08e; text-decoration: none; border: 0; background-color: transparent;}
body,div,q,iframe,form,h5{ margin: 0; padding: 0;}
a img,fieldset { border: none 0; }
body,td,textarea { word-break: break-all; word-wrap: break-word; line-height:1.5;}
body,input,textarea,select,button { margin: 0; font-size: 12px; font-family: Tahoma, SimSun, sans-serif;}
div,p,table,th,td { font-size:1em; font-family:inherit; line-height:inherit;}
</style>
<script type="text/javascript">
var debug=true;
var $id = function (id) {//避免与jQuery的$函数冲突
return typeof id == "string" ? document.getElementById(id) : id;
};
if(!$){var $=$id;}
if(!window.console){
window.console={}
window.console.cache=[];
window.console.constr=function(_value,_inObject,_inArray,_link){
var isArray = false, isHash, isElement = false, vtype=typeof _value, result=[];
if(vtype=="object"){
if(Object.prototype.toString.call(_value) === "[object Date]"){
vtype = "date";
} else if(Object.prototype.toString.call(_value) === "[object String]"){
vtype = "string";
} else if(Object.prototype.toString.call(_value) === "[object Boolean]"){
vtype = "boolean";
} else if(Object.prototype.toString.call(_value) === "[object RegExp]"){
vtype = "regexp";
}
}
try{
if(_value instanceof Array&&typeof _object!="function")
isArray=true;
if(typeof _value=="object"&&(_value==window||_value instanceof Object)&&!_value.nodeName)
isHash=true;
if(_value!=undefined&&Boolean(_value.nodeName)&&Boolean(_value.nodeType))
isElement=true;
// number, string, boolean, null, function
if(_value==null||vtype=="number"||vtype=="string"||vtype=="boolean"||(vtype=="function"&&_value.nodeName!="OBJECT")||vtype=="regexp"||vtype=="date"){
if(_value==null){
if(_value===undefined) {
result.push("<span style='color:#999'>undefined</span>");
} else {
result.push("<span style='color:#999'>null</span>");
}
}else if (vtype=="regexp") {
result.push("<span style='color:#360'>" + _value + "</span>");
}else if (vtype=="date") {
result.push("<span style='color:#060;'>'" + _value + "'</span>");
} else if (vtype=="number") {
result.push("<span style='color:#009'>" + _value + "</span>");
} else if (vtype=="boolean") {
result.push("<span style='color:#00c'>" + _value + "</span>");
} else if(vtype=="function"){
result.push("<span style='color:"+(_inObject?"#696":"#090")+"'>function()</span>");
} else {
result.push("<span style='color:#e22'>"+( !_inObject&&!_inArray?_value : "\""+_value.substring(0,35)+(_value.length>35?" ...":"")+"\"" ).replace(/\n/g,"\\n").replace(/\s/g," ").replace(/>/g,">").replace(/</g,"<")+"</span>");
}
}
// element
else if(isElement){
if(_value.nodeType==3)
result.push(console.constr(_value.nodeValue));
else if(_inObject){
result.push("<span style='color:#999'>"+_value.nodeName.toLowerCase()+"</span>");
} else {
result.push("<span style='color:#00f;"+ ( !_inObject&&!_inArray?"'":"text-decoration:underline; cursor:pointer;' onclick='console.log(console.cache[" +(console.cache.push( _value ) -1 )+"])'" ) + "'>");
if(_inArray){
result.push(_value.nodeName.toLowerCase());
if(_value.getAttribute){
if(_value.getAttribute&&_value.getAttribute("id"))
result.push("<span style='color:#009'>#"+_value.getAttribute("id")+"</span>");
var elClass = _value.getAttribute(document.all?"className":"class")||"";
result.push(!elClass?"":"<span style='color:#f00'>."+elClass.split(" ")[0]+"</span>");
}
result.push("</span>");
} else {
result.push("<span style='color:#009'><<span style='color:#00f'>"+ _value.nodeName.toLowerCase());
if(_value.attributes){
for(var i=0,len=_value.attributes.length; i<len; i++){
var item = _value.attributes[i];
if(!document.all||item.nodeValue)
result.push(" <span style='color:#009'>"+item.nodeName+"=\"<span style='color:#f00'>"+item.nodeValue+"</span>\"</span>");
}
}
result.push("</span>></span>");
}
}
}
// array, hash
else if(isArray||isHash){
if(isArray){
if(_inObject){
result.push("<span style='color:#999'>["+_value.length+"]</span>");
} else {
result.push("<span style='font-weight:normal'>[ ");
for(var i=0,len=_value.length; i<len; i++){
if((_inObject||_inArray)&&i>3){
result.push(", <span style='color:#999;font-weight:bold'>"+(len-4)+" More...</span>");
break;
}
result.push( (i > 0 ? ", " : "") + console.constr(_value[i], false, true, true) );
}
result.push(" ]</span>");
}
} else if(_inObject){
result.push("<span style='color:#009;'>Object</span>");
} else {
result.push("<span style='color:#060;font-weight:normal;"+ ( !_inObject&&!_inArray?"'":" text-decoration:underline; cursor:pointer;' onclick='console.log(console.cache[" +( console.cache.push( _value ) -1 )+"])'" ) + ">Object");
var i=0;
for(var key in _value){
var value = _value[key];
if((_inObject||_inArray)&&i>3){
result.push(" <span style='color:#999;font-weight:bold;'>More...</span>");
break;
}
result.push(" "+key+"="+console.constr(value,true));
i++;
}
result.push("</span>");
}
} else {
result.push(["<span style='color:#999;'>"+_value+"</span>"]);
}
} catch(e){
result.push("..");
}
return result.join("");
}
window.console.log=function(outputValue){
if(!debug)return;
if(!outputValue)return null;
var bgColor=bgColor||"#fff";
consoleDiv =$id("_console");
if(!consoleDiv){
consoleDiv=document.createElement("div");
consoleDiv.id="_console";
consoleDiv.style.cssText="position:absolute; z-index:9999; left:0%;top:"+Math.max(document.documentElement.scrollTop, document.body.scrollTop)+"px; width:62%; background-color:#fff; border:1px solid #359; opacity:0.9; filter:alpha(opacity=90); padding:4px;"
consoleDivHead=document.createElement("div");
consoleDivHead.id="_consoleHead";
consoleDivHead.style.cssText="background-color:#cde; height:20px; color:#000; font-size:12px; line-height:20px; cursor:move; "
consoleDivHead.innerHTML='<a style="color:#123; float:right; text-decoration:none; margin:1px 2px 0;" href="javascript:$id(\'_console\').style.display=\'none\';void(0);">[关闭]</a><a style="color:#123; float:right; text-decoration:none; margin:1px 2px 0;" href="javascript:$id(\'_consoleBody\').innerHTML=\'\';void(0);">[清空]</a>'
consoleDivBody=document.createElement("div");
consoleDivBody.id="_consoleBody";
consoleDivBody.style.cssText="font-size:12px; line-height:1.5;color:#333; width:100%; max-height:150px; overflow:auto;"
consoleDivBody.innerHTML='';

consoleDiv.appendChild(consoleDivHead);
consoleDiv.appendChild(consoleDivBody);
document.getElementsByTagName("BODY")[0].appendChild(consoleDiv);
if(Drag)
Drag.init(consoleDivHead,consoleDiv);//注册拖拽方法
}
consoleDiv.style.display="";
var consoleDivTop=consoleDiv.style.top.replace(/\D/gi,"");
if(consoleDivTop<Math.max(document.documentElement.scrollTop, document.body.scrollTop)||consoleDivTop>Math.max(document.documentElement.scrollTop, document.body.scrollTop)+(document.compatMode == "BackCompat"?document.body.clientHeight:document.documentElement.clientHeight))
consoleDiv.style.top=Math.max(document.documentElement.scrollTop, document.body.scrollTop)+"px";
var newItem=document.createElement("div");
newItem.style.cssText="border-top:1px solid #cde; padding:3px;font-family:'Courier New'; font-size:13px; background-color:"+bgColor;
var content = [];
for(var i=0, len=arguments.length; i<len; i++){
content.push( window.console.constr(arguments[i],false,false,true) );
}
newItem.innerHTML= content.join(" ");
$id("_consoleBody").appendChild(newItem);
$id("_consoleBody").scrollTop=9999;
};
window.onerror = function(message,file,line){
if(!debug)return;
window.console.log('行:'+line+' 错误:'+message+' 文件:'+file);
};
}
/***小巧的拖拽类***/
var Drag={
"obj":null,
"init":function(handle, dragBody, e){
if (e == null) {
handle.onmousedown=Drag.start;
}
handle.root = dragBody;
if(isNaN(parseInt(handle.root.style.left)))handle.root.style.left="0px";
if(isNaN(parseInt(handle.root.style.top)))handle.root.style.top="0px";
handle.root.onDragStart=new Function();
handle.root.onDragEnd=new Function();
handle.root.onDrag=new Function();
if (e !=null) {
var handle=Drag.obj=handle;
e=Drag.fixe(e);
var top=parseInt(handle.root.style.top);
var left=parseInt(handle.root.style.left);
handle.root.onDragStart(left,top,e.pageX,e.pageY);
handle.lastMouseX=e.pageX;
handle.lastMouseY=e.pageY;
document.onmousemove=Drag.drag;
document.onmouseup=Drag.end;
}
},
"start":function(e){
var handle=Drag.obj=this;
e=Drag.fixEvent(e);
var top=parseInt(handle.root.style.top);
var left=parseInt(handle.root.style.left);
//alert(left)
handle.root.onDragStart(left,top,e.pageX,e.pageY);
handle.lastMouseX=e.pageX;
handle.lastMouseY=e.pageY;
document.onmousemove=Drag.drag;
document.onmouseup=Drag.end;
return false;
},
"drag":function(e){
e=Drag.fixEvent(e);
var handle=Drag.obj;
var mouseY=e.pageY;
var mouseX=e.pageX;
var top=parseInt(handle.root.style.top);
var left=parseInt(handle.root.style.left);
if(document.all){Drag.obj.setCapture();}else{e.preventDefault();};//作用是将所有鼠标事件捕获到handle对象,对于firefox,以用preventDefault来取消事件的默认动作:
var currentLeft,currentTop;
currentLeft=left+mouseX-handle.lastMouseX;
currentTop=top+(mouseY-handle.lastMouseY);
handle.root.style.left=currentLeft +"px";
handle.root.style.top=currentTop+"px";
handle.lastMouseX=mouseX;
handle.lastMouseY=mouseY;
handle.root.onDrag(currentLeft,currentTop,e.pageX,e.pageY);
return false;
},
"end":function(){
if(document.all){Drag.obj.releaseCapture();};//取消所有鼠标事件捕获到handle对象
document.onmousemove=null;
document.onmouseup=null;
Drag.obj.root.onDragEnd(parseInt(Drag.obj.root.style.left),parseInt(Drag.obj.root.style.top));
Drag.obj=null;
},
"fixEvent":function(e){//格式化事件参数对象
var sl = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
var st = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
if(typeof e=="undefined")e=window.event;
if(typeof e.layerX=="undefined")e.layerX=e.offsetX;
if(typeof e.layerY=="undefined")e.layerY=e.offsetY;
if(typeof e.pageX == "undefined")e.pageX = e.clientX + sl - document.body.clientLeft;
if(typeof e.pageY == "undefined")e.pageY = e.clientY + st - document.body.clientTop;
return e;
}
};
/***测试***/
function sometext(ele,n){
var strArr=["可","以","清","心","也"];
var writeStr=""
for(i=0;i<n;i++){
index=parseInt(Math.random()*5);
for(j=0;j<5;j++){
str=index+j>4?index+j-5:index+j;
writeStr+=strArr[str];
}
}
$(ele).innerHTML=writeStr;
}
function test1(){
console.log("这是一个js对象:",{w:100,h:50,area:function(){return this.w*this.h}})
}
function test2(){
console.log("这是一个dom对象:",$id("div1"))
}
function test3(){
var arr=function(w,h){return w*h;}
console.log("这是一个js函数:",arr)
}
function test4(){
var arr=[1,2.2,"a","abc",true,false,new Date(),/<[^>]*>/,function(){alert(0);},{w:100,h:50},$id("div1")];
console.log("这是一个数组:",arr)
}
</script>
</head>
<body>
<div id="div1" class="style1"></div>
<p><input type="button" value="返回一个object" onclick="test1()" />
<input type="button" value="返回一个element" onclick="test2()" />
<input type="button" value="返回一个function" onclick="test3()" />
<input type="button" value="返回一个arrary" onclick="test4()" />
</p>
<div id="div2" class="style1"></div>
<script>sometext("div1",200);sometext("div2",200);</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值