一、包装类
有了类的特点,就可以调用类中的方法,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方法中只能调用静态的方法和属性,不能使用this、super。
三、单例模式
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构 造器的访问权限设置为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标记的变量(成员变量或局部变量)即称为常量。名称大写,且只 能被赋值一次。