JAVA-知识点总结(1)混淆点区别

JAVA面向对象中没有全局变量。实际上需要方法或者常量(constant)可被任何的程序存取。

equals() 返回的是比较的结果 如果相等返回true,否则false,比较的是对象的内存地址值。

instanceof方法 来做类型转换
if (objOne instanceof Person) {
p = (Person)obj;
}

hashCode() 返回该对象的哈希码值: 采用操作系统底层实现的哈希算法。 同一个对象的哈希码值是唯一的。

java规定如果两个对象equals返回true,那么这两个对象的hashCode码必须一致。

创建String对象两种方法

String str1 = “one”;
String str2 = new String(“two”);

StringBuffer和StringBuilder的区别
StringBuffer : 由于String是不可变的,所以导致String对象泛滥,在频繁改变字符串对象的应用中,需要使用可变的字符串缓冲区类。
特点:
1. 默认缓冲区的容量是16。
2. StringBuffer : 线程安全的所有的缓冲区操作方法都是同步的。效率很低。
StringBuilder 是JDK1.5之后提出的,线程不安全(不能同步访问),但是效率要高。用法与StringBuffer类似。

next() 与 nextLine() 区别

next():
1、一定要读取到有效字符后才可以结束输入。
2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
next() 不能得到带有空格的字符串。
nextLine():
1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白。

创建线程的方法 (1)

1.集成thread类
2.复写run方法
@Override
public void run() {
print();
}
3.使用start()方法启用线程

线程的状态

创建:新创建了一个线程对象。
可运行:线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取cpu的执行权。
运行:就绪状态的线程获取了CPU执行权,执行程序代码。
阻临时塞: 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。
死亡:线程执行完它的任务时。

创建线程的方法 (2)使用Runnabel接口

当多个线程完成功能需要同时获取多个共享资源的时候可能会导致死锁。
1:两个任务以相反的顺序申请两个锁,死锁就可能出现
2:线程T1获得锁L1,线程T2获得锁L2,然后T1申请获得锁L2,同时T2申请获得锁L1,此时两个线程将要永久阻塞,死锁出现

List: 有存储顺序, 可重复

ArrayList: 数组实现, 查找快, 增删慢
由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以查找时较快

LinkedList: 链表实现, 增删快, 查找慢
由于链表实现, 增加时只要让前一个元素记住自己就可以, 删除时让前一个元素记住后一个元素, 后一个元素记住前一个元素. 这样的增删效率较高但查询时需要一个一个的遍历, 所以效率较低

Vector:   和ArrayList原理相同, 但线程安全, 效率略低
          和ArrayList实现方式相同, 但考虑了线程安全问题, 所以效率略低

 Set: 无存储顺序, 不可重复

保留存储顺序, 并且保留重复元素, 使用List.
如果查询较多, 那么使用ArrayList
如果存取较多, 那么使用LinkedList
如果需要线程安全, 那么使用Vector

如果我们不需要保留存储顺序, 并且需要去掉重复元素, 使用Set.
如果我们需要将元素排序, 那么使用TreeSet
如果我们不需要排序, 使用HashSet, HashSet比
TreeSet效率高.
如果我们需要保留存储顺序, 又要过滤重复元素, 那么使用LinkedHashSet

抽象类可以有构造方法

虽然抽象类不能被实例化,但可以有构造函数。由于抽象类的构造函数在实例化派生类之前发生,可以在这个阶段初始化抽象类字段或执行其它与子类相关的代码。

什么是集合?与数组的区别是什么

存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式。

集合的出现就是为了持有对象。集合中可以存储任意类型的对象, 而且长度可变。在程序中有可能无法预先知道需要多少个对象, 那么用数组来装对象的话, 长度不好定义, 而集合解决了这样的问题。

数组和集合类都是容器。
数组长度是固定的,集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象数组中存储数据类型是单一的,集合中可以存储任意类型的对象。
用于存储对象,集合长度是可变的,可以存储不同类型的对象。

equals和Object.equals的区别

a.equals(b)中,如果a=null的话,会有空指针异常。
objects.equals(a,b)则可以避免这个异常。

使用 == 来比较两个数据类型,或者两个引用是否引用同一个对象。
使用equals()判断是否意义上相等。
GC线程是守护线程

所谓守护线程是指在程序运行的时候在后台提供一种通用服务的线程,这种线程并不属于程序中不可或缺的部分。当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。

守护线程和用户线程的没啥本质的区别:唯一的不同之处就在于虚拟机的离开:如果用户线程已经全部退出运行了,只剩下守护线程存在了,虚拟机也就退出了。 因为没有了被守护者,守护线程也就没有工作可做了,也就没有继续运行程序的必要了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值