Scanner

1
Scanner scanner = new Scanner(System.in);  

将控制台获取的信息用scanner对象容器进行接收,使用对象即可以操作输入信息

循环 break 和 continue

break 跳出循环,无下次循环

continue 终止当前循环,有下次循环

方法重载

同一个类终,方法名相同,参数列表不同

方法重写

子类继承父类时,对父类的方法进行重新覆写

方法名、返回值类型、形参相同;访问权限>=重写前;抛出异常<=重写前

可变参数

一个方法只能有一个可变参数

可变参数只能在末尾

1
(String str,String ... str1)

用 …表示

数组 数组的大小是不可变的

定义数组

1
2
int[] numbers = new int[4];
int numbers1[] = {1,2,3,4};

数组起始下标为0

堆栈

栈:声明的名字存在 栈中 main()方法是存在栈里面的,基本数据类型是存在栈中的

堆:new创建的时候开辟内存空间 也即对象是存在堆中的

构造器

  • 构造器的名字与类名相同,无返回值

  • 默认存在一个无参构造器,若存在一个有参构造器,则默认的无参构造器就不存在了

  • new方法时,本质是在调用构造器(首先调用父类的构造器,然后调用子类的构造器,且必须调用父类的构造方法)

  • 构造器的作用是初始化值

this与super

this:谁调用代表谁 super:代表父类

this() 调用本类的构造方法 super()调用父类的构造方法

抽象类

  • 抽象类的方法必须由其非抽象子类实现

  • 抽象类中可以有普通方法

  • 抽象类有构造方法,但是没有方法实现,也即不能使用new实例化,构造方法用来初始化

接口

  • 接口中的方法无实现

  • 接口中方法默认为public

  • 类实现接口 implements

  • 若实现的多个接口中存在多个相同的方法,则实现类中只会出现一个

  • 接口中的常量默认为 public static final

  • 接口中无构造方法

继承

子类继承了父类的所有方法和成员,但对私有的无权限调用

类 单继承,多实现;接口多继承

匿名内部类 new 接口

自动拆箱

当一个基础数据类型与封装类进行==、+、-、*、/运算时,会将封装类进行拆箱,对基础数据类型进行运算。

JDK 和 jre区别

  • JDK包含jre
  • JDK是面向开发人员使用的SDK,jre是Java Runtime Enviroment运行环境是面向java程序的使用者

== 和 equals 的区别

  • == 比较的地址
  • equals 比较的是值

hashCode()和equals()联系

  • hashcode()返回的是一个hash值,是为了方便查找
  • equals() 是用于比较
  • equals()比较为 true时,他们的hash值必定相同;equals()比较不同时,他们的hash值也可能相同(数据碰撞的情况)

hash碰撞

将任意长度的数据 经过算法 转为 一段有限长度的数据 (无穷转有限,必定会出现碰撞,对于我们用到的遇到碰撞却很小)

在集合中的应用(集合分为list、set,list有序可重复,set无序不可重复)

在set中保证不重复,首先会比较hash值,若hash值不同,则必定不重复;若hash值相同,则根据equals()比较,不同则不重复,相同则重复

Integer.toBinaryString()函数

将10进制以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
如果参数为负,该无符号整数值为参数加上 2^32;否则等于该参数。

位运算

^ 异或 相同为0,不同为1

&与 都为1则为1,不都为1则为0

|或 有一个为1则为1,否则为0

~非 为1则为0,为0则为1

<< 左移运算符 向左移位,最低位补0

例 -1010 <<1 -10100 1010 <<1 10100

>> 右移运算符 向右移位,去掉几个最低位,高位补0或者1与原整数正负有关

例 -1010 >>1 0101 1010 >>1 1101

>>> 无符号右移运算符 向右移位,去掉几个最低位,高位补0与原整数的正负无关

例 -1010 >>>1 0101 1010 >>> 0101

加法算法(使用位运算的算法)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public int Addfunction(int a ,int b) {

int i = 1;
while (b != 0) {
System.out.println("执行第"+ (i++) +"次" );
int _a = a ^ b;
System.out.println("a为:"+ Integer.toBinaryString(a));
System.out.println("b为:"+ Integer.toBinaryString(b));
System.out.println("_a为:"+ Integer.toBinaryString(_a));
int _b = (a & b) << 1;
System.out.println("a & b为:"+Integer.toBinaryString(a & b));
System.out.println("_b为:"+ Integer.toBinaryString(_b));
a = _a;
b = _b;

System.out.println("变化后的a为:"+ Integer.toBinaryString(a));
System.out.println("变化后的b为:"+ Integer.toBinaryString(b));
}

return a;

//_a表示进位的相加 _b 表示不进位的 相加
//递归执行 _a + _b 直到 不进位的相加不存在
}

进制转换

二进制转10进制

1
Integer.parseInt("101",2)

补位

1
String str = String.format("%010d", youNumber);

排序

1
2
3
4
5
6
7
Collections.sort(list,new Comparator<User>() {
@Override
public int compare(User user1, User user2) {
//此处可自定义比较逻辑
return user1.getAge().compareTo(user2.getAge());
}
});

优雅获取执行时间

1
2
3
4
5
6
7
8
StopWatch stopWatch = new StopWatch();
stopWatch.start("任务1");
stopWatch.stop();
System.out.println("该任务耗时为:"+stopWatch.getLastTaskTimeMillis());
stopWatch.start("任务2");
stopWatch.stop();
System.out.println("该任务耗时为:"+stopWatch.getLastTaskTimeMillis());
System.out.println("任务总数为"+stopWatch.getTaskCount()+"总耗时为:"+stopWatch.getTotalTimeSeconds());

计算时间差

1
long minutes = ChronoUnit.MINUTES.between(Instant.ofEpochMilli(date1.getTime()), Instant.ofEpochMilli(date2.getTime()));

注解

1
@PostConstruct

在bean被spring加载初始化之前执行

1
@PreDestroy

在bean被销毁前执行

1
@Qualifier

系统中存在同一类型的多个bean时,通过该注解来指定对应的bean

1
@SneakyThrows

lombok的注解,用于忽略抛出的异常