java概述和特性:
1.简单性:去掉了C/C++语言的一些复杂的特征
2.面向对象:用类,对象,属性,方法来描述和解决问题
3.分布式:网络应用,socket的套接字,分布式环境,一次编译到处运行
4.健壮性语言:强类型语言,不支持指针和异常处理
4.1.强类型语言指的是说一个很简单的例子,程序提示“输入数字”,而用户实际上输入了abc或中文,如果程序是提示用户再输入数字,那是比较健壮;相反,如果程序是非法终止了,那自然就是不健壮了。
4.2脑补一些的别的知识点 单例模式 单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。举个例子windows回收站就是单例模式
1.懒汉写法 常用写法
class
LazySingleton{
private
static
LazySingleton singleton;
private
LazySingleton(){
}
public
static
LazySingleton getInstance(){
if
(singleton==
null
){
singleton=
new
LazySingleton();
}
return
singleton;
}
}
2.恶汉写法 缺点是没有达到Lazy Loading 的效果
2
3
4
5
6
7
|
class
HungrySingleton{
private
static
HungrySingleton singleton=
new
HungrySingleton();
private
HungrySingleton(){}
public
static
HungrySingleton getInstance(){
return
singleton;
}
}
3.静态的内部类 优点:加载时不会初始化静态变量INSTANCE,因为没有主动使用,达到Lazy loading
class
InternalSingleton{
private
static
class
SingletonHolder{
private
final
static
InternalSingleton INSTANCE=
new
InternalSingleton();
}
private
InternalSingleton(){}
public
static
InternalSingleton getInstance(){
return
SingletonHolder.INSTANCE;
}
}
又多了个知识点静态的内部类和非静态的内部类
简单理解就是:如果把类比喻成鸡蛋,内部类为蛋黄,外部类是蛋壳。那么静态类相当于熟鸡蛋,就算蛋壳破碎(外部类没有实例化),蛋黄依然完好(内部类可以实例化);而非静态类相当于生鸡蛋,蛋壳破碎(无实例化),蛋黄也会跟着xx(不能实例化)。
区别就是,如果你在这个类里面需要外面类的引用,就不要用static。反之就尽量用static,这样可以提高性能。Effective Java里面讨论过这个问题,建议看一下。
|
内部类的应用场景:
3.1内部类可以很好的实现隐藏
一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
3.2内部类拥有外围类的所有元素的访问权限
3.3可以实现多重继承
3.4可以避免修改接口而实现同一个类中两种同名方法的调用。(这个暂时不懂)
4 枚举,优点:不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象
enum
EnumSingleton{
INSTANCE;
public
void
doSomeThing(){
}
}
5 双重校验锁,在当前的内存模型中无效
class
LockSingleton{
private
volatile
static
LockSingleton singleton;
private
LockSingleton(){}
//详见:http://www.ibm.com/developerworks/cn/java/j-dcl.html
public
static
LockSingleton getInstance(){
if
(singleton==null){
synchronized(LockSingleton.
class
){
if
(singleton==null){
singleton=
new
LockSingleton();
}
}
}
return
singleton;
}
}
|
5.安全性:java运行在黑盒子内,没有指针无法实际操作储存地址地址
6.平台独立和可移植性
7.多线程:支持多线程和多任务
8.动态性:动态语言,根据需要载入类,反射和动态代理
9.高性能:(编译和解释性)先编译后解释