java基础-特性

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.高性能:(编译和解释性)先编译后解释


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值