Git
初始化仓库
git init命令把这个目录变成git可以管理的仓库
$ git init
初始化了一个空的仓库,目录下多了.git目录
系统自动创建了唯一一个master分支
文件的基本操作
创建一个test.txt文件,内容如下:
Hello World
1、添加文件到仓库
$ git add test.txt
2、提交文件到仓库
$ git commit -m "a new file"
1. 查看状态
$ git status
2.撤销修改
1)丢弃工作区的修改 git checkout -- file
$ git checkout -- test.txt
命令git checkout -- test.txt意思就是让这个文件回到最近一次git commit或git add时的状态。
2)把暂存区的修改撤销掉(unstage),重新放回工作区 git reset HEAD <file>:
$ git reset HEAD test.txt
Unstaged changes after reset:
M test.txt
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
3.删除文件
工作区中删除文件
$ git rm test.txt
一是要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
$ git rm test.txt
$ git commit -m "remove test.txt"
二是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt
分支
创建分支 git branch <name>
切换分支 git checkout <name>
查看分支 git branch
合并某个分支到当前分支 git merge <name>
删除分支 git branch -d <name>
1)远程仓库(码云)
2)推送分支
将本地master分支推送到远程库
如果不推送到远程,本地分支对于其它人就是不可见的
$ git push origin master
3)抓取分支
如果本地分支推送到远程库的文件有冲突,推送失败,我们就得先从远程库中抓取最新的提交合并到本地,解决冲突再提交。
$ git pull
如果git pull报错:没有指定本地分支与远程分支的链接,我们就要手动设置一下
git branch --set-upstream-to=origin/<远程分支名> 本地分支名
4)Rebase
rebase操作可以把本地未push的分叉提交历史整理成直线;
目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。$ git rebase
异常处理
异常概述
程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常
Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。
Throwable又派生出Error类和Exception类。
错误:Error类以及它的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。
异常:Exception以及它的子类,代表程序运行时发生的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。
常见异常
java.lang.RuntimeException: 运行时异常
ClassCastException: 类类型转换异常,当试图将对象强制转换为不是实例的子类时,抛出该异常;
ArrayIndexOutOfBoundsException: 数组下标越界异常,当你使用不合法的索引访问数组时会抛出该异常;
NullPointerException: 空指针异常,通过null进行方法和属性调用会抛出该异常;
ArithmeticException: 算术运算异常,除数为0,抛出该异常;
NumberFormatException: 数字转换异常,当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常;
InputMismatchException: 输入不匹配异常,输入的值数据类型与设置的值数据类型不能匹配。
在编写代码处理异常时,对于检查异常/非检查异常,都有2种不同的处理方式:
1、使用try...catch...finally语句块处理它。
语法格式:
try{
...... //可能产生异常的代码
}
catch( ExceptionName1 e ){
...... //当产生ExceptionName1型异常时的处置措施
}
catch( ExceptionName2 e ){
...... //当产生ExceptionName2型异常时的处置措施
}
[ finally{
...... //无论是否发生异常,都无条件执行的语句
} ]
语法解释:
try:
捕获异常的第一步是用try{…}语句块选定捕获异常的范围,将可能出现异常的代码放在try语句块中。
如果发生异常,则尝试去匹配catch块,catch块可以有多个(因为try块可以出现多个不同类型异常);
如果执行完try不管有没有发生异常,则接着去执行finally块和finally后面的代码(如果有的话)。
catch (Exceptiontype e):
在catch语句块中是对异常对象进行处理的代码。每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。
每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。Java可以将多个异常声明在一个catch中。 catch(Exception1 | Exception2 | Exception3 e)
catch后面的括号定义了异常类型和异常参数。如果异常与之匹配且是最先匹配到的,则虚拟机将使用这个catch块来处理异常。
在catch块中可以使用这个块的异常参数来获取异常的相关信息。异常参数是这个catch块中的局部变量,其它块不能访问。与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。
①、getMessage() 获取异常信息,返回字符串。
②、printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally,然后到这个函数的外部caller中去匹配异常处理器。
如果try中没有发生异常,则所有的catch块将被忽略。
注意:如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可以用其父类作为catch的参数。比如:可以用 ArithmeticException 类作为参数的地方,就可以用RuntimeException类作为参数,或者用所有异常的父类Exception类作为参数。但不能是与ArithmeticException类无关的异常,如NullPointerException(catch中的语句将不会执行)。
finally:
finally块通常是可选的。捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。
不论在try代码块中是否发生了异常事件,catch语句是否执行,catch语句是否有异常,catch语句中是否有return,finally块中的语句都会被执行。
一个try至少要有一个catch块,否则, 至少要有1个finally块。但是finally不是用来处理异常的,finally不会捕获异常。
finally主要做一些清理工作,如流的关闭,数据库连接的关闭等。
2、在函数签名中使用throws 声明交给函数调用者caller去解决。
throws和throw的区别:
throw是语句抛出一个异常。
语法:throw (异常对象);
throw e;
throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)
语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{......}
public void doA(int a) throws Exception1,Exception3{......}
throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。
throws出现在方法函数头,表示在抛出异常,由该方法的调用者来处理。
throws主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常。
throw是具体向外抛异常的动作,所以它是抛出一个异常实例。
throws说明你有那个可能,倾向。
throw的话,那就是你把那个倾向变成真实的了。
两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
按照国际惯例,自定义的异常应该总是包含如下的构造函数:
一个无参构造函数
一个带有String参数的构造函数,并传递给父类的构造函数。
一个带有String参数和Throwable参数,并都传递给父类构造函数。
一个带有Throwable 参数的构造函数,并传递给父类的构造函数。
输入输出
一.定义
1.输入(Input)输出(Output)—— IO 流
输入流:以电脑为参考系,从外部向程序或电脑中输入一个数据,称之为输入流。
输出流:以电脑/程序向外输出一个数据,称之为输出流。
2.系统输入输出 —— 标准输入输出
标准输出——显示器System.out 这是Java中的标准输出对象。
标准输入——键盘System.in这是Java默认的。
默认输出是输出到控制台。
3.使用java.io.BufferedReader和java.io.InputStreamReader:
步骤:
(1)使用http://java.io包。 import java.io.*;
(2)构造 BufferedReader类对象,它附属于标准输入流System.in。
BufferedReader br = new BufferedReader(new InputStreamReader
二.常用的输出方法
1.println()
() 中传递任意数据类型,多个类型使用 “+” 拼接,输出内容后自带换行符。
2.print()
() 中任意数据类型,多个类型使用 “+” 拼接。
3.printf()
和c语言一样的格式化输出。
System.out.write(2222);//字节输出
System.out.printf("%+8.3f\n", 3.14);//按格式输出