一、打好基础才能百战不殆
二、Java基础
《Java核心技术 卷1》
链接:云盘链接
提取码:od5r
数据类型长度:
- (1) byte
- (1) char
- (2) short
- (4) int
- (4) float
- (8) long
- (8) double
-
boolean 单独使用占4个字节(当int处理),数组使用占1个字节(当byte处理)
浮点数采用二进制系统表示,无法保证精度。
Math类的使用:
import static java.lang.Math.*;
sqrt(PI); //直接使用
不存在<<<运算符,注意结合性决定计算优先级。
String str = String.join("/","a","b"); // a/b
==作用于字符串时用于比较两个字符串是否放置在同一个位置上。(只有字符串常量是共享的)
if( str != null && str.length() !=0 ) //字符串判断
StringBuffer线程安全、StringBuilder线程不安全。
Scanner scanner = new Scanner(System.in);
不能在嵌套的两个块中声明同名的变量。
Biglnteger 类实现了任意精度的整数运算 ,BigDecimal 实现了任意精度的浮点数运算。(add/subtract/multiply/divide/mod/compareTo/valueOf)
Arrays.toString(array); Arrays.copyOf(array,length);
Arrays.sort(array);
依赖(use-a B类关联A类的属性)、聚合(has-a B类中包含A类的对象)、继承(is-a B类继承A类)。
构建对象时必须初始化final域。(必须确保在每一个构造器执行之后 , 这个域的值被设置)
private final String name;
private String sex;
private int age;
public Main(String name,String sex){
this.name = name;
this.sex = sex;
}
static(静态域)属于类,不属于任何对象;静态方法可以访问自身类的静态域。
方法得到的是所有参数值的一个拷贝,方法不能修改传递给它的任何参数变量的内容。值传递分为值调用和引用调用,对象引用是按值传递的。
- 一个方法不能修改一个基本数据类型的参数 ( 即数值型或布尔型 )
- 一个方法可以改变一个对象参数的状态
- 一个方法不能让对象参数引用一个新的对象
如果对象无构造函数,则数值类型默认为 0 、布尔类型默认为 false、对象引用默认为 null 。
this关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。(this.属性名、this.方法名、this( )访问构造方法)
Java访问控制符:
图2-1 Java访问控制符.png 虚拟机预先为每个类创建了一个方法表(method table),其中列出了所有方法的签名和实际调用的方法。在调用方法的时候,虚拟机仅查找这个表就行了。
在覆盖一个方法的时候,子类方法不能低于超类方法的可见性。
阻止继承:使用final修饰类和方法。
包含一个或多个抽象方法的类本身必须被声明为抽象的(用abstract声明的方法不用实现,在子类中实现);抽象类不能被实例化,只能引用非抽象子类的对象。
Object是所有类的超类,Object类的equals方法判断两个对象是否具有相同的引用。子类重写equals方法根据实际情况可以使用instanceof检测、getClass检测;hashCode方法,散列码(hash code)是由对象导出的一个整形值(equals()和hashCode()必须同时重写);Object超类的toString()方法用于输出对象所属类名和散列码(getClass().getName())。
泛型数组列表-ArrayList:
- void ensureCapacity(int capacity) // 确保数组列表在不重新分配存储空间的情况下就能够保存给定数量的元素
- void trimToSize() // 将数组列表的存储容量削减到当前尺寸
对象包装器类是不可变的,用final修饰,无子类;自动装箱 & 自动拆箱。装箱和拆箱是编译器默认,而不是虚拟机。
ArrayList<Integer> list = new ArrayList<>();
/* list.add(Integer.valueOf(3)) */
list.add(3);
参数变量可变使用...;枚举enum。
反射:能够分析类能力的程序。【多实践】
- 运行时分析类的能力
- 运行时查看对象
- 编写泛型数组代码
- 调用任意方法
getClass()返回一个Class类型的实例
Class的getName()方法返回类的名称
Class的静态方法forName(className)获得类名称对应的Class对象
一个Class对象实际表示的是一种类型,而这个类型未必是一种类
可以利用 == 运算符比较两个类对象
Class的newInstance()方法可以动态创建一个类的实例
newInstance()方法调用默认的构造器(没有参数的构造器)初始化新创建的对象;如果这个类没有默认的构造器,就会抛出一个异常。
Main e = new Main();
Class test = e.getClass();
System.out.println(test.getName());
Class test2 = Class.forName("Main");
System.out.println(test2.getName());
Class test3 = Random.class;
Class test4 = int.class;
Class test5 = Double[].class;
boolean flag = (test == Main.class);
Main test6 = e.getClass().newInstance();
Object obj = Class.forName("Main").newInstance();
对象克隆(浅拷贝 & 深拷贝)
lambda表达式
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
内部类
代理
如果在子类中覆盖了超类的一个方法,子类方法中声明的受查异常不能比超类方法中声明的异常更通用( 也就是说子类方法中可以抛出更特定的异常 ,或者根本不抛出任何异常 )。
创建异常类:定义一个派生于Exception 的类,或者派生于 Exception 子类的类 。
如果想传递一个异常,就必须在方法的首部添加一个throws说明符,以便告知调用者这个方法可能会抛出异常。
高级日志-Logger
Logger logger = Logger.getLogger("className");
泛型类 | 泛型接口 | 泛型方法
类型擦除:无论何时定义一个泛型类型,都自动提供了一个相应的原始类型,原始类型的名字就是删去类型参数后的泛型类型名。擦除类型变量并替换为限定类型(无限定的变量用Object)。
Collection和Map。
三、Java Web
四、Java进阶
date // 显式日期时间
cal // 显式日历
df //磁盘剩余空间数量
free // 空闲内存数量
exit //关闭终端
Ctrl+Alt-F1~F6 // 切换终端
Alt+F1~F7 // 回到终端
pwd // 显示当前目录名
cd // 切换目录
ls // 列出目录内容 (注意 ..和. & ls ~ /home)
file filename // 确定文件类型
less filename // 浏览文件内容 q退出
cp filename destination // 复制文件和目录
mv filename destination/newFileName // 移动/重命名文件和目录
mkdir directory // 创建目录
rm filename/directory // 删除文件和目录
ln file link // 创建硬链接
//一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联 与链接本身不在同一个磁盘分区上的文件。
//一个硬链接不能关联一个目录
ln -s file link // 创建符号链接
type command // 说明怎样解释一个命令名
which command // 显示会执行哪个可执行程序
help command // 得到 shell 内建命令的帮助文档
command --help // 显示用法信息
man command // 显示程序手册页
apropos command // 显示适当的命令(搜索)
whatis command // 显示非常简洁的命令说明
info command // 显示程序 Info 条目
alias name = 'string' //创建别名
//eg:alias foo='cd /home/luffy/Desktop;ls -al'
unalias name // 删除别名
alias // 显式环境中的别名
重定向 ">"//eg:ls -al > a.txt
//当我们使用 “>” 重定向符来重定向输出结果时,目标文件总是从开头被重写。
[> filename] // 清空一个文件内容(或者创建一个新的空文件)
">>"重定向
把重定向结果追加到文件内容后面,而不是从开头重写文件。
标准错误重定向(输出错误信息)
//eg:ls -al &> a.txt
处理不需要的输出-重定向输出结果到一个叫做”/dev/null”的特殊文件(位存储桶)
//eg:ls -al lnnn > /dev/null
cat filename // 读取一个或多个文件,然后复制它们到标准输出
eg:cat movie.mpeg.0* > movie.mpeg(连接多个文件)
cat > filename // 创建简易文本文件(ctrl+d)
管道线 " | ":一个命令的标准输出可以通过管道送至另一个命令的标准输入。
sort // 管道中使用,产生一个 有序列表。
uniq // 管道中使用,忽略重复行。( uniq -d,现实重复数据)
wc filename // 打印行数、字数和字节数(wc -l,选项限制只输出打印行数)
grep pattern [file...] // 打印匹配行("-i" 使得grep在执行搜索时忽略大小写,"-v" 选项会告诉 grep 只打印不匹配的行)
head/tail -n number filename // 打印文件开头部分/结尾部分
tail -f filename // 持续监测这个文件(ctrl+c)
tee // 从标准输入读入数据,并且同时复制数据 到标准输出(允许数据继续随着管道线流动)和一个或多个文件。
//eg:ls /usr/bin | tee ls.txt | grep zip
echo-相关用法
clear
history
id - 查看身份信息
chmod 777 filename // u g o r w x
su -
chown [owner][:[group]] filename - 更改文件所有者和用户组
passwd [user]
ps x | aux
top
xlogo
kill
gedit fileName
source filename //激活修改
vim
MAC帧格式.png IP数据报.png IP地址分类.png 子网掩码.pngTCP/IP详解
netstat -in // 显式系统接口信息
ifconfig
ARP协议.png ICMP报文.pngARP-根据IP地址获取MAC地址
ping / traceroute
网友评论