Git入门笔记(2):远程仓库
Git入门笔记(二)
远程仓库
克隆项目到本地
很简单,git clone <url>在url填入远程仓库的地址就可以clone到本地了,url处有两种地址,一种是通过SSH进行克隆,另外一种是通过HTTPS的方式进行克隆。
上面为SSH的方式,下面为HTTPS的方式。
初始化远程仓库
HTTPS
以GitHub为例子,具体账号与仓库创建不再赘述。
仓库创建好了之后,我们看到我们的仓库是没有初始化的,GitHub页面上会出现一个初始化的教程。
我们照着教程上初始化即可,简单来说,它的初始化过程就是,先生成一个README.md,接着创建一个本地仓库,提交README.md到本地仓库,然后将本地仓库推送到远程仓库,即可完成初始化。
配置SSH
Git支持多种协议,其中包括SSH,SSH速度相当不错,比HTTPS效果更佳。我们来配置一下SSH。
第一步,我们检查一下电脑上是否已经存在SSH Key。
12cd ~/.sshls
如果显示出存在id_rsa.pub或 id_dsa.pub文件时,则证明已经存在SSH Key,可以跳过第二步。
第二步,创建SSH Key。
1 ...
Git入门笔记(1):基本知识与基本操作
Git入门笔记(一)
Git是一个非常常用的版本控制软件,很多被广泛使用的软件项目都是使用Git进行版本控制的。
本教程将不包括基础的安装流程。
Git文件的三种状态
使用Git进行操作软件时,文件状态有三种:
状态
描述
已提交(committed)
表示文件已经保存在本地Git库中。
已修改(modifiled)
表示文件已修改,但暂未保存到Git库中。
已暂存(staged)
表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
由于Git提交文件到Git库时,并不是直接从工作区直接到Git库的,中间存在一个暂存区(staging area),这个过程的文件就被称之为已暂存。
Git项目的三个工作区域
针对Git文件的三种状态,Git项目分为三个区域:
区域
描述
工作区
简单来说就是本地看到的目录。
暂存区(stage / index)
一般存放在.git目录下,里面包含了Git自动创建的第一个分支master,以及指向master的一个指针HEAD。
Git仓库(版本库)
工作区下隐藏的目录.git,是Git的 ...
Java笔记(7):反射
反射
据我们所知,Java是一种静态语言。但是Java却可以通过Reflection(反射)实现动态语言的特性,反射机制允许在执行期间借助Reflection API取得任何类的内部信息,并且能直接操作任意对象的内部属性及方法。
反射对象相当于是一面镜子,通过镜子,"反射"得到对象的信息:某个类的属性、方法、构造器、实现的接口。
获得反射对象
通过对象获得
1Class c1 = person.getClass();
通过forname获得
1Class c2 = Class.forName("cn.icewindy.test.Person");
通过类名.class获得
1Class c3 = Person.class;
验证一下:
1System.out.printf("c1:%s,c2:%s,c3:%s\n", c1.hashCode(), c2.hashCode(), c3.hashCode());//output:c1:295530567,c2:295530567,c3:295530567
基本内置类型的包装类都有一 ...
Java笔记零碎补充(1):大数、用var声明局部变量、字符串
大数
当基本的整数和浮点数精度不能够满足你的需求的时候,我们就可以引入在java.math包中的两个类——BigInteger和BigDecimal。这两个类可以处理任意长度的数值。
BigInteger类可以处理任何精度的整数运算,而BigDecimal类可以处理任何精度的浮点数运算。
它们的使用方法非常简单:
12BigInteger bi = new BigInteger("...");//大整数BigDecimal bd = new BigDecimal("...");//大浮点数
bi / bd处可以填入任意你想叫的名字,当然,最好还是尊重一下命名规则,除非你想让你的代码无人能够流畅阅读,甚至是刚睡了一觉的你。而...处是填入你想要的给bi / bd赋的数值。
我们也可以使用静态的valueOf方法将普通的数转换为大数,就像这样:
1BigInteger bi = BigInteger.valueOf(100);//100这里可以改成别的数或者是变量
由于大数不是基础数据类型,我们就无法使用熟悉的算数运算符来处理大数,而是应该使用大数类 ...
Java笔记(6):注解
注解
注解就是带有一定功能的注释。
内置的注解
@Override
该注解我们在前面的学习中也见到过多次了,这个注解是声明下面的方法重写了超类中的方法,如果注解下面的方法没有重写超类中的方法,则编译器报错。
@Deprecated
这个注解表示该程序元素是不鼓励使用的,因为通常的,它是危险的,或者是已经存在更好的替代方法。该注解会使编译器在出现该程序元素的代码处发出警告。
@SuppressWarnings("…")
镇压警告。
它与前面两种注解不太相同,这个注解需要一个参数。
SuppressWarnings常用的参数的表格:
参数
说明
deprecation
使用了不赞成使用的类或方法时的警告
unchecked
执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。
fallthrough
当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。
path
在类路径、源文件路径等中有不存在的路径时的警告。
serial
当在可序列化的类上缺少 serialVersio ...
Java笔记(5):抽象类、接口、内部类
面向对象(三)
抽象类
抽象类用abstract进行修饰。
在前面的学习我们知道,所有的对象都是通过类来描绘的,但是不是所有的类都是用来描述对象的,如果一个类中没有足够的成员来描绘一个具体的对象,那这个类就是抽象类。
简而言之,抽象类里面可以什么东西都不用去实现,只留有一个大概的框架,作为对后面继承的子类的约束。
抽象类里面可以有正常的方法,也可以有用abstract修饰的抽象方法,抽象方法也同样是可以不去实现的。
实际上受限于Java只能单继承,抽象类使用并不如接口常见。
总结一下,抽象类的特点:
抽象类无法实例化,也就是无法new出来,它需要靠子类去实现它;
子类继承抽象类需要实现抽象类内的内容,除非子类也是个抽象类;
抽象类里可以写普通方法,但是抽象方法必须在抽象类中;静态方法,也就是被static修饰的方法,不能被声明为抽象方法;
抽象类含有构造器,是为了被子类继承,子类必须调用父类构造器。
例子
Demo:
1234567public class Demo { public static void main(String[] args) { ...
Java笔记(4):继承、多态
面向对象(二)
继承
在前面的学习我们可以知道,类是对某一批对象的抽象,而继承的本质是对某一批类的抽象,类比于现实世界中对动植物进行界门纲目科属种的逐级分类。
子类(派生类)是父类(基类)的拓展,子类继承父类,我们用extends这个关键词表示继承的关系。(extends v.拓展)子类与父类之间具有一个is的关系,比如学生(子类)是人(父类)。
子类可以继承父类所有public的属性与方法,而父类private的属性与方法,子类是无法继承的。当我们需要让子类继承父类的属性与方法,且又不被继承关系以外的访问到的时候,我们就需要用到protected关键词,让子类能够继承父类使用protected的属性与方法。
在Java里,所有的类,都默认直接或者间接继承了Object类。
注意,在Java里,只有单继承,无多继承,一个子类只能有一个父类。
tips:在IDEA里,ctrl+h快捷键可以打开继承树,可以很直观看到继承关系。
例:
main:
123456789101112131415public class test { public static void main(S ...
Java笔记(3):静态方法与非静态方法、参数传递、构造器、封装
面向对象(一)
**本质:**以类的方式组织代码,以对象的方式封装数据。
static
static修饰词所修饰实际上是类的方法或属性,而无static关键词修饰的是在实例化类后,即对象出现后才出现的。
静态方法 \ 非静态方法
非静态方法的调用需要先实例化这个类,再进行调用。
Demo1:
12345678910package cn.icewindy.test;public class Demo1 { public static void main(String[] args) { Demo2 demo2 = new Demo2(); demo2.out1();//非静态方法的调用1 new Demo2().out1();//非静态方法的调用2 Demo2.out2();//这是静态方法的调用 }}
Demo2:
12345678910package cn.icewindy.test;public class Demo2 { public void out1(){ System.out.println(&quo ...
Java笔记(2):数组、三元运算符
数组
声明数组变量
12dataType[] array; // 首选的方法dataType array[]; // 效果相同,但不是首选方法
创建数组
1array = new dataType[arraySize];
创建数组时做了两件事:
使用dataType[arraySize]创建了一个数组。
把新创建的数组的引用赋值给变量 array。
我们也可以讲声明与创建数组合二为一:
1dataType[] array = new dataType[arraySize];
还可以使用下面方法来创建数组:
1dataType[] array = {value0, value1, ..., valuek};
数组拷贝
123int[] firstArray = {10,20,30,40,50};int[] secondArray = firstArray;secondArray[1] = 10;//此时,firstArray[1]的值也变成了10
这种拷贝方式会将两个变量引用到同一个数组。
如果我们希望的是将一个数组的所有值拷贝到一个新 ...
Java笔记(1):进制表示、Equals、For each循环、方法基础
进制表示
二进制0b 十进制 八进制0 十六进制0x
例:
123int i = 10;int i2 = 010; //八进制0 int i3 = 0x10; //十六进制0x
out:
110 3 16
Equals
.equals方法可以用来判断字符串是否相等。
例:
1234String str = "Hello";if(str.equals("Hello")){ //判断str是否与Hello相等 ...}
For each循环
for each element in a:循环A中的每一个元素。
主要用于数组或集合的增强型for循环。
例:
12345678910int[] nums = {10, 20, 30};//For eachfor(int x: nums){//遍历数组元素 System.out.println(x);}//下面是用普通的for表示for(int i = 0; i < 3; i++){ System.out.prin ...