考“完”了形式语言与自动机,写一个博客吧。
第一次写,写的比较乱,主要记录了从学习java开始的一些小小个人感悟与经验,希望能给大家带来帮助。
JDK
java版本指的就是JDK版本。
java主函数
public static void main(String[] args){
System.out.println("Hello world!");
}
println代表换行
print代表不换行
命名规范
还学到一招:Ctrl+S能快速保存
String属于引用数据类型
String s1="Hello world";
String可以和8种基本数据类型做运算,”+”代表连接(运算重载)
包的本质
学习java不可避免地用到了包,包的本质是创建不同的文件夹来保存类文件。
封装
之前不太懂各个专有名词,看过视频也只是了解了大概,上手操作才知道啥叫“封装”
private class ReadSquare{
private boolean myResult;//程序封装得很好,把这些属性保护起来了
private String fileName;
private int[][] square;
//通过这几个方法访问
public ReadSquare(String fileName) {
this.fileName=FileName;
}
boolean is() {
return myResult;
}
public int[][] getSquare() {
return square;
}
}
异常处理
Java异常处理主要通过5个关键字控制:
try、catch、throw、throws和finally
。
1.try的意思是试试它所包含的代码段中是否会发生异常;
2.而catch当有异常时抓住它,并进行相应的处理,使程序不受异常的影响而继续执行下去;
3.throw是在程序中明确引发异常;
4.throws的作用是如果一个方法可以引发异常,而它本身并不对该异常处理,那么它必须将这个异常抛给调用它的方法;
5.finally是无论发不发生异常都要被执行的代码
常用的有两种
try – catch – finally
try {
代码/可能有异常
}catch(Exception e) {
//捕获到异常
//1.当异常发生时
//2.系统将异常封装成Exception对象e,传递给catch
//3得到异常对象后,程序员,自己处理
//4.注意,如果没有发生异常catch代码块不执行
}finally{
//1.不管try代码块是否有异常发生,始终要执行finally
//2.所以, 通常将释放资源的代码,放在finally
}
throws
往上一级抛出
其中
JVM
处理方法很暴力,直接输出异常信息,然后退出程序
如果不写异常处理,默认是往上throws,所以会在控制台输出
throw例子
public void f2()throws Exception {
//创建了一个文件流对象
//1.这里的异常是一个FiteNotFoundExceptic编泽异常
//2.使用throws,抛出异常,让调用f2方法的调用者(方法)处理
//3. throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类
// ————————FileNotFoundException的父类是Exception
//4. throws 关键字后也可以是异常列表,即可以抛出多个异常
FileInputstream fis = new FileInputStream("d://aa. txt");
}
//有时候new不用声明变量形式
int [][] squrae=new int [row][col];
squrae=new int [row][col]; //均可
file.createNewFile();
**createNewFile()**函数一定会抛出一个异常,我们必须处理(try-catch或者throws)
BufferedWriter:
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
Git工作流程
Git使用:填写用户名和邮箱
Noodles@LAPTOP-UJ2IPI60 MINGW64 /d/Git/git_project (master)
$ git config --global user.name 'Mnoodles'
Noodles@LAPTOP-UJ2IPI60 MINGW64 /d/Git/git_project (master)
$ git config --global user.email '1824717102@qq.com'
之后建一个文件夹(lab1),初始化Git仓库
Noodles@LAPTOP-UJ2IPI60 MINGW64 /d/Git/git_project/lab1 (master)
$ git init
git上传文件
$ git status
#查看当前状态
$ git add hello.cpp
#添加hello.cpp到暂存区
$ git commit -m 'first hello.cpp'
#添加到仓库,''中的为解释说明
git修改文件
之后我对hello.cpp进行了修改,再使用 git status,发现hello.cpp变成了红色,代表已经修改过。
再 git add hello.cpp,又变成绿色,代表已经传到了暂存区
再 $ git commit -m ‘修改第一次’ ,又传到了仓库
git删除文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V56xW428-1652009160175)(C:\Users\Noodles\Desktop\大作业图片\git删除文件.png)]
git远程操作
#这是克隆
$ git clone https://github.com/ComputerScienceHIT/HIT-Lab1-120L020901.git
#从远端获取代码
#下面是建立连接
$ git remote add orgin https://github.com/ComputerScienceHIT/HIT-Lab1-120L020901.git
之后操作就是先暂存区,然后本地仓库,然后
$ git push -u origin master
但是这时候会报错,一般的做法是把.git的文件config改为如下
[remote "origin"]
url = https://用户名:密码@github.com/Mnoodles/test_git.git
但是github更新了规定,需要把密码部分换成
tokens
我去注册了一个
tokens
然后又试了一下,成功了,
感动
。(虽然可以直接拖动文件到网页上,根本用不太到git)
还有一种方法
就是添加ssh秘钥,相当于给自己的电脑做一个认证。
$ ssh-keygen -t rsa -C "1824717102@qq.com"
然后到github上设置下来就行了
再输入
$ ssh -T git@github.com
提示”Hi Mnoodles!..”表明成功。
Collection接口
List有序,Set无序
ArrayList在现阶段用得比较多
1.add:添加单个元素
2.remove:删除指定元素
3.contains:查找元素是否存在
4.size:获取元素个数
5.isEmpty:判断是否为空
6.clear:清空
7.addAll:添加多个元素
8.containsAll:查找多个元素是否都存在
9.removeAll:删除多个元素
Set
(HashSet底层是哈希表)
1.不可存放重复元素,可以存一个null
2.添加的顺序不等于取出的顺序
3.但是多次取出,每次取出的顺序是一样的
Iterator迭代器
实现了接口的集合类,都可以使用迭代器(好像底层是个链表?)
hasNext();//如果下面有元素,则返回true
next();//下移,且把下移以后那个位置的元素返回
//第一个元素就是用next()取,没有“取当前元素”这个指令
求凸包
1.穷举,任意两点确定一条直线,使其他的点都在直线的某一侧
2.分治,横坐标最大和最小的两点一定在凸包上,这两点形成的一条直线把凸包分为上凸包和下凸包,重复即可
3.Jarvis步进法,从最边上(最左,最右,最上,最下)开始,一步找一个点,每个点都是与原有线段夹角最小的那个点。
4.Graham扫描法
5.Melkman算法
(4,5懒得写了,以后补上)
for的遍历
for(Point temp:freePoint){//冒号的作用:遍历freePoint中每一个元素
}
构造函数(构造器)
(不得不说这实验的知识点,是真多啊)
public Person(String nameString)
{
this.name = nameString;
friends = new ArrayList<Person>();
}
析构函数
java很少提,因为java会自动帮助释放”new”的内容(但是c++就不会自动释放,通常在c++中,一个构造函数必定跟一个析构函数)
例子
public class FriendshipGraph {
private List<Person>peoples; //上面声明比较广泛
private Set<String>nameSet;
//构造函数
public FriendshipGraph(){
peoples = new ArrayList<Person>();//下面构造函数具体说明类型
nameSet = new TreeSet<String>();
}
}
先深搜索用递归(栈),先广搜索用队列
发现一个巨恐怖的事,java没有指针,编程时确实可以少想很多
GitHub项目上传
其实直接把文件夹拖到网页就行,但是.classpath和.project文件上传不了,所以我先改名,然后上传,然后再改回来,就可以了。
纯纯的OK,大概就是这些。