初学java感悟

  • Post author:
  • Post category:java


考“完”了形式语言与自动机,写一个博客吧。

第一次写,写的比较乱,主要记录了从学习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,大概就是这些。



版权声明:本文为N1824717102原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。