Java刷题知识点随笔

interface

1.接口方法默认是public abstract的,且实现该接口的类中对应的方法的可见性不能小于接口方法的可见性,因此也只能是public的。

垃圾回收机制

java提供了一个系统级的线程,即垃圾回收器线程。用来对每一个分配出去的内存空间进行跟踪。当JVM空闲时,自动回收每块可能被回收的内存,GC是完全自动的,不能被强制执行。程序员最多只能用System.gc()来建议执行垃圾回收器回收内存,但是具体的回收时间,是不可知的。当对象的引用变量被赋值为null,可能被当成垃圾。

封装的基本类型

1
2
Integer.valueOf(10) == Integer.valueOf(10); // true
Integer.valueOf(1000) == Integer.valueOf(1000); // false 为什么呢?

调用Integer的valueOf()方法,如果int在-128和127之间的时候,会直接使用jvm中缓存的数组 Integer(也就是常量池)中的对象引用,否则使用new一个 Integer 对象。所以导致两个Integer是两个不同的对象了哦。关于封装类型的比较要用equals哦!

String里的方法

String里的返回值为String类型的方法,都需要一个String变量来接收,因为String类型是不可变的

1
2
String str = "hello";
str = str.replace('h','H');

'\0'代表ASCII码中的NULL;

SE

变量

实例变量/成员变量(堆区):也叫对象变量、类成员变量;从属于类由类生成对象时,才分配存储空间,各对象间的实例变量互不干扰,能通过对象的引用来访问实例变量。但在Java多线程中,实例变量是多个线程共享资源,要注意同步访问时可能出现的问题。

静态变量/类变量(方法区):也叫静态变量,是一种比较特殊的实例变量,用static关键字修饰;一个类的静态变量,所有由这类生成的对象都共用这个类变量,类装载时就分配存储空间。一个对象修改了变量,则所以对象中这个变量的值都会发生改变。

局部变量(栈区):方法中或者某局部块中声明定义的变量或方法的参数被称为局部变量,他们只存在于创建他们的block里({}之间)无法在block外进行任何操作,如读取、赋值。在Java多线程中,每个线程都复制一份局部变量,可防止某些同步问题发生。

1631103800490-屏幕截图 2021-09-08 202155

位运算

**与运算符(&):**两侧既可以是boolean表达式也可以是数字

1
2
3
4
4&7  
4: 0000 0100
&7: 0000 0111
==: 0000 0100(4)

短路与(&&):两侧只能是boolean表达式

1
2
3
4
5
6
7
8
int i = 0;
if(3<2 && i++ < 2){
i = i+1;
Sustem.out.println(i);
}

//输出: i = 1;
//因为短路与只要左侧为false后面第二个表达式就不会计算,而&运算符前后两个表达式都会计算

或运算符(|):

1
2
3
4
5|9
5: 0000 0101
|9: 0000 1001
==: 0000 1101(13)

短路或(||):

1
//对比&和&&的区别同理。

异或运算(^):

1
2
3
4
7^15
7: 0000 0111
15: 0000 1111
^=: 0000 1000(8)

取反运算(~): 按位取反

左移:<<(等价于*2)

1
2
12<<2 : 左移两位(*2*2),空位补0
0000 1100 -> 0011 0000(48)

右移:>>(等价于除2)

1
2
12>>2 : 右移两位(/(2*2)),空位:负数补1,正数补0
0000 1100 -> 0000 0011(3)

无符号右移:>>>

1
在移动位的时候与右移运算符的移动方式一样的,区别只在于补位的时候不管是负数还是正数,都补0