2020-03-05封装,静态,单例设计模式

封装private:仅对外提供公共访问方式,隐藏对象的属性和实现细节。私有只在本类中有效,类以外即使建立对象也不能访问成员,但是可以通过函数来修改和访问。外部不需要用到的方法也可以Private

可以在访问中加入逻辑判断等语句,对访问的数据进行操作(填入合适的值),提高健壮性

私有是封装的一种表现形式,还有其他方法可以封装。private是最低权限



构造函数:对象一建立(如果没有建对象,而是调用方法,则构造函数不执行)就会调用构造函数,构造函数也有重载

代码块:给对象进行初始化,对象一建立就运行,并且优先于构造函数。是所有对象共性的初始化内容

this 区分成员变量和局部变量同名的情况。this代表本类的对象,this代表它所在函数所属对象的引用,也就是哪个对象调用,this就是谁

构建函数间的调用:this语句传相对于的参数this(name),this()等,相当于new Person()

注:this语句只能放在构造函数的第一行(初始化中的初始化要放在前面)


static 静态(类变量 ):用于修饰成员(成员变量和成员函数),会被提取出来。静态修饰后除了可以被对象调用,还可以被类名调用(类名.静态成员)静态成员存储在方法区(也叫共享区、数据区,类的方法也分配在这个区里),因此可以调用另一个类的静态方法

特点:1.随着类的加载而加载(随着为类(而不是对象)分配空间、静态成员也分配在内存中,也随着类的消失而消失);2.被所有对象所共享;3.优先于对象存在;4.可以直接被类名所调用;

类变量和实例变量的区别:生命周期、存放位置

static修饰方法:可以直接被类调用,只能访问静态成员,不能访问非静态成员(没有对象)。

非静态方法既可以访问静态,也可以访问非静态。

静态方法中不可以定义this,super关键字,静态优先于对象存在。所以this不能出现。

优点:节省共享数据空间,可以直接被类名调用

弊端:生命周期长,访问存在局限性(只能访问静态)

主函数:是特殊函数,可以被java虚拟机调用。public代表函数访问权限最大

static代表主函数随着类的加载而存在

void表示主函数没有返回值

main不是关键字但是是被识别的特殊单词

函数参数(String[] args)是字符串数组。主函数是固定格式的,可重载。唯一能改的地方是args。

jvm调用时传入的是new String[0].。

javac执行编译功能,java在虚拟机底层,负责调用主函数,同时可以向字符串数组传值。

什么时候定义静态函数呢?当功能内部不需要用到非静态成员的数据或者有共性功能时,就可以使用静态修饰

将所有数组功能放到一个类中,创建类的对象,实现功能。虽然可以通过建立对象使用工具方法,但是并未封装(指成员并不需要被禁止调用)使用特有数据,所以方法都定义成static。为了禁止类建立对象,可以将空参数构造函数私有化  private 类名() {}     

当另一个类不在当前classpath中时,需要set classpath=.;c:\文件夹;


java说明书(API帮助文档):

javadoc -d myhelp -author -version Tooljava

(这个类必须是public型)

构造方法如果要出现在帮助手册中,必须要是public,默认的构造函数的public修饰是随着类的变化而变化

/**

说明1

@param 参数

@return

*/


静态代码块:随着类的加载(用到类的内容时会加载)而执行,只执行一次优先于主函数和构造函数。

用于给初始化。

格式:

{

    执行语句

}


流程:

1.new对象时通过虚拟机将加载class文件进内存

2.静态代码块被执行,给类进行初始化(只能对静态成员进行初始化)。

**方法区先于堆存在

3.堆内存开辟空间,分配内存地址

4.堆内存建立对象的特有属性,并进行默认初始化

5.显式初始化

6.对对象进行构造代码块初始化(非静态)

7.对对象进行构造函数初始化

8.将内存地址给栈内存的p变量。

非静态省略 this.   静态省略 类名.



单例设计模式:一个类在内存中只有一个对象

思想:

1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。----将构造函数私有化

2.还为了其他程序可以访问该类对象,只好在本类中自定义一个对象(引用在方法区)。----new

3.方便其他程序对自定义对象的访问,可以对外提供一些访问方式。----定义个方法

代码(先初始化对象,饿汉式):

private Single(){}

private static Single s = new Single();

public static Single getInstance(){}

应用:保证事物的对象在内存中唯一,提供修改和获取该对象属性的方法。



另一种写法(对象被方法调用时才初始化,延时加载,懒汉式):

private Single(){}

private static Single s = null;

public static Single getInstance()

{

    if(s == null) 

            s = new Single();

    return s;

}

缺点:单核CPU在某一个时刻只能处理一个程序,多线程并发访问会出现安全问题。

关键字:synchronized  同步,一次只能有一个程序调用,但判断较多,程序效率降低。多线程技术解决:

双重判断:

if(s == null)    ------以后进来的线程都不满足了,减少次数

   synchronized(类名.class){ 

          if(s == null)   {new} 

 }

你可能感兴趣的:(2020-03-05封装,静态,单例设计模式)