目录
如果一个接口Glass有个方法setColor(),有个类BlueGlass实现接口Glass,则在类BlueGlass中正确的是? ( )
对于非运行时异常,程序中一般可不做处理,由java虚拟机自动进行处理。
URL u =new URL("http://www.123.com");。如果www.123.com不存在,则返回______。
ArrayList和Vector主要区别是什么?
正确答案: A 你的答案: A (正确)
Vector与ArrayList一样,也是通过数组实现的,不同的是Vector支持线程的同步
Vector与ArrayList一样,也是通过数组实现的,不同的是ArrayList支持线程的同步
Vector是通过链表结构存储数据,ArrayList是通过数组存储数据
上述说法都不正确 来源:https://www.nowcoder.com/questionTerminal/0953369f92054cbfbf1024a1e723e04f
Vector & ArrayList 的主要区别
1) 同步性:Vector是线程安全的,也就是说是同步的 ,而ArrayList 是线程序不安全的,不是同步的 数2。
2)数据增长:当需要增长时,Vector默认增长为原来一倍 ,而ArrayList却是原来的50% ,这样,ArrayList就有利于节约内存空间。
如果涉及到堆栈,队列等操作,应该考虑用Vector,如果需要快速随机访问元素,应该使用ArrayList 。
扩展知识:
1. Hashtable & HashMap
Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。
2. ArrayList & LinkedListArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别:
从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能; 而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
如果一个接口Glass有个方法setColor(),有个类BlueGlass实现接口Glass,则在类BlueGlass中正确的是? ( )
正确答案: C 你的答案: C (正确)
protected void setColor() { …}
void setColor() { …}
public void setColor() { …}
以上语句都可以用在类BlueGlass中
来源:https://www.nowcoder.com/questionTerminal/03afdc1f1b7b4728b58fcc2a8100efa5
两同两小一大
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。
对于非运行时异常,程序中一般可不做处理,由java虚拟机自动进行处理。
正确答案: B 你的答案: A (错误)
正确
错误
来源:https://www.nowcoder.com/questionTerminal/47662518c99c43dc8d2b6bf6bdb9ce39
学习博客:https://blog.csdn.net/qq_38150538/article/details/88842232
URL u =new URL("http://www.123.com");。如果www.123.com不存在,则返回______。
正确答案: A 你的答案: C (错误)
http://www.123.com
””
null
抛出异常
来源:https://www.nowcoder.com/questionTerminal/566c5439ab04493c9c683a01430d697e
我们在执行URL u =new URL("http://www.123.com");这句话的时候确实要抛出异常,但是这个异常属于IOException,不管网址是否存在,最后都会返回该网址的一个连接,打印出来就是该网址。
单例模式中,两个基本要点是
正确答案: A D 你的答案: A D (正确)
构造函数私有
静态工厂方法
以上都不对
唯一实例
来源:https://www.nowcoder.com/questionTerminal/3cf7b049074d4800bc257511ecb114be
什么是单例模式?
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
单例模式有分为饿汉式和懒汉式
特点:
- 1、单例类只能有一个实例。
- 2、单例类必须自己创建自己的唯一实例。
- 3、单例类必须给所有其他对象提供这一实例。
应用实例:
- 1、一个班级只有一个班主任。
- 2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。
- 3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。
优点:
- 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例)。
- 2、避免对资源的多重占用(比如写文件操作)。
缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。
使用场景:
- 1、要求生产唯一序列号。
- 2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
- 3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。
注意事项:getInstance() 方法中需要使用同步锁 synchronized (Singleton.class) 防止多线程同时进入造成 instance 被多次实例化。
单例模式-饿汉式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//单例模式-饿汉式
public
class
SingletonDemo {
public
static
void
main(String[] args) {
//编译错误:无法实例化
// Singleton singleton = new Singleton();
//正确获取对象的方法
Singleton singleton = Singleton.getINSTANCE();
singleton.hello();
}
}
class
Singleton{
//创建一个本身对象
private
static
final
Singleton INSTANCE =
new
Singleton();
//让构造方法为private,这样该类就不会被实例化
private
Singleton(){}
//创建一个获取对象的方法
public
static
Singleton getINSTANCE() {
return
INSTANCE;
}
public
void
hello(){
System.out.println(
"Hello World! ——单例模式-饿汉式"
);
}
}
1
Hello World! ——单例模式-饿汉式
单例模式-懒汉式(线程不安全版)
这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。
这种方式 lazy loading 很明显,不要求线程安全,在多线程不能正常工作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//单例模式-懒汉式
public
class
SingletonDemo2 {
public
static
void
main(String[] args) {
Singleton2 singleton = Singleton2.getInstance();
singleton.hello();
}
}
class
Singleton2{
private
static
Singleton2 instance;
private
Singleton2(){}
public
static
Singleton2 getInstance() {
if
(instance ==
null
){
instance =
new
Singleton2();
}
return
instance;
}
public
void
hello(){
System.out.println(
"Hello World! ——单例模式-懒汉式"
);
}
}
1
Hello World! ——单例模式-懒汉式
单例模式-懒汉式(线程安全版)
描述:这种方式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。
优点:第一次调用才初始化,避免内存浪费。
缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。
getInstance() 的性能对应用程序不是很关键(该方法使用不太频繁)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//单例模式-懒汉式
public
class
SingletonDemo3 {
public
static
void
main(String[] args) {
Singleton3 singleton = Singleton3.getInstance();
singleton.hello();
}
}
class
Singleton3{
private
static
Singleton3 instance;
private
Singleton3(){}
public
synchronized
static
Singleton3 getInstance() {
if
(instance ==
null
){
instance =
new
Singleton3();
}
return
instance;
}
public
void
hello(){
System.out.println(
"Hello World! ——单例模式-懒汉式"
);
}
}
1
Hello World! ——单例模式-懒汉式