文章目录
JAVA基础
String相关
String StringBuffer StringBuilder区别
- | 是否可变 | 是否安全 |
---|---|---|
String | × | × |
StringBuilder | √ | × |
StringBuffer | √ | √ |
String可以被继承么
String类被final修饰,不可被继承
String为什么不可变
例:
String a="111";
System.out.println(a.hashCode());
a="222";
System.out.println(a.hashCode());
看似a的值发生了变化,但是打印a的hashCode发现
48657
49650
1.a已经不再是a,因为a的内存地址发生了变化,这就是String的不可变。String其实是一个char数组。
线程相关
创建线程
- 继承Thread类
- Thread类配合Runnable接口
- Thread类配合FutureTask
线程池参数
corePoolSize:核心线程数
maximumPoolSize:最大线程数
keepAliveTime:空闲线程存活时间
unit:空闲线程存活时间单位
workQueue:工作队列
threadFactory:线程工厂
handler:拒绝策略
sleep与wait的区别
sleep
指线程被调用时,占着CPU不工作,形象地说明为“占着CPU睡觉”,此时,系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制。
wait
指线程处于进入等待状态,形象地说明为“等待使用CPU”,此时线程不占用任何资源,不增加时间限制。所以sleep(100L)意思为:占用CPU,线程休眠100毫秒wait(100L)意思为:不占用CPU,线程等待100毫秒
基础概念
抽象类和接口的区别
(1)语法 抽象类以abstract关键词修饰 接口以interface关键词修饰
(2)接口全部方法都是抽象方法,属性都是常量。
(3)类只能单继承,接口可以多实现
权限修饰符(有权限打勾)
访问权限 | 当前类 | 当前包 | 子类 | 其他包 |
---|---|---|---|---|
public | ∨ | ∨ | ∨ | ∨ |
protect | ∨ | ∨ | ∨ | |
default(默认) | ∨ | ∨ | ||
private | ∨ |
基本数据类型,占用字节,取值范围
数据类型 | 占用字节 | 占用位数 | 取值范围 |
---|---|---|---|
byte | 1 | 8 | (-27)- (27-1) |
short | 2 | 16 | (-215)- (215-1) |
int | 4 | 32 | (-231)- (231-1) |
long | 8 | 64 | (-263)- (263-1) |
float | 4 | 32 | 精度为7-8位 |
double | 8 | 64 | 精度为15-16位 |
char | 2 | 16 | 0~65535 |
boolean | 1 | 8 | false/true |
final关键词
1.修饰类
当用final去修饰一个类的时候,表示这个类不能被继承。
a. 被final修饰的类,final类中的成员变量可以根据自己的实际需要设计为fianl。
b. final类中的成员方法都会被隐式的指定为final方法
2.修饰方法
被final修饰的方法不能被重写。
a. 一个类的private方法会隐式的被指定为final方法。
b. 如果父类中有final修饰的方法,那么子类不能去重写。
3.修饰成员变量
a. 必须要赋初始值,而且是只能初始化一次。
4.修饰成员变量
a. 必须初始化值。
b. 被fianl修饰的成员变量赋值,有两种方式:1、直接赋值 2、全部在构造方法中赋初值。
c. 如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。
d. 如果修饰的成员变量是一个引用类型,则是说这个引用的地址的值不能修改,但是这个引用所指向的对象里面的内容还是可以改变的。