【黑马程序员】Java之debug总结三(精选9篇)
【黑马程序员】Java之debug总结三 篇1
【黑马程序员】Java之debug总结三
之前写了“Java之debug总结一”,“Java之debug总结二”共总结了5种debug方式,现在简绍第6种,不足之处,敬请指正:(源码在文章末尾处)本文以chrome浏览器为例
六.前台debug 主要:debug js代码(1.jsp中嵌入的js代码 2.js文件中的js代码)第一步:首先创建一个web项目,需要有一个jsp页面和js,如下图:
第二步:在test.js,index.jsp中填充内容,如图示: index.jsp
黑马程序员济南中心 编著
test.js
第三步:把项目发布到tomcat服务器中,并启动tomcat服务器
第四步:在浏览器上访问index.jsp,使用“F12”打开chrome开发者工具,如下图:
黑马程序员济南中心 编著
选中“Source”,点击,出现如下界面
黑马程序员济南中心 编著
点击“[url=]encode测试[/url]”按钮进行测试
以上为外部js代码测试,测试过程中可以修改js的内容,“Ctrl+s”保存后,可以立马生效,断点会从第一行从新开始.黑马程序员济南中心 编著
内部js测试步骤类似于上面的步骤,只是在选择资源的时候不是选择“test.js”,而是选择“index”,选择后页面如下图:
测试步骤和外部js一样
比较外部js和内部js的区别: 外部js,可以进行动态的修改, 修改之后立马生效,并且可以立马进行测试.内部js,不可以动态修改,用起来有点不方便
以上以我用过的所有debug方式,希望对大家有所帮助
黑马程序员济南中心 编著
【黑马程序员】Java之debug总结三 篇2
考试宣言: 同学们, 考试考多少分不是我们的目的!排在班级多少的名次也不是我们的初衷!我们考试的目的是要通过考试中的题目,检查大家在这段时间的学习中,是否已经把需要掌握的知识掌握住了,如果哪道题目你不会做,又或者做错了, 那么不用怕, 考完试后, 导师讲解的时候你要注意听!那时候学会了, 记住了, 也一样不影响你高薪就业!
本套题共40道不定项选择题,其中单选30道,多选10道。单选2分/题,多选4分/题。多选题不全对半分,全对满分。
1.所有异常的父类是()A a)Throwable类 b)Error类
c)Exception类
d)RuntimeException类
2.下列关键字能和try一起使用的有()CD a)final b)finalize c)finally d)catch
3.实现下列哪个接口,可以启用序列化功能()b a)Runnable接口
b)Serializable接口 c)Comparable接口 d)Comparator接口
4.当方法遇到异常(编译时异常)又不知如何处理时,下列哪种说法是正确的()C a)捕获异常(try{…}catch{…})b)抛出异常(throw 异常对象)c)声明异常(throws 异常类型)d)嵌套异常
5.如何自定义一个异常类()AB a)让这个类继承Exception b)让这个类继承RuntimeException c)让这个类继承Comparator d)让这个类继承Comparable
6.可以用来操作路径的类是()a a)File b)FileStream c)OutputStream d)FileReader
7.File类中,创建多级目录,可以通过以下那个方法()d a)create()b)createNewFile()c)mkdir()d)mkdirs()
8.下列哪一个import命令可以使我们在程序中创建输入/输出流对象()B a)import java.sql.*;b)import java.io.*;c)import java.net.*;d)import java.util.*;
9.下列关于Java中文件输入输出的说法正确的是()A a)在Java中,文件的输入输出功能是通过流来实现的
b)如果要把数据写入一个文件中,需要创建一个输入流对象 c)字符流在某些方面比如图片的处理,比字节流更方便x d)可以通过Reader r = new Reader(“c:java.txt”);创建一个输入流对象
10.获取指定目录下所有的文件,可以通过哪个方法实现:()D a)b)c)d)
list()getDir();listFile()listFiles()11.下面用字符流能成功拷贝的文件有()BC a)java基础自测题.doc b)学生考试答案.xml c)Student.java d)学生信息表.xlsx
12.看下面程序,加入xxx.txt里面有一个文字”a”,请问该程序输出结果是()D public static void demo1()throws FileNotFoundException, IOException {
InputStream is = new InputStream(“xxx.txt”);
int x = is.read();
System.out.println(x);} a)A b)a c)97 d)编译报错
13.如果我想保留a.txt中原有的内容,在后面追加写入数据,下面创建输出流对象写法正确的是()B a)FileOutputStream fos = new FileOutputStream(“a.txt”);
b)FileOutputStream fos = new FileOutputStream(“a.txt”,true);c)BufferedOutputStream bos = new BufferedOutputStream(“a.txt”,true);d)OutputStreamWriter osw = new OutputStreamWriter(new InputStream(“a.txt”,true),”gbk”);
14.下面关于字节流说法不正确的是()BC a)字节流拷贝文件时一次读取一个字节 b)字节流拷贝文件时一次读取两个字节
c)字节流使用完后需要关,内存输出流使用完后也必须要关闭 d)FileOutputStream没有缓冲区,而FileWriter有缓冲区
15.判断一个文件的大小我们可以使用哪个方法(AD)
a)File类的length()方法
b)File类的available()方法
c)FileInputStream类的length()方法 d)FileInputStream类的available()方法
16.已知 海贼王全集.avi 这个文件有20Gb 的大小,复制该文件最快的方式是()D a)
FileInputStream fis = new FileInputStream(“双元.jpg”);
FileOutputStream fos = new FileOutputStream(“copy.jpg”);
int b;
while((b = fis.read())!=-1){
fos.write(b);
}
fis.close();
fos.close();b)
c)
d)
FileInputStream fis = new FileInputStream(“致青春.mp3”);FileOutputStream fos = new FileOutputStream(“copy.mp3”);byte[] arr = new byte[fis.available()];
fis.read(arr);
fos.write(arr);
fis.close();fos.close();
FileInputStream fis = new FileInputStream(“xxx.txt”);FileOutputStream fos = new FileOutputStream(“yyy.txt”);
byte[] arr = new byte[1024];int len;while((len = fis.read(arr))!=-1){ fos.write(arr,0,len);}
fis.close();fos.close();
FileInputStream fis = new FileInputStream(“xxx.txt”);FileOutputStream fos = new FileOutputStream(“yyy.txt”);
byte[] arr = new byte[1024*8];int len;while((len = fis.read(arr))!=-1){
fos.write(arr,0,len);}
fis.close();fos.close();17.BufferedInputStream这个类是哪个设计模式的体现()B a)单例设计模式 b)装饰设计模式 c)工厂设计模式 d)适配器模式
18.下面说法正确的是()D a)OutputStream是个接口 b)Writer是个接口
c)BufferedOutputStream是FileOutputStream的父类x d)Reader是InputStreamReader的父类
19.下列关于Java I/O中字符输入流Reader类中的read方法描述错误的是?(A)
a)read()方法的返回值类型为char类型 b)read()方法的返回值类型为int类型
c)read()方法的返回值如果为-1,表示到流的末尾
d)read(char[] cbuf)方法表示将读到的多个字符存入字符数组cbuf中
20.下列哪些选项是Java I/O中字符输出流FileWriter类中的write方法?()ABCD a)write(char[] cbuf)写入字符数组
b)write(char[] cbuf, int off, int len)写入字符数组的某一部分 c)write(int c)写入单个字符 d)write(String str)写入字符串
21.假设存在xxx.txt文件,内容为”大家好”,以下代码运行的结果为?(A)public class Test { public static void main(String[] args)throws IOException {
FileReader fr = new FileReader(“xxx.txt”);
FileWriter fw = new FileWriter(“zzz.txt”);
int c;
while((c = fr.read())!=-1){
fw.write();
}
fr.close();
fw.close();} } a)b)c)d)
编译报错
程序正常运行,zzz.txt文件中的内容为”大家好” 程序正常运行,但是没有生成zzz.txt文件 程序正常运行,但是zzz.txt文件中是乱码
22.FileWriter类直接继承哪个类?(A)
a)OutputStreamWriter b)Writer c)BufferedWriter d)InputStreamReader
23.关于自定义字符数组拷贝文件的说法错误的是?()AC a)自定义的数组越大越好
b)自定义的数组既不能太大,也不能太小
c)可以使用FileReader类的available()方法的返回值作为数组的大小
d)建议定义为1024的整数倍,但不能太大,防止内存溢出
24.假设xxx.txt文件中存了2000个汉字,下列程序运行后输出的结果是?(B)
public class Test { public static void main(String[] args)throws IOException {
FileReader fr = new FileReader(“xxx.txt”);
FileWriter fw = new FileWriter(“yyy.txt”);
int count = 0;
char[] arr = new char[1024];
int len;
while((len = fr.read(arr))!=-1){
count++;
fw.write(arr,0,len);
}
fr.close();
fw.close();
System.out.println(count);} }
a)1 b)2 c)3 d)4
25.下面的哪个类代表字节输入流到字符输入流转换的桥梁?()A a)InputStreamReader b)OutputStreamWriter c)FileReader d)BufferedReader
26.BufferedReader读取一行时,判断该行是否结束的标志是什么?()AD a)
r b)
null c)
-1 d)
rn
27.缓冲流是否需要关闭()B a)否 b)是
c)以上答案都不对 d)关不关都可以
28.以下代码运行后输出的结果是?(A)
public class Test { public static void main(String[] args)throws IOException {
System.out.println(fun(5));} public static int fun(int num){
if(num == 1){
return 1;
}else {
return num * fun(num2)+ fun(num-1);
} } } a)34 b)13 c)21 d)5
30.为了提高读写性能,用下面的哪些流?()ABCD a)BufferedInputStream b)BufferedOutputStream c)BufferedReader d)BufferedWriter
31.下列关于Java I/O中哪个流可以将多个文件中的内容合并到一个文件中(序列流)?(cC a)SequenceOutputStream b)InputStreamReader c)SequenceInputStream d)OutputStreamWriter
32.下面的哪个流表示内存输出流?()A a)ByteArrayOutputStream b)ByteArrayInputStream c)ObjectInputStream d)ObjectOutputStream
33.下面说法正确的是?()b a)可以通过ByteArrayOutputStream和ByteArrayInputStream实现文件的复制)b)不可以通过ByteArrayOutputStream和ByteArrayInputStream实现文件的复制 c)用ByteArrayOutputStream和ByteArrayInputStream实现文件的复制,会出现乱码 d)用ByteArrayOutputStream和ByteArrayInputStream实现文件的复制,不会出现乱码
34.下面说法错误的是?()D a)ByteArrayOutputStream内部封装了字节数组
b)new ByteArrayOutputStream()利用空参构造创建对象时,内部的数组的大小为32 c)toByteArray()以字节数组的形式返回数据 d)以上说法都不对
35.关于对象操作流的描述正确的是?()A a)ObjectOutputStream流是将对象以Object类型写入到文件中 b)ObjectOutputStream流是将内容写入到Object对象中 c)ObjectInputStream流是读取Object对象里的内容
d)ObjectInputStream是从文件中读取一个对象出来,读出来是Object类型的,需要进行强制类型转换
36.ObjectOputStream类中的哪个方法可以将对象写入到文件中?()C a)write(Object obj)b)append(Object obj)c)writeObject(Object obj)d)objectWrite(Object obj)
37.下列选项中哪个不属于I/O流?()C a)FileWriter b)FileReader c)Properties d)PrintStream
38.下列说法不正确的是()D a)Properties 类表示了一个持久的属性集L b)Properties 可保存在流中或从流中加载L c)属性列表中每个键及其对应值都是一个字符串L d)以上说法都不对
39.以下代码运行后输出的结果是?()C public class Test { public static void main(String[] args)throws IOException {
Properties prop = new Properties();
prop.setProperty(“name”, “张三”);
prop.setProperty(“tel”, “***”);
Enumeration
while(en.hasMoreElements()){
String key = en.nextElement();
String value = prop.getProperty(key);
System.out.print(value + “:”);
} } } a)b)c)d)name:tel tel:name 张三:***: ***:张三
40.关于Properties类中的load和store方法说法正确的是?()AB a)load方法从流中读取属性列表,键值对,加载到Properties对象中 b)store方法将Properties对象中的键值对,写入到流中
c)load方法将Properties(Properties)对象中的内容加载到文件中
【黑马程序员】Java之debug总结三 篇3
大家好,最近总结了一下作为Java语言初学者,需要掌握的一些基本知识,和一个Java程序员所具备的基本素质,与大家共同分享,不足之处望大家多提宝贵意见。
1、Java概述
1995年5月23日开始,原名为Oak,最先开始用于一个绿色项目开发(一次编译随处使用),后来更名为Java。
09年SUN公司被Oracle收购,先后经历1.0、1.1、1.2、1.3、1.4、5、6、7、8等版本。 Java SE 标准开发
Java EE 企业级开发
Java ME 移动开发
2、JDK和JRE JDK:Java Development Kit(Java开发工具集)
Java语言与JDK的关系:足球比赛与足球场
JRE:Java Runtime Environment 如果客户要使用Java语言平台开发的软件,就必须安装JRE。
它包含:开发技术、用户界面工具箱、整合类库、基础类库和Java虚拟机 区别:JDK可以给开发者提供开发环境,也可以运行程序;JRE不能开发Java程序,只能运行Java程序,客户通常只安装JRE不安装JDK。 Java平台分为四个部分: 操作系统:Linux、Macintosh、Solaris、Windows,.etc 2 JVM(Java虚拟机)
虚拟的操作系统,不同的操作系统虚拟机也不同,它只能识别class文件.3 JDK(包含JRE、工具程序与API)4 Java语言
几个专有名词解释:
JDBC:Java DataBase Connection(Java数据库连接):将数据库的数据展示到前台页面
JNDI:Java Naming Directory Interface(Java命名目录接口)RMI:Remot Method Invoke(远程方法调用):跨IP、跨进程的调用。
开发者向客户提供自己的ip、端口、方法名称,客户拿到了这些则可以远程访问开发者的服务,最终能够获取到想要的东西。rmi://10.7.210.616712/basketballInfo
3、JVM(了解)
概述:Java Virtual Machine(Java虚拟机):可以通过Java虚拟机来实
磨砺营IT教育版权所有
http://
现跨平台。
我们可以把JVM看做操作系统,他只能运行.class文件
不跨平台:在Windows系统开发的程序无法再其他操作系统上运行,不能实现跨平台。
HelloWorld 0101110 Windows操作系统
0101011 Solaris操作系统
跨平台:一次编译,到处运行。好比一份用当地语言编写的文档(俄文),先翻译成英文,在由英文翻译成客户所在国家的语言
JVM作用过程:源程序—(编译)—> 字节码(.class)—(JVM把字节码进行解释)—> 操作系统能理解的机器语言 了解两点: 他是一个操作系统,专门执行class文件 有了它才能够实现跨平台;不同的操作系统,它的虚拟机不一样。
4、写出第一个Java程序(重点)
步骤:安装jdk配置环境变量(连接用户和操作系统)检查是否配置完成(win+R,输入cmd,输入java –version,能够显示Java版本信息说明安装成功)
编程工具:记事本、写字板、EditPlus、Eclipse等。
输入javac命令:编译程序,使之创建一个.class文件(字节码)输入java命令:解释执行程序(执行jdk文件夹bin目录下的java.exe文件,即请求Java虚拟机来执行某字节码)
5、Java标识符命名规范(掌握)
定义:可以自定义的字符序列叫标识符
类名称也叫作标识符,类名称必须和Java源文件名称前缀保持一致。命名规范: 类名称首字母必须大写,如果有多个单词,每个单词首字母大写; HelloWorld 2 标识符可以使用大小写字母(一般全部用大写字母)开始,也可以使用$(美元符号)或_(下划线)开始; 命名遵循“见名知意”的规则; 命名遵循“驼峰命名法”的规则(即有多个单词时,每个单词首字母大写)。
磨砺营IT教育版权所有
http://
6、注释
单行注释://+内容(放在代码的上面一行)
//定义一个整数类型的变量,其名称为height int height; //给变量赋值:
//使用 =(赋值运算符)给变量赋值
//赋值运算符:将(赋值运算符)右边的数值赋给左边的变量 height = 173;
多行注释/块注释:
注意:行注释只能写在方法里面,用来注释变量、分支、循环
多行注释用来注释类、方法、属性
7、变量(重点)
定义:驻留在内存中的一个存储单元(临时)如何使用变量来完成计算: 1 声明一个变量
语法: 数据类型 变量名;int height;2 给变量赋值
语法:
变量名 = 值;height = 173;3 声明变量和赋值可以放在一行,即:数据类型 变量名 = 值;int weight = 86;注意:变量使用之前,一定要为其赋初始值(初始化)。4 如何向控制台输出变量 System.out.println(height);System.out.println(height);
磨砺营IT教育版权所有
http:// 如何使用变量改变数值 weight = weight + 1;变量有哪些数据类型:
数据类型分为两大类:基本数据类型和引用数据类型。基本数据类型: 1 整数类型:
int(整形): 32bit或者4byte,最大值为2的31次方-1,最小值为负2的31次方
short(短整形): 16bit或者2byte,最大值为2的15次方-1,最小值为负2的15次方
long(长整形): 64bit或者8byte,最大值为2的63次方-1,最小值为负2的63次方
注意:所有整数的默认字面量(在编译器能够知道的数值)都为int类型,所以long类型的变量值需要在后面一定要加上一个“L”(可以用小写,但是规范一般用大写。)
byte(字节类型): 8bit或者1byte,最大值为2的7次方-1,最小值为负2的7次方
注意:定义整数尽量使用int类型,如果空间不够再使用long类型,不要使用short、byte来定义整数。小数类型:
float(单精度浮点型): 32bit或者4byte,科学计数法 float pi = 3.14F;注意:所有小数的默认字面量(在编译器能够知道的数值)都为double类型,所以float类型的变量值需要在后面一定要加上一个“F”(可以用小写,但是规范一般用大写。)
double(双精度浮点型):64bit或者8byte,科学计数法 注意:定义小数优先使用double类型,避免不必要的错误。3字符类型:
char(字符类型): bit16或者2byte,只能存储单个字符(2byte,也可以存储汉字或字母)
char sex = ‘男’;注意:只能存储单个字符,必须以单引号开始,单引号结束。
磨砺营IT教育版权所有
http:// 布尔类型:
boolean(布尔类型):只能存储两个值——true/false boolean bool = true;经常使用的数据类型有:int、long、double、bollean 几乎不用的数据类型有:short、float、char 很少用到的数据类型有:byte(第五周讲)变量的命名规范 变量名只能以大小写字母、下划线、美元符号开头,但是可以有大小写、下划线、美元符号、数字组成; 一般使用小写字母开头来定义变量; 如果有多个单词采用驼峰命名法,从第二个单词开始首字母大写; int tomAge = 18 4 变量名区别大小写; 变量名长度不受限制,但是一般变量名称长度不要超过15个字符。6 如果超过15个字符,去掉元音字母保留辅音字母
7、运算符
1、算数运算符
+-* / % 其中,%叫做取模运算符(取余数运算符)。21 / 5 = 4 21 % 5 = 1 在Java世界中,两个整数相除,结果必然是一个整数
2、赋值运算符
= :将运算符右边的数值赋给左边的变量 注意:右边的数值也可以是变量
3、 比较运算符 > < >= <= == 比较两个数值(是否相等)
磨砺营IT教育版权所有
http://
!= 不等于
比较运算符计算的结果一定是一个boolean数据类型 boolean calcResult = 3 > 5;System.out.println(calcResult);则输出false
4、++--放前面叫前向自增/自减:先计算再赋值 放后面叫后向自增/自减:先赋值再计算
int a = 3;int b = 2;int result =(a++)*(--b)+(--a)/(b ++);输出为3*1+3/1=6
5、逻辑运算符(重点)自增和自减(面试会考察)
逻辑运算符必须要配合boolean数据类型一起使用 && 与:
使用场景:
条件1 && 条件2 多个条件都为真则为真。1 int score1 = 80;int score2 = 90;boolean gift = score1 >80 && score2 >80;System.out.println(gift);2 int score1 = 80;int score2 = 90;boolean result1 = score1 >80;boolean result2 = score2 >80;boolean gift = result1 && restult2;
磨砺营IT教育版权所有
http://
System.out.println(gift);两个例子输入结果均为false。 || 或
使用场景:
条件1 || 条件2 多个条件有一个为真,则为真。!非
使用场景:!条件 非真为假,非假为真。
6、位运算符(重点)
特征:将两个整数转成二进制再针对每个bit位逐个进行上下比较的位运算 & 位与:上下结果都为1则结果是1,否则结果是0 10010 8 01010 10 00010 2 | 位或:上下只要有1个1结果就是1,否则是0 10010 8 01010 10 11010 26 ^ 位异或:上下相同为0,否则为1 10010 8 01010 10
磨砺营IT教育版权所有
http://
11000 24 拓展1: int有32位
00000000 00000000 00000000 00000010 最高位 次高位 次低位 最低位
第32位也叫作符号位,1代表负数,0代表正数。拓展2:
~ 取反 先+1再取反
int value = ~10 则得到-11 00001010 1110101
7、 位移运算符
<< 左位移:左位移多少位,就在最右边补多少个0 将10进制数2,左位移3位 2 << 3 00010则去掉前3位,在后面加3个0,变成了10000 >> 右位移:右位移多少位,就在最右边去掉多少个位
将10进制数17,左位移3位 17 >> 3 10001则去掉后3位,在前面加3个0,变成了00010
【黑马程序员】Java之debug总结三 篇4
mybatis和springmvc通过订单商品 案例驱动
第一天:基础知识(重点,内容量多)
对原生态jdbc程序(单独使用jdbc开发)问题总结
mybatis框架原理(掌握)
mybatis入门程序
用户的增、删、改、查
mybatis开发dao两种方法:
原始dao开发方法(程序需要编写dao接口和dao实现类)(掌握)
mybaits的mapper接口(相当于dao接口)代理开发方法(掌握)
mybatis配置文件SqlMapConfig.xml mybatis核心:
mybatis输入映射(掌握)
mybatis输出映射(掌握)
mybatis的动态sql(掌握)
第二天:高级知识
订单商品数据模型分析
高级结果集映射(一对一、一对多、多对多)
mybatis延迟加载
mybatis查询缓存(一级缓存、二级缓存)
mybaits和spring进行整合(掌握)
mybatis逆向工程
对原生态jdbc程序中问题总结
环境
java环境:jdk1.7.0_72 eclipse:indigo mysql:5.1
创建mysql数据
导入下边的脚本:
sql_table.sql:记录表结构
sql_data.sql:记录测试数据,在实际企业开发中,最后提供一个初始化数据脚本
jdbc程序
使用jdbc查询mysql数据库中用户表的记录。
创建java工程,加入jar包:
数据库驱动包(mysql5.1)
上边的是mysql驱动。下边的是oracle的驱动。
程序代码:
问题总结
1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能。设想:使用数据库连接池管理数据库连接。
2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。
3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符号和参数全部配置在xml中。
4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。
java程序转exe过程总结 篇5
下载地址:sourceforge.net/projects/fjep/files/ 点击“Download net.sf.fjep.fatjar_0.0.31.zip(246.3 kB)”即可下载。(1)Fat Jar : Eclipse可以安装一个叫Fat Jar的插件,用这个插件打包非常方便,可以直接将JAVA项目打包成可执行JAR包。
1.下载后的文件如下图所示。
2.打开下载会的ZIP包,将里面的Jar解压到Eclipse安装路径下的plugins文件夹中。
3.如果Eclipse已经启动需要重启一下,没有启动直接打开Eclipse即可。
4.打开Eclipse之后,右击要打开的工程,出现一个“Build Fat Jar”,点击它。
5.如果没有出现它,可以选择“Export”,从弹出的对话框中选择“other”-->“Fat Jar Exporter”,点击Next,选择要打包的项目,再点击Next。
6.出现如下图这样的窗口。选中Use extern jar-name,这样能将生成的Jar保存到工程外的路径。
7.选择Main-Class,点击Browse找到可运行的主类。
8.选择one-jar,点击Accept。
9.点击Next进入下一步,出现下面的界面,直接点击Finish即可。
打包完成,点击OK即可。去刚刚指定的位置找到Jar,双击即可运行。(com.simontuffs.onejar.Boot 就是你的入口程序,下面转成exe时会用到)
(2)exe4j 软件+ Inno Setup软件
对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是否安装有jre、jre版本问 题、jre去哪下载、如何用jre启动你的Java应用?不要说刚接触电脑的人,就算是比较熟悉电脑,如果没有接触过Java,面对一个Java应用,如何在Windows下启动它,估计都会折腾半天。
最好的方式莫过于带着JRE,让用户轻松点击就能运行。带着JRE运行,JRE的大小应该是最让 人头疼的,我默认安装的jre6大小达到80M,而程序只有200-300k左右,感觉非常不合理,分发与 网络传输过程也会大受影响!因此针对自己程序精简jre非常必要,关于jre的精简问题请参考其他 文章,本文在此不做说明。
针对windows平台,让用户一键式安装,双击使用,使用工具exe4j+InnoSetup,这两个工具都 可以在网上找到,下面通过一个实例进行说明。
第一步:将自己的java程序打包成“可执行的jar包”,可以采用eclipse等IDE工具打包。下面 以eclipse为例进行说明:
上面截图应该注意的是:第一步是要求你选择你的java程序的引导类,下面是输出路径,类文 件的处理上我们选择第二种,即将该java程序所需的jar包一起打包进来,最后点击finish。完成后 最好双击一下导出的可执行jar包,确保可正确运行。
第二步:准备打包文件夹。
1.在任意路径下新建文件夹,文件夹的命名可以使用项目的名字,如此例的项目名takephoto。将在第一步中生成的jar包复制进来。
2.将精简以后的jre文件包复制进来,如果尚不掌握精简方法,可以暂时采用安装的庞大jre,如
下图:
将上图的jre复制进去即可。
3.在takephoto文件夹下新建lib文件夹,将项目所需的jar包,如数据库驱动等复制进去。4.可以在准备一个ico文件夹,存放一个或几个ico图标或图片。经以上几步后,文件结构应该是:
第三步:使用exe4j工具生成exe文件:
直接下一步,这一步
要求选择类型,我们选择第一个,这样可以保证程序仍具有跨平台的特性。如果选择第二个,可以 把程序完全编译成exe文件,可以更好的保护你的程序不被反编译。
上面是设置你的程序的短文件名,源文件夹路径(如我的:E:takephoto),以及要生成的exe文件的存 放目录,exe存放目录必须指定到源文件夹下,这里我把它指定为E:takephoto的根目录下。
上面是给我们即将生成的exe文件起一个名字,如我的“takephoto”,还可以给它指定一个ico类型的 图标,其它按默认就可以了,在指定ico图标路径的时候建议采用绝对路径,因为在测试的时候发现
如果采用相对路径在生成exe文件的时候提示出错,且经测试采用绝对路径也能保证程序的准确性。
上面是要求把程序中所用到的类路径添加上去。然后指定程序的启动类,其它如果没有必要的话,则按默认即可,点击+号添加类路径,注意,要首先添加类路径再指定启动类,类路径包含两部分,一是我们在第一步生成的可执行jar包,二是程序所需的其他jar包路径,即lib文件夹路径。如图:
上面是把生成的可执行jar包路径添加进去了,下面添加lib文件夹路径。注意,全部采用相对路径 如.takephoto.jar,.lib。
在添加lib文件夹
路径的时候选择scandirectory。
上面是
把lib文件夹路径添加进去了。下面就可以指定启动类了。
先选择我们的程序所需要的jre版本,然后便是选择我们自带的jre了,这一步不是必须,但是为了更好的分发程序,我们自带了jre,所以必须把我们自带的jre指定为首选的运行环境,如图选择:接下来
Searchsequence
默认情况下程序会去系统的注册表,环境变量及相关的目录查找jre,因为我们只需要自带的jre,所以 这里我把默认的选项移除了,然后添加我们自己的jre所在的目录路径,点+号开始:
均采用默认即可:
下面的
上面的
可以添加一个启动画面,如指定一个gif图片。
好了exe
文件已经生成完毕了。点击exit退出即可,退出时提示配置已经改变是否保存,可以保存,保存后 为takephoto.exe4j,下次可以直接双击这个文件进行编辑我们上面的配置。经过以上操作,文件夹结构变为:
双击一下takephoto.exe也可以执行了。
第三步:利用InnoSetup工具进行压缩打包,做成安装程序。
可以采用家脚本向导,也可以将上面画面关掉,直接“文件-新建”即可。
上面是设置一些信息,比如程序名称,版本信息,发布者,应用程序官方网站。
这一步点击浏览选择主执行文件即我们第二步生成的exe执行文件:
下一步是添加文件夹:
点击是即可 菜单文件夹名称,根据需求进行勾选。下面的一直点击下一步即可
上面是指定开始
上面可以自定义输出文件夹,生成的安装包文件名默认是setup,自定义安装程序图标,安装密码。
本名称。点击保存之后立即进行如下编译:
指定脚
编译完成之后,文件的默认输出位置在源文件夹下的程序自动创建output文件夹中。最终文件夹的结构是:
以上便是我们需要的安装程序。值此全部结束,如有错误敬请指正!
2011年3月25日星期五22:11:25
注意:
(1)生成的exe程序如果发生如下错误:
可用下面的方法解决:
exe4j是个很好的打包利器,官方下载地址:http:///download/exe4j/files.php
如果你不注册,打包好的软件每次启动都会报:this executable was created with an evaluation version of exe4j,特烦人,所以最好下载exe4j的破解版,但是有注册码,官方软件毕竟比破解版好用,下面的注册码经测试,均可以使用.用户名和公司名可随便填 A-XVK258563F-1p4lv7mg7sav
A-XVK209982F-1y0i3h4ywx2h1
A-XVK267351F-dpurrhnyarva
A-XVK204432F-1kkoilo1jy2h3r
A-XVK246130F-1l7msieqiwqnq A-XVK249554F-pllh351kcke50
A-XVK238729F-25yn13iea25i
A-XVK222711F-134h5ta8yxbm0
A-XVK275016F-15wjjcbn4tpj
A-XVK275016F-15wjjcbn4tpj
黑马程序员自荐信 篇6
在当今社会中,需要使用自荐信的场合越来越多,自荐信可以帮助我们更好地提出请求。你还在为写自荐信而苦恼吗?以下是小编为大家整理的黑马程序员自荐信,仅供参考,希望能够帮助到大家。
尊敬的老师:
您好!
在阅读过几十份,甚至上百份的自荐信之后,或许,您已经有了些许疲倦与困意,但还是感谢您打开了我的这封自荐信。对于您来说,或许只是打开了一封信,而对于我来说,您为我开启了一扇窗,一扇可以看见未来,追逐梦想的的窗户。
我是赵玉杰,现在就读于沈阳建筑大学,理学院,信息与计算科学专业,目前大三。说起来,我也和黑马有点缘分,由于专业的.相近性,我在学校学习了c语言,c++语言,java语言,数据库(sql),数据结构(c语言版),计算机网络,操作系统等相关科目,算是有一点基础,但也仅仅只能是基础。这个社会需要的不是基础,而是真才实干。
力,获得足够的项目经验,掌握得心应手的实际操作……就是让我从众多毕业生里面脱颖而出的最佳选择。为了这一目标,我发现了黑马,一匹让我很惊讶的黑马!!
“黑马程序员”成立于20xx年,20xx年正式上线运营。在短短的3年里,在it培训行业,“黑马程序员”不负众望的成为了一匹业界高度认可的黑马。在短短的四年时间里,“黑马程序员”为社会塑造了一大批it相关行业的精英。从黑马毕业的学员,得到了公司与社会的认可,实现了自己的社会价值,人生目标。在中关村软件园与csdn的大力支持下,在传智播客的教学实施下,“黑马程序员”已经成为了程序员的一种标榜,而能成为“黑马程序员”的一员,是每一个程序员的愿望,更是一种荣耀。而我更是殷切的希望能够成为黑马的一员,让我脱颖而出,让我底气十足。
【黑马程序员】Java之debug总结三 篇7
1、简单属性
简单属性是非数组类型的属性,它的修改器必须接受一个参数,参数类型由属性的特性决定,可以是任意类型。而简单属性的访问器仅仅是用于返回属性的值,它不接受任何参数,但它要返回一个值,返回值的类型必须与修改器所接收的参数类型一致。public class Book {
private double price;
publicString getPrice(){
return price;
}
public voidsetPrice(double price){
this.price= price;
} }
2、索引属性
索引属性是数组类型的属性,JavaBean中需要对索引索性提供两对setter和getter方法,一对用于设置和获取数组本身,另一对用于设置和获取数组中的元素。接下来就通过一个JavaBean来演示索引属性的定义,代码如例程所示。
class Person {
// 索引属性hobbies
privateString[] hobbies;
// 设置和获取属性本身
publicString[] getHobbies(){
returnhobbies;
}
publicvoid setHobbies(String[] hobbies){
this.hobbies= hobbies;
}
// 设置和获取属性中的元素
publicString getHobbies(int i){
returnhobbies;
}
publicvoid setHobbies(int i, String hobby){
hobbies= hobby;
【黑马程序员】Java之debug总结三 篇8
在数据库操作中,经常需要查找特定的数据,例如:当执行“select * from student where id = 10000”语句时,MySQL数据库必须从第一条记录开始遍历,直到找到id为10000的数据。这样的效率非常低。为此,MySQL允许建立索引来加快数据表的查询和排序。
索引的概念
数据库的索引好比字典的目录,是对数据库表中一列或者多了的值进行排序后的一种结构,其作用就是提高表中的数据查询速度。MySQL中的索引分为很多种,具体如下。
1.普通索引
普通索引是由key或index定义个索引,它是MySQL中的基本索引类型,可以创建在任何数据类型中。其值是否唯一和非空有字段本身的约束条件所决定。例如,在student表的id字段上建立一个普通索引,查询记录时,就可以根据该索引查询,从而提高效率。
2.唯一性索引
唯一性索引是指由unique定义个索引,该索引所在字段的值必须是唯一的。例如,在grade表的stu_id字段上建立唯一性索引,那么stu_id字段的值就必须是唯一的。
3.全文索引
全文索引是由fulltext定义的索引,它只能创建在char、varchar或text类型的字段上。并且现在只有MyISAM存储引擎支持全文索引。
4.单列索引
单列索引指的是在表中单个字段上创建索引,它可以是普通索引、唯一索引或者全文索引,只有保证该索引只对应表中一个字段即可。
5.多列索引
多列索引是指在表的多个字段上创建索引,只有在查询条件中使用了这些字段中的第一个字段时,该索引才会被使用。如,在student表的id、name和score字段上创建一个多列索引,那么只有查询条件中使用了id字段时,该索引才会被使用。
相较于单列索引,当我们频繁的需要同时检索表中多列时,多列索引的效率会高很多。6.空间索引
空间索引是由spatial定义的索引,它只能创建在空间数据类型的字段上。MySQL中的空间数据类型有4种:geometry、point、linestring和polygon。需要注意的是,创建空间索引的字段,必须将其声明为NOT NULL,并且空间索引只能在存储引擎为MyISAM的表中创建。
需要注意的是,虽然索引可以提高数据的查询效率,但索引会占用一定的存储空间。并且创建和维护索引所消耗的时间,是随着数据量的增加而增加的。因此,使用索引时,应综合考虑其优缺点,不能肆意创建。
创建索引
要想使用索引提高数据表的访问速度,首先要创建一个索引。创建索引的方式大致可分为三种。
创建表的同时创建索引
创建表的时候可以直接创建索引,这种方式最简单、方便,其基本语法格式如下所示:
create table 表名(字段名数据类型 [完整性约束条件],字段名数据类型 [完整性约束条件], „„);
字段名数据类型
[unique|fulltext|spatial] index|key [别名](字段名1 [(长度)])[asc|desc] 关于上述语法相关解释具体如下: 1)unique:可选参数,表示唯一索引。2)fulltext:可选参数,表示全文索引。3)spatial:可选参数,表示空间索引
4)index和key:用来表示字段的索引,二者选一即可。5)别名:可选参数,表示穿件的索引名称。6)字段名1:指定索引对应字段的名称。7)长度:可选参数,用于表示索引的长度。
8)asc和desc:可选参数。asc表升序,desc表降序排列。
MySQL中的6种索引类型,如下: 1)创建普通索引
【例】在t1表中id字段上创建索引,SQL语句如下:
create table t1(id int, name varchar(20), score float,);index(id)可使用explain语句查看索引是否被使用,SQL语句如下:
explain select * from t1 where id = 1;2)创建唯一性索引
【例】创建一个表名为t2的表,在表中的id字段上建立索引名为unique_id的唯一性索引,并按升序排列,SQL语句如下:
create table t2(id int not null,);name varchar(20)not null, score float, unique index unique_id(id asc)这样,便在id字段上建立了一个名为unique_id的唯一性索引。3)创建全文索引
【例】创建一个表名为t3的表,在表中的name字段上建立索引名为fulltext_name的全文索引,SQL语句如下:
create table t3(id int not null,name varchar(20)not null, score float, fulltextindex fulltext_name(name))engine=MyISAM;这样,即可在name字段上建立一个名为fulltext_name的全文索引。
需要注意的是,由于目前只有MyISAM存储引擎支持全文索引,默认的InnoDB存储引擎不支持全文索引。因此,在建立全文索引时,一定要注意表存储引擎的类型,对于经常需要索引的字符串、文字数据等信息,可以考虑存储到MyISAM存储引擎的表中。
4)创建单列索引
【例】创建一个表名为t4的表,在表中的name字段上建立索引名为single_name的单列索引,SQL语句如下:
create table t4(id int not null,);name varchar(20)not null, score float, index single_name(name(20))这样,即可在name字段上建立一个名称为single_name的单列索引,并且索引的长度为20。
5)创建多列索引
【例】创建一个表名为 t5的表,在表中的id和name字段上建立索引名为multi的多列索引,SQL语句如下:
create table t5(id int not null,);name varchar(20)not null, score float, indexnulti(id, name(20))这样,即可在id和name字段上建立一个名为multi的多列索引。
需要注意的是,在多列索引中,只有查询条件中使用了这些字段中的第一个字段时多列索引才会被使用。
为了验证这个说法是否正确,将id字段作为查询条件,通过explain语句查可看索引的使用情况,SQL语句如下:
explain select * from t5 where id = 1;但是,如果只使用name字段作为查询条件,multi索引不会被使用。6)创建空间索引
【例】创建一个表名为t6的表,在空间类型为geometry的字段上创建空间索引,SQL语句如下:
create table t6(id int,space geometry not null, spatial index sp(space))engine=MyISAM;这样,即可在t6表中的space字段上建立名称为sp的空间索引了。
需要注意的是,创建空间索引时,所在字段的值不能为空值,并且表的存储引擎为MyISAM。
使用 create index 语句在已经存在的表上创建索引
若想在一个已经存在的表上创建索引,可以使用 create index语句,其创建索引的具体语法格式如下所示:
create [unique|fulltext|spatial] index 索引名 on表名(字段名 [(长度)] [asc|desc]);在上述语法格式中,unique、fulltext和spatial都是可选参数,分别用于表示唯一性索引、全文索引和空间索引;index用于指明字段为索引。
为了更好的展示如何使用create index语句在已经存在的表上创建索引,接下来创建一个book表,该表中没有建立任何索引,创建book表的SQL语句如下:
create table book(bookid int not null, bookname varchar(255)not null, authors varchar(255)not null, info varchar(255)null, comment varchar(255)null, publicyear year not null);创建好数据表book后,通过具体案例演示如何使用create index语句在已经存在的数据表中创建索引,具体如下:
1)创建普通索引
【例】在book表中的bookid字段上建立一个名称为index_id的普通索引,SQL语句如下:
create index index_id on book(bookid);这样,即可在book表中,为bookid字段建立一个名称为index_id的普通索引。2)创建唯一性索引
【例】在book表中的bookid字段上建立一个名称为uniqueidx的唯一性索引,SQL语句如下:
create unique index uniqueidx on book(bookid);这样,即可在book表中,为bookid字段建立一个名称为uniqueidx的唯一性索引。3)创建单列索引
【例】在book表中的comment字段上建立一个名称为singleidx的单列索引,SQL语句如下所示:
create indexsingleidx on book(comment);这样,即可在book表中,为comment字段建立一个名称为singleidx的单列索引。4)创建多列索引
【例】在book表中的authors字段和info字段上建立一个名称为mulitidx的多列索引,SQL语句如下所示:
create index mulitidxon book(authors(20), info(20));这样,即可在book表中,为authors和info字段建立一个名称为mulitidx的多列索引。5)创建全文索引
【例】删除表book,重新创建表book,在book表中的info字段上建立全文索引。首先删除book表。SQL语句如下所示:
drop table book;然后重新创建表book,SQL语句如下所示:
create table book(bookid int not null, bookname varchar(255)not null, authors varchar(255)not null, info varchar(255)null, comment varchar(255)null, publicyear year not null)engine=MyISAM;接下来使用create index 语句在book表的info字段上创建名称为fulltextidx的全文索引,SQL语句如下所示:
create fulltext indexfulltextidx on book(info);这样,即可在book表中,为info字段建立一个名称为fulltextidx的全文索引。6)创建空间索引
【例】创建表t7,在表中的g字段上创建名称为spatialidx的空间索引。首先创建数据表t7,SQL语句如下所示:
create table t7(g geometry not null)engine=MyISAM;使用create index 语句在t7表的g字段上,创建名称为spatialidx的空间索引,SQL语句如下所示:
create spatial index spatialidx on t7(g);这样,即可在t7表中,为g字段建立一个名称为spatialidx的空间索引。
使用alter table语句在已经存在的表上创建索引
在已经存在的表中创建索引,除了可以使用create index语句外,还可以使用alter table语句来完成。其语法格式:
alter table 表名 add [unique|fulltext|spatial] index 索引名(字段名 [(长度)] [asc|desc])在上述语法格式中,unique、fulltext和spatial都是可选参数,分别用于表示唯一性索引、全文索引和空间索引;add表示向表中添加字段。
接下来,同样以book表为例,对不同类型的索引进行说明,为了使book表不包含任
何索引,首先删除book表,SQL语句如下:
drop table book;然后重新建立book表,SQL语句如下:
create table book(bookid int not null, bookname varchar(255)not null, authors varchar(255)not null, info varchar(255)null, comment varchar(255)null, publicyear year not null);创建好数据表book后,就可以使用alter table语句在已存在的数据表中创建索引了,具体如下:
1)创建普通索引
【例】在表中的bookid字段上创建名称为index_id的普通索引,SQL语句如下:
alter table book add index index_id(bookid);这样,即可在book表中,为bookid字段建立一个名称为index_id的普通索引。2)创建唯一性索引
【例】在book表中的bookid字段上建立一个名称为uniqueidx的唯一性索引,SQL语句如下:
alter table book add unique uniqueidx(bookid);这样,即可在book表中,为bookid字段建立一个名称为uniqueidx的唯一性索引。3)创建单列索引
【例】在book表中的comment字段上建立一个名称为singleidx的单列索引,SQL语句如下所示:
alter table book add indexsingleidx(comment(50));这样,即可在book表中,为comment字段建立一个名称为singleidx的单列索引。4)创建多列索引
【例】在book表中的authors字段和info字段上建立一个名称为mulitidx的多列索引,SQL语句如下所示:
alter table book add indexmultidx(authors(20), info(50));这样,即可在book表中,为authors和info字段建立一个名称为mulitidx的多列索引。
5)创建全文索引
【例】删除表book,重新创建表book,在book表中的info字段上建立全文索引。首先删除book表。SQL语句如下所示:
drop table book;然后重新创建表book,SQL语句如下所示:
create table book(bookid int not null, bookname varchar(255)not null, authors varchar(255)not null, info varchar(255)null, comment varchar(255)null, publicyear year not null)engine=MyISAM;接下来使用alter table语句在book表的info字段上创建名称为fulltextidx的全文索引,SQL语句如下所示:
alter table book add fulltext indexfulltextidx(info);这样,即可在book表中,为info字段建立一个名称为fulltextidx的全文索引。6)创建空间索引
【例】创建表t8,在表中的space字段上创建名称为spatialidx的空间索引。首先创建数据表t8,SQL语句如下所示:
create table t8(space geometry not null)engine=MyISAM;使用alter table语句在t8表的space字段上,创建名称为spatialidx的空间索引,SQL语句如下所示:
alter table t8 add spatial index spatialidx(space);这样,即可在t8表中,为space字段建立一个名称为spatialidx的空间索引。
删除索引
由于索引会占用一定的磁盘空间,因此,为了避免影响数据库性能,应该及时删除不再使用的索引。删除索引的方法有两种,如下:
使用alter table删除索引
使用alter table删除索引的基本语法格式如下所示:
alter table 表名 drop index 索引名
【例】删除表book中名称为fulltextidx的全文索引
alter table book drop index fulltextidx;上述SQL语句执行后,可以使用show create table语句查看表结构,来确认索引是否已经成功被删除。
show create talbe book;使用dropindex删除索引
使用dropindex删除索引的基本语法格式如下所示:
drop index 索引名 on表名;【例】删除表t8中名称为spatialidx的空间索引,SQL语句如下:
drop index spatialidx on t8 使用show create table 语句查看表结构
【黑马程序员】Java之debug总结三 篇9
在vim中存在三种模式:命令模式、末行模式、编辑模式。三个模式之间的相互关系:
2.4、末行模式
默认是命令模式,如果说需要进入到末行模式,则可以在命令模式中按下英文“:”。
2.4.1、保存/另存
保存:
语法::w(write)
另存:
语法: :w 文件的路径
另存的结果:
2.4.2、退出
语法:
:q(quit)
提示:有些时候,如果对当前编辑的文档已经进行了修改,但是又不想保存想直接退出,则可以输入:q!,同样也有:wq!。其中的感叹号表示强制的意思。
2.4.3、查找
语法:
/字符串
对于查找的结果,同样会和打开文件的第三种方式一样,进行高亮显示,可以使用N和n进行上一个和下一个结果的切换。
2.4.4、替换
第一种情况:
语法:
:s/需要替换的字符串/替换成的字符串 一处符合条件的字符串)例如:
第二种情况:
语法:
:s/需要替换的字符串/替换成的字符串/g(替换光标所在行全部符合条件的地方,g表示global)例如:
(表示替换当前光标所在的行的第第三种情况: 语法:
:%s/需要替换的字符串/替换成的字符串(表示替换当前文档中每一行第一个符合条件的地方)例如:
第四种情况: 语法:
:%s/需要替换的字符串/替换成的字符串/g 地方)例如:
【【黑马程序员】Java之debug总结三】推荐阅读:
黑马程序员面试题精编06-01
黑马程序员基础测试题08-27
黑马程序员:AJAX入门系列10-17
黑马程序员PHP培训教程:同步和异步介绍05-29
黑马程序员济南中心PHP第11天教程11-12
【黑马程序员】为什么面试官喜欢问职业规划05-19
黑马程序员C语言教程:C++语言78个常见编译错误及分析11-15
高考黑马学习方法总结08-22
java程序员招聘08-01