孙肖宁 发布的文章

java中的异常都是类,在异常对象中会携带一些信息给我们,我们通过这个异常对象将信息提取出来

异常体系

Throwable
    |--Error
                |--IOError
                |--AWTError
                |--其他子类
    |--Exception
        |--RuntimeException
                    |--ArithmeticException
                    |--ClassCastException
                    |--其他子类
                |--其他子类

Throwable
    |--Error
                |--IOError
                |--AWTError
                |--其他子类
    |--Exception
        |--RuntimeException
                    |--ArithmeticException
                    |--ClassCastException
                    |--其他子类
                |--其他子类

异常体系的特点

1.异常体系中的所有类以及建立的对象都具备可抛性。也就是说可以被throw和throws关键字所操作。只有异常体系具备这个特点。
2.Error是java程序运行过程中出现了错误,错误是不能够处理,只能退出JVM。
3.Exception是可以处理的。如果没有处理异常,则程序直接退出JVM。
4.编译时异常:所有的Exception的直接子类都是“编译时异常”。

异常的分类

编译时异常:编译时被检测异常,该异常在编译时,如果没有处理(没有抛也没有try),编译失败。该异常被标识,代表这可以被处理。Exception类中除了RuntimeException类及其子类都是编译时异常。
运行时异常(编译时不检测):在编译时,不需要处理,编译器不检查。该异常的发生,建议不处理,让程序停止。需要对代码进行修正。RuntimeException类及其子类都是运行时异常。如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过;之所以不用在函数声明,是因为不需要让调用者处理。当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。
异常的处理原则

处理方式有两种:try 或者 throws。

调用到抛出异常的功能时,抛出几个,就处理几个。一个try对应多个catch。

多个catch,父类的catch放到最下面。

catch内,需要定义针对性的处理方式。不要简单的定义printStackTrace,输出语句。也不要不写。

当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。

try
{
    throw new AException();
}
catch (AException e)
{
    throw e;
}

如果该异常处理不了,但并不属于该功能出现的异常。

可以将异常转换后,在抛出和该功能相关的异常。或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,当调用者知道。并处理。也可以将捕获异常处理后,转换新的异常。

try
{
    throw new AException();
}
catch (AException e)
{
    // 对AException处理。
    throw new BException();
}

异常的注意事项

在子父类覆盖时:

子类抛出的异常必须是父类的异常的子类或者子集。
如果父类或者接口没有异常抛出时,子类覆盖出现异常,只能try不能抛。
异常的好处

将问题进行封装。
将正常流程代码和问题处理代码相分离,方便于阅读。

vim编辑器简介

Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。 VIM是自由软件。

基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode).

1)命令行模式command mode)   

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

2) 插入模式(Insert mode)   

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。

3) 底行模式(last line mode)   

将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。

不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式(command mode)。

模式之间的切换

  • 进命令行模式
    在进入插入模式后,你只要按[Esc]就可以从插入模式进入命令行模型了。
  • 进入插入模式
    刚开始打开vim,你必须按i才能进入插入模式。
  • 进入底行模式
    在使用底行模式之前,请记住先按「ESC」键确定您已经处于命令行模式下后,再按「:」冒号即可进入底行模式。

常用方法以及常用快捷方式

vim 文件名

    打开文件或者创建并打开文件
    vim  +  文件名   
    光标定位到文件的最后一行
    vim  +n  文件名   
    光标定位到第n行
    vim  +/xxx   文件名
    光标定位到第一次出现xxx的位置,按n向下切换
    vim  aa  bb  cc
    同时创建aa,bb,cc(底行模式下,按:n切换到下一个,:N(:prev)切换到前一个)
    底行模式
    :w 将文件从内存写入硬盘,也就是文件保存过程
    :q 退出vim当前打开的文件
    :!强制执行(可以配合使用,退出时一般使用:wq,退出的同时还可以保存文件)
    :ls 列出当前编辑器打开的所有文件
    :n切换到下一个文件
    :N切换到上一个文件
    :n光标定位到第n行
    :/xxx第一次出现位置
    :?xxx从光标位置向前搜索
    命令模式下常用命令
    -h  光标左移
    -j   光标下移
    -k  光标上移
    -l   光标右移
    Ctrl +f  向下翻页
    Ctrl+b  向上翻页
    Ctrl+d  向下翻半页
    Ctrl+u  向上翻半页
    dd  删除光标所在的行
    o   在光标所在的行的下方插入一行并切换到输入模式
    yy 复制光标所在的行
    p   在光标所在的行的下方粘贴
    P   在光标所在的行的上方粘贴

压缩格式

常用压缩格式:.zip .gz .bz2
常用压缩格式:.tar.gz .tar.bz2

.zip格式压缩

zip 压缩文件名 源文件

压缩文件

zip –r 压缩文件名 源目录

.zip格式解压缩

unzip 压缩文件

解压缩.zip文件

.gz格式压缩

gzip 源文件

压缩为.gz格式的压缩文件,源文件会消失

gzip –c 源文件 > 压缩文件

压缩为.gz格式,源文件保留

例如: gizp –c qqq > qqq.zip
gzip –r 目录

压缩目录下所有的子文件,但是不能压缩目录

.gz格式解压缩

gzip –d 压缩文件

解压缩文件

gunzip 压缩文件

解压缩文件

.bz2格式压缩

bzip2 源文件

压缩为.bz2格式,不保留源文件

bzip –k 源文件

压缩后保留源文件

注意:bzip2命令不能压缩目录

.bz2格式解压缩

bzip –d 压缩文件

解压缩,-k保留压缩文件

bunzip2 压缩文件

解压缩,-k保留压缩文件

打包命令tar

tar –cvf 打包文件名 源文件
选项:

-c:打包
-v:显示过程
-f:指定打包后的文件名

例如: tar -cvf qqq.tar qqq

解打包命令

tar –xvf 打包文件名
选项:

-x:解打包

例如:tar –xvf qqq.tar

.tar.gz压缩格式

其实.tar.gz格式是先打包为.tar格式,再压缩为.gz格式
tar –zcvf 压缩包名.tar.gz 源文件
选项:

-z:压缩为.tar.gz格式

tar –zxvf 压缩包名.tar.gz
选项:

-x:解压缩.tar.gz格式

.tar.bz2压缩格式

tar -jcvf 压缩包名.tar.bz2 源文件
选项:

-z:压缩为.tar.bz2格式

tar -jxvf 压缩包名.tar.bz2
选项:

-x:解压缩.tar.bz2格式

查询目录中内容ls

格式:ls [选项] [文件或目录]

选项:
-a显示所有文件,包含隐藏文件
-l显示详细信息
-d查看目录属性
-h人性化显示文件大小
-i显示inode

建立目录mkdir

格式:mkdir –p [目录名]
参数:-p递归创建

切换所在目录:cd

格式:cd [目录]
简化操作:

   cd~ 进入当前用户的家目录
   cd
   cd – 进入上次目录
   cd .. 进入上一级目录
   cd.  进入当前目录

查询所在目录位置:pwd

删除空目录:rmdir

格式:rmdir [目录名]

删除文件或目录:rm

格式:rm –rf [文件或目录]
选项:

   -r删除目录
   -f强制

复制命令:cp

格式:cp [选项] 原文件或目录
选项:

   -r 复制目录
   -p 连带文件属性复制
   -d 若原文件是链接文件,则复制链接属性
   -a 相当于-pdr

剪切或改名命令:mv

格式:mv 原文件或目录

搜索命令的命令whereis

格式:whereis 命令名

搜索命令所在路径及帮助文档所在位置

选项:

   -b:只查找可执行文件
   -m:只查找帮助文档

搜索命令的命令which

格式:which 文件名

搜索命令所在路径及别名

shutdown命令

格式:shutdown [参数] 时间

参数:
-r:重启
-h:关机
-c:取消前一个关机命令

命令格式

命令 [选项] [参数]

注意:个别命令使用不遵循此格式

    当有多个选项时,可以写在一起
    简化选项与完整选项 ,比如:-a等于-all

由于字符串是常量,因此一旦被创建,其内容和长度是不可改变的。如果需要对一个字符串进行修改,则只能创建新的字符串。为了便于对字符串的修改,在JDK中提供了一个StringBuffer类(也称字符串缓冲区)。StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的。StringBuffer类,类似一个容器,当在其中添加或删除字符时,并不会产生新的StringBuffer对象。

StringNuffer类的特点

长度是可变化的。
可以字节操作多个数据类型。
最终会通过toString方法变成字符串。
StringBuffer类的常用方法

存储
StringBuffer append(char c) 将指定数据作为参数添加到已有数据结尾处
StringBuffer insert(int offset,String str) 将字符串中的offset位置插入字符串str
删除
StringBuffer delete(int start,int end) 删除StringBuffer对象中指定范围的字符或字符串序列(包含start,不包含end)。
Stringbuffer deleteCharAt(int index) 移除次序列指定位置的字符
获取
char charAt(int index) 获取指定位置的字符
int indexOf(String str) 获取指定字符串的位置
int lastIndexOf(String str) 获取指定字符串最后一次出现的位置
int length() 获取字符串的长度
String substring(int start, int end) 获取指定位置的字符串
修改
StringBuffer replace(int start,int end,String s) 在StringBuffer对象中替换指定的字符或字符串序列(包括star不包括end)
void setCharAt(int index,char ch) 修改指定位置index处的字符序列
反转
StringBuffer reverse() 将此字符串序列用其反转形式取代
注意:JDK1.5 版本之后出现了StringBuilder,StringBuffer是线程同步。,StringBuilder是线程不同步,以后开发,建议使用StringBuilder。

代码示例:

public class StringBufferDemo {
    public static void main(String [] args) {
        sop("添加");
        add();
        sop("删除");
        delete();
        sop("获取");
        select();
        sop("修改");
        alert();
    }
    public static void add() {
        StringBuffer sb = new StringBuffer();
        sb.append("dddddd");
        sop("在末尾处添加:"+sb);
        sb.insert(2,"12");
        sop("在第二个位置添加12:"+sb);
    }
    public static void delete() {
        StringBuffer sb = new StringBuffer("abcdefghigklmn");
        sb.delete(0,2);
        sop("删除0到2位置的"+sb);
        sb.deleteCharAt(3);
        sop("删除第3个位置的字符"+sb);
    }
    public static void select() {
        StringBuffer sb = new StringBuffer("abcdefghigak");
        sop("获取下标为2的字符"+sb.charAt(2));
        sop("获取字符e的下标"+sb.indexOf("e"));
        sop("获取a最后一次出现的下标"+sb.lastIndexOf("a"));
        sop("获取字符串的长度"+sb.length());
        sop("获取1到3位置的字符串"+sb.substring(1,3));
    }
    public static void alert() {
        StringBuffer sb = new StringBuffer("abcdefghigkl");
        sop("修改1到3位置上的字符串为zz:"+sb.replace(1, 3, "zz"));
        sb.setCharAt(5,'r');
        sop("修改5位置上的字符为r:"+sb);
        sop("反转"+sb.reverse());
    }
    public static void sop(Object obj) {
        System.out.println(obj);
    }
}

在程序中经常会用到字符串,在java中定义了String和StringBuffer两给类来封装字符串,并提供了一系列操纵字符串的方法,它们都位于java.lang包中,因此不需要导包就可以直接使用。String类是不可变类,也就是说String对象声明后,将不可修改(可以理解为字符串一旦创建就不可以修改)。

String的初始化

1.使用字符串常量直接初始化一个String|对象。
String [变量名] = "变量值";
2.使用String的构造方法初始化字符串对象
String() 创建一个内容为空的字符串
String(char[] value) 根据指定的字符数组创建对象。
String(String value) 根据指定的字符串内容创建对象
代码示例:

public class StringDemo1 {
    public static void main(String [] args) {
        String str1 = "sunxiaoning";//使用字符串常量直接初始化一个String|对象。
        String str2 = new String();//创建一个内容为空的字符串
        char ch[] = {'s','x','n'};
        String str3 = new String(ch);//根据指定的字符数组创建对象。
        String str4 = new String("sunxiaoning");//根据指定的字符串内容创建对象
        //打印字符串
        sop(str1);
        sop(str2);
        sop(str3);
        sop(str4);
    }
    /*
     * 打印函数
     * */
    public static void sop(Object obj) {
        System.out.println(obj);
    }
}

String的常见操作

1.获取

int length() 返回此字符串的长度

char charAt(int index) 根据位置获取位置上某个字符。

int indexOf(int ch) 返回的是ch在字符串中第一次出现的位置。

int indexOf(int ch, int fromIndex) 从fromIndex指定位置开始,获取ch在字符串中出现的位置。

int indexOf(String str) 返回的是str在字符串中第一次出现的位置。

int indexOf(String str, int fromIndex) 从fromIndex指定位置开始,获取str在字符串中出现的位置。

int lastIndexOf(int ch) 返回此字符在此字符串中最后一次出现处的索引
代码演示:

public class StringDemo2 {
    public static void main(String [] args) {
        String str = "aabbccddeeff";
        sop("字符串的长度为"+str.length());
        sop("下标为5的字符是"+str.charAt(5));
        sop("第一次出现c的位置是"+str.indexOf('c'));
        sop("从第六个位置数,出现c的位置是"+str.indexOf('d',6));
        sop("第一次出现字符串cc的位置是"+str.indexOf("dd"));
        sop("最后一次出现cc的位置是"+str.lastIndexOf("cc"));
    }
    public static void sop(Object obj) {
        System.out.println(obj);
    }
}

2.判断

boolean contains(CharSequence cs) 判断此字符串中是否包含指定的字符序列

boolean isEmpty() 判断字符中是否有内容,原理就是判断长度是否为0,当且仅当字符串长度为0时返回true

boolean startsWith(String prefix) 判断此字符串是否以指定的字符串开始

boolean endsWith(String suffix) 判断此字符串是否以指定的字符串结尾

boolean equals(Object anObject) 将此字符串与指定字符串比较,判断字符串内容是否相同,复写了Object类中的equals方法。

boolean equalsIgnoreCase(String anotherString) 判断内容是否相同,并忽略大小写。
代码示例

public class StringDemo3 {
    public static void main(String []args) {
        String str1 = "aaaabbbbb";
        String str2 = "aabbcc";
        String str3 = "aAbbcc";
        sop("str1中是否包含aa"+str1.contains("aa"));
        sop("Str1的长度为0吗"+str1.isEmpty());
        sop("str1是以cc开头吗"+str1.startsWith("cc"));
        sop("str1是以bb结尾吗"+str1.endsWith("bb"));
        sop("str1的内容与str2相同吗"+str1.equals(str2));
        sop("str2的内容与str3相同吗(忽略大小写)"+str2.equalsIgnoreCase(str3));
    }
    public static void sop(Object obj) {
        System.out.println(obj);
    }
}

注意:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。所以,也可以用于对指定判断是否包含。而且该方法即可以判断,有可以获取出现的位置。

3.转换

将字符数组转成字符串
构造方法
String(char[])
String(char[],offset,count) 将字符数组中的一部分转成字符串。
静态方法
static String copyValueOf(char[])
static String copyValueOf(char[] data, int offset, int count)
static String valueOf(char[])
将字符串转成字符数组
-char[] toCharArray()
将字节数组转成字符串
String(byte[])
String(byte[],offset,count) 将字节数组中的一部分转成字符串
将字符串转成字节数组
byte[] getBytes()
将基本数据类型转成字符串
static String valueOf(int)
static String valueOf(double)
4.替换

String replace(oldchar,newchar) 将字符串中的oldchar替换成newchar
5.切割

String[] split(String regex) 根据参数regex将原来的字符串分割为若干子串
6.子串。获取字符串中的一部分。

String substring(int beginIndex) 返回一个新字符串,它包含字符串索引beginIndex后的所有字符。
String substring(int beginIndex,int endIndex) 返回一个新字符串,它包含此字符串中索引beginIndex到索引endindex之间的所有字符。
7.将字符串转成大写或则小写

String toUpperCase() 将字符串转成大写
String toLowerCase() 将字符串转成小写
8.将字符串两端的多个空格去除

String trim();
9.对两个字符串进行自然顺序的比较

int compareTo(string);

第一步:下载jdk

大家可以从官网上下载jdk(http://www.oracle.com/technetwork/java/javase/downloads/jdk-netbeans-jsp-142931.html),国外的网站,可能有点慢,所以小编为大家准备了另外的方式

大家可以关注小编的公众号(小宁博客),回复"jdk8"获得jdk8,想安装jdk7的话就回复“jdk7”,

小编的公众号名字也是小宁博客,大家可以关注一下哦。

第二步:安装jdk

首先:安装javaSE

根据提示,点击下一步按钮,直到安装完成。
2452175439.png

可以更改安装位置
651219736.png
3260324719.png
安装完成
2871547568.png

第三步,配置配置JAVA环境变量

1.右击此电脑,选择“属性”
2.选择“高级系统设置”
1121385247.png

3.选择“高级”,然后选择“环境变量”

2444838542.png
4.选择“新建”
2313990523.png
5.新建系统变量JAVA_HOME
变量名:JAVA_HOME
变量值:C:\\Program Files (x86)\Java\jdk1.8.0_45\JDK(jdk的安装路径)
1107909937.png

6.新建系统变量CLASSPATH(初学者可以不配置)
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
447904405.png

7.选择系统变量中变量名为“Path”的环境变量,win10中可以直接新建,插入一条记录。
变量名:Path
变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
627744927.png

点击确认,保存退出,完成。

8.点击“win+R“,在运行窗口里输入“cmd“

2261601238.png
9.回车后,在dos窗口里,输入“javac“

3854793108.png
显示上述画面,则安装与配置成功。

1.打开eclipse,选择windows
QQ截图20170825180612.png
2.选择preferences
360截图20170825180923010.jpg
3.逐级选中General下面的Appearance的Colors and Fonts
QQ截图20170825181220.png
4.找到basic
QQ截图20170825181456.png
5选中(双击)basic下面的Text Font
QQ截图20170825181558.png
6.在弹出的页面里就可以更改字体,字形以及字的大小。
QQ截图20170825181658.png
7.点击确定,退出即可。

查询目录中的内容:dir

命令含义:显示指定路径上所有文件或目录的信息
命令格式:dir 盘符:[文件名] [参数]
参数:
/s:显示当前目录及其子目录下所有的文件;
/p:分页显示,当屏幕无法将信息完全显示时,可使用其进行分页显示;
/b:只显示文件名和扩展名;
/w:宽屏显示,一排显示5个文件名,而不会显示修改时间,文件大小等信息。

建立目录:md

命令含义:建立目录
命令格式:MD 盘符

删除目录:rd

命令含义:删除目录
命令格式:rd盘符
注意:此命令只能删除空目录

切换目录:cd

命令含义:进入指定目录
命令格式:cd [路径]
注意:
cd为返回到根目录,cd/退回跟目录,cd..为返回到上一层目录

删除文件del

命令含义:删除文件
命令格式:del 盘符[文件名] [参数]
参数:
/p:在删除多个文件时对每个文件都显示删除询问

复制文件:copy

命令含义:复制文件
命令格式:copy[源目录或文件] [目的目录或文件]

建立目录:md

命令含义:建立目录
命令格式:md 盘符

退出dos命令行:exit

命令含义:退出dos命令行

关机命令:shutdown

命令含义:关机命令
命令格式: shutdown [参数]
参数:

-l 注销(不能与选项 -m 一起使用)
-s 关闭此计算机
-r 关闭并重启动此计算机
-a 放弃系统关机
-t 时间:设置关机倒计时

jQuery对象与DOM对象

通过Javascript获取到的是DOM节点,而通过jQuery获取到的节点是一个类数组对象。这个对象里面包含了DOM对象的信息,然后封装了很多操作方法,调用自己的方法html与css,得到的效果与标准的JavaScript处理结果是一致的,属于jQuery对象。jQuery是一个类数组对象,而DOM对象就是一个单独的DOM元素。
jQuery的优点:

 1.通过jQuery方法包装后的对象,是一个类数组对象。它与DOM对象完全不同,唯一相似的是它们都能操作DOM。
 2.通过jQuery处理DOM的操作,可以让开发者更专注业务逻辑的开发,而不需要我们具体知道哪个DOM节点有那些方法,也不需要关心不同浏览器的兼容性问题,我们通过jQuery提供的API进行开发,代码也会更加精短。

jQuery对象转化成DOM对象

方法一:因为jQuery对象也是一个数组结构,可以通过数组下标索引找到第一个元素,通过返回的钙元素对象。这里需要注意的一点是,数组的索引是从0开始的,也就是第一个元素下标是0。
比如:

var $div = $('div') //jQuery对象
var div = $div[0] //转化成DOM对象
div.style.color = 'red' //操作dom对象的属性 

方法二:通过jQuery自带的get()方法,jQuery对象自身提供一个.get() 方法允许我们直接访问jQuery对象中相关的DOM节点,get方法中提供一个元素的索引。
比如:

var $div = $('div') //jQuery对象
var div = $div.get(0) //通过get方法,转化成DOM对象
div.style.color = 'red' //操作dom对象的属性

DOM对象转化成jQuery对象

相比较jQuery转化成DOM,开发中更多的情况是把一个dom对象加工成jQuery对象。$(参数)是一个多功能的方法,通过传递不同的参数而产生不同的作用。如果传递给$(DOM)函数的参数是一个DOM对象,jQuery方法会把这个DOM对象给包装成一个新的jQuery对象。