Java笔记零碎补充(2):包装类、单例、代码块
包装类
包装类是针对八种基本数据类型定义相应的引用类型。
基本数据类型
包装类
byte
Byte
short
Short
int
Lnteger
long
Long
float
Float
double
Double
boolean
Boolean
char
Character
其中Byte Short Lnteger Long Float Double拥有一个父类Number。
包装类的出现,使得基本数据类型可以封装起来,作为一个类使用,完善了Java面向对象的特性。
包装类、基本数据类型、String相互转换
使用构造器将基本数据类型装箱
12345678Integer i1 = new Integer(1);System.out.println(i1.toString());//out:1Integer i2 = new Integer("1");System.out.println(i2.toString());//out:1Boolean b2 = new Boolean("true12 ...
Git入门笔记(3):分支管理
Git入门笔记(三)
分支管理
分支管理是Git中非常重要的管理,使用分支可以使你在开发主线中分离出来,在不影响开发主线的情况下继续工作,例如开发测试版、测试功能之类的。接下来介绍几个基础操作。
创建分支
现在我们需要创建一个叫test的分支,并切换至分支:
1git checkout -b test
实际上这是两条命令的简写:
12git branch testgit checkout test
第一条命令,代表创建一个test分支;
第二个命令,代表切换到test分支。
查看所有分支
我们使用不带任何参数的git branch命令即可查看所有分支,并且该命令会将当前分支用*号标注出来。
删除分支
1git branch -d test
这样我们就删除了test分支了。如果test分支包含我们未合并到分支的更改,它会报出错误:
12error: The branch 'test' is not fully merged.If you are sure you want to delete it, run 'git branch -D test' ...
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 ...