Java回顾-面向对象(包装类/static/单例模式/final)

一、包装类

        有了类的特点,就可以调用类中的方法,Java才是真正的面向对象.

        基本数据类型->包装类的实例 ---装箱;

        获得包装类对象中包装的基本类型变量 ---拆箱

        jdk1.5后支持自动装箱,自动拆箱,但类型必须匹配。

       1. String->基本数据类型

通过包装类的构造器实现:
int i = new Integer(“12”);

通过包装类的parseXxx(String s)静态方法:
Float f = Float.parseFloat(“12.1”);

        2.基本数据类型->String

调用字符串重载的valueOf()方法:
String str = String.valueOf(2.34f);

更直接的方式:
String Str = 521 + ""

二、static关键字

        static可以修饰属性、方法、代码块、内部类。

        类属性作为该类各个对象之间共享的变量。在设计类时,分析哪 些属性不因对象的不同而改变,将这些属性设置为类属性。相应 的方法设置为类方法。

        如果方法与调用者无关,则这样的方法通常被声明为类方法,由 于不需要创建对象就可以调用类方法,从而简化了方法的调用。

        如果要声明类属性类方法,就要用static来修饰他们。

        被修饰后的成员具备以下特点:

1.随着类的加载而加载

2.优先于对象存在

3.修饰的成员,被所有对象所共享

4.访问权限允许时,可不创建对象,直接被类调用

        如下图所示,static修饰的类属性存放在方法区中。

         注意:static方法中只能调用静态的方法和属性,不能使用thissuper

 三、单例模式

        所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构 造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生 类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无 法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象, 静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。

        单例模式的优点: 由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方 式来解决。

        单例模式的应用场景

         1.网站的计数器,一般也是单例模式实现,否则难以同步。

         2.应用程序的日志应用,一般都使用单例模式实现,这一般是由于共享的日志 文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。 

         3.数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库 资源。

         4.项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置 文件数据,都生成一个对象去读取。

         5. Application 也是单例的典型应用

         6.Windows的Task Manager (任务管理器)就是很典型的单例模式

         7.Windows的Recycle Bin (回收站)也是典型的单例应用。在整个系统运行过程 中,回收站一直维护着仅有的一个实例。

        单例模式的两个实现类型饿汉式、懒汉式

        饿汉式:先把实例造出来,等待被调用。

        懒汉式:被调用的时候才把实例造出来。

//单例模式的饿汉式实现
class Bank1{
    /* 1.私有构造器*/
    private Bank1() {
        System.out.println("bank实例创建完成,饿汉式!");
    }
    /* 2.创建私有实例对象*/
    private static Bank1 instance = new Bank1();
    /* 3.创建公共方法返回对象实例*/
    public static Bank1 getInstance(){
        return instance;
    }
}


@Test
    public void test1(){
        Bank1 bank1 = Bank1.getInstance();
    }



bank实例创建完成,饿汉式!
//单例模式的懒汉式实现
class Bank2{
    /* 1.私有构造器*/
    private Bank2() {
        System.out.println("bank实例创建完成,懒汉式!");
    }
    /* 2.声明私有实例对象,没初始化*/
    private static Bank2 instance = null;
    /* 3.创建公共方法返回对象实例*/
    public static Bank2 getInstance(){
        if(instance==null){
            instance=new Bank2();
        }
        return instance;
    }
}


 @Test
    public void test2(){
        Bank2 bank2 = Bank2.getInstance();
    }


bank实例创建完成,懒汉式!

四、final关键字

        final关键字的一些特点:

        1.final标记的类不能被继承。提高安全性,提高程序的可读性。 例如String类、System类、StringBuffer类。

        2.final标记的方法不能被子类重写。 比如:Object类中的getClass()。

        3.final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只 能被赋值一次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值