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 ...
Linux主要目录
简介
大部分Linux系统的主要目录和内容都遵循着FHS(文件系统层次结构标准)标准,但并不是所有的Linux系统都完全执行FHS标准。
在FHS中,所有的文件和目录都在跟目录“/”下,无论他们是否在同一物理设备中(例如不在同一硬盘中)。
目录结构
图表来自维基百科:
目录
描述
/
第一层次结构 的根、 整个文件系统层次结构的根目录。
/bin/
需要在单用户模式可用的必要命令(可执行文件);面向所有用户,例如: cat、 ls、 cp。
/boot/
引导程序文件,例如: kernel、initrd;时常是一个单独的分区[8]
/dev/
必要设备, 例如:/dev/null.
/etc/
特定主机,系统范围内的配置文件。关于这个名称目前有争议。在贝尔实验室关于UNIX实现文档的早期版本中,/etc 被称为*etcetera*, [9] 这是由于过去此目录中存放所有不属于别处的所有东西(然而,FHS限制/etc只能存放静态配置文件,不能包含二进制文件)。 [10] 自从早期文档出版以来,目录名称已被以各种方式重新称呼。最近的解释包括逆向首字母缩略词如: ...
GCC、GDB食用方法
GCC
1gcc -Wall -o test test.c
-o自定义目标文件
-Wall自动提示一些出错警告的信息
-L 链接一个库文件,-L.加上的点意义为将本目录文件作为查找库的根目录
GDB
在GCC编译时需要添加一个参数:
1gcc -ggdb3 -Wall -o test test.c
如无报错,即可启动GDB:
1gdb test
GDB指令
break 10在第十行设置断点。
break test在test函数处设置断点
s / step下一步
c / continue当程序在某一断点处停止后,用该指令可以继续执行,直至遇到断点或者程序结束
u / until 运行程序直到退出循环体
r / run运行
q / quit结束调试
p / print显示某个变量的值
p *array@len 输出数组
enable 恢复失效的断点
disable 使断点失效
clear 清除断点
bt / backtrace 查看堆栈信息
watch监测某变量或表达式,当发生变化时停止
Typora借助Gitee+PicGo-Core实现云图床
云图床搭建
2022.3.25更新:gitee搭的图床疑似寄了。已经改用阿里云oss。
这次我们选择的云图床的搭建是基于gitee。gitee服务器位于国内,避免了github被墙的等一系列问题。
新建仓库
(省略gitee账号创建的过程,如果这都不会,建议不要折腾了)我们看到gitee页面右上角那个加号,然后点击新建仓库。
然后输入你自己想要的仓库名称,路径会自动生成跟你仓库名称一样的名称,当然你也可以自己自定义路径名称。
勾选上开源和设置模板、Readme文件,省去后面初始化的步骤,即可创建好你的仓库。
密钥生成
点击你的头像,进入设置。
看到安全设置/私人密钥。
点击“生成新令牌”
填上上描述,勾选上“projects”,生成一串密钥。
注意:该密钥只会显示一次,注意好保存!!!
PicGO-Core配置
接下来我们就来配置PicGo-Core,至于为什么使用Core这种命令行版本,而不使用app这种带ui,是因为我不想在后台开多一个软件。
配置Typora
点击“文件” “偏好设置” “图像”。
将“插入图片时候…”修改为“上传图片”,接着将上传服务修改为" ...