您的位置:首页 > 编程语言 > Java开发

java学习之路 之 高级类特性2-关键字static、类变量、类方法、单例模式

2016-08-08 21:32 375 查看
关键字:static  类变量、类方法单例(Singleton)设计模式

关键字static:

使用范围:在Java类中,可用static修饰属性、方法、代码块、内部类
被修饰后的成员具备以下特点:
随着类的加载而加载
优先于对象存在
修饰的成员,被所有对象所共享访问
权限允许时,可不创建对象,直接被类调用

类属性、类方法的设计思想:

类属性作为该类各个对象之间共享的变量。在设计类时,分析哪些类属性不因对象的不同而改变,将这些属性设置为类属性。相应的方法设置为类方法。
如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用

类变量(class Variable):由该类的所有实例共享

类变量应用举例:

class Person {
private int id;
public static int total = 0;
public Person() {
total++;
id = total;
}
public static void main(String args[]){
Person Tom=new Person();
Tom.id=0;
total=100; // 不用创建对象就可以访问静态成员
}
}

public class OtherClass {
public static void main(String args[]) {
Person.total = 100; // 不用创建对象就可以访问静态成员 访问方式:类名.类属性,类名.类方法
System.out.println(Person.total);
Person c = new Person();
System.out.println(c.total); //输出101
}
}

类方法(class Method) :

没有对象的实例时,可以用类名.方法名()的形式访问由static标记的类方法。

在static方法内部只能访问类的static属性,不能访问类的非static属性。

class Person {
private int id;
private static int total = 0;
public static int getTotalPerson() {
//id++; //非法
return total;
}
public Person() {
total++;
id = total;
}
}
public class TestPerson {
public static void main(String[] args) {
System.out.println("Number of total is " +Person.getTotalPerson()); //没有创建对象也可以访问静态方法
Person p1 = new Person();
System.out.println( "Number of total is "+ p1.getTotalPerson());
}
}


输出结果:
Number of total is 0
Number of total is 1

因为不需要实例就可以访问static方法,因此static方法内部不能有this和super。

重载的方法需要同时为static的或者非static的。

单例 (Singleton)设计模式:

设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,

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

单例(Singleton)设计模式-饿汉式:

// 饿汉式单例, 声明引用同时创建对象
class Singleton1 { // 单例 : 在程序运行期间只允许有一个对象
// 1) 私有化构造器, 防止外部随意创建对象
private Singleton1() {}

// 2) 在类内部声明私有的静态引用变量, 并创建唯一的对象, 赋值于这个引用
private static Singleton1 only = new Singleton1();

// 3) 提供公共静态方法用以获取类中唯一的对象
public static Singleton1 getInstance() {
return only;
}
}
// 懒汉式, 第一次获取对象时才创建对象
class Singleton2 {

// 1) 私有化构造器
private Singleton2() {}

// 2) 在类内部声明私有的静态引用变量
private static Singleton2 only;

// 3) 提供公共的静态方法用以获取类中的唯一的对象
public static Singleton2 getInstance() {
if (only == null) {
only = new Singleton2();
}
return only;
}
}
class Singleton1Test {

public static void main(String[] args) {
//Singleton1 s1 = new Singleton1(); 构造器私有化后就不可以创建对象
//Singleton1 s2 = new Singleton1();
Singleton1 s1 = Singleton1.getInstance(); // 通过方法获取对象
Singleton1 s2 = Singleton1.getInstance();
System.out.println(s1 == s2);
}
}

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐