this、static、单例设计模式

this

this代表当前对象
this的使用:this.调用属性 代表当前对象中的属性
当参数名(局部变量名)和全局变量名相同时,在赋值时(必须)用this.
在这里插入图片描述
取值使用this(不是必须的,可以省略)

在这里插入图片描述
此种状况下不能省略this
在这里插入图片描述
this.调用方法 代表当前对象中的方法
调用方法时this(不是必须可省略)
在这里插入图片描述
构造方法调用构造方法 要放在第一行
构造方法的相互调用
在这里插入图片描述
注意:在this调用构造方法时不要出现死循环
如下:
public int age;
public int ll;

//默认构造方法调用自定义
public Cart() {
this(10);
}
//自定义调用默认
public Cart(int a){
this();
age=a;
}
深入理解当前对象
在这里插入图片描述

static

static:静态的,修饰属性(变量),方法,代码块
static修饰的成员:
static修饰属性(变量):
1)复制和取值可以通过 类名.属性名 的方式
2)被所有对象共享
特征:
随着类的加载而加载
优先于对象存在
可以直接被类名调用:类名.静态变量

int类型被共享:
在这里插入图片描述
由于是count是static所以使用时可以用下面两种方式

  1. 对象名.变量名 2. 类名.变量名

非静态变量和静态变量的区别

两个变量的生存周期不同
非静态变量随着对象的创建而存在,随着对象的回收而释放
静态变量随着类的加载而存在,随着类的消失而消失
别名不同
非静态变量称为实例变量
静态变量称为类变量
调用方式不同
非静态变量只能被对象调用
静态变量可以被对象和类调用
数据储存位置不同
非静态变量存储在堆内存的对象中,也成为对象的特有数据
静态变量数据存储在方法区(数据区)的静态区中

static修饰方法

  1. 类名.方法名()
  2. 对象名.方法名()
    静态方法: 只能调用静态变量和静态方法
    非静态方法:可以调用静态变量和非静态变量
    可以调用静态方法和非静态方法

静态代码块

构造代码块:
{

}
静态构造代码块:
static {

}
静态构造代码块的特点:
1. 在类加载时就执行,且执行一次
2. 用于给类进行初始化(给类的静态变量进行再次赋值)
在这里插入图片描述
结果:
BBB:从Cart这个类中的主函数开始执行,所以先加载这个类到内存中,加载的同时就执行了静态代码块
CCC:jvm从main方法开始执行,打印CCC
AAA:mian 方法要创建OneDay对象,所以要加OneDay加载到内存中,那么OneDay类中的静态代码块开始执行
num=30:OneDay类中的静态代码块开始执行后给静态变量赋值,调用show()方法后,打印的是赋值之后的新值
num=30:在创建OneDay对象时,这个OneDay已在内存中,那就不执行OneDay中的静态代码块了,所以没有任何打印信息,然后在调用show()方法打印num,num是被所有对象共享的,所以也就是30

static代码块和构造代码块 构造方法同时出现优先级
静态代码块 > 构造代码块 > 构造方法
静态代码块:当程序加载到内存时,被执行,全执行一次(只要进入内存就不会在被执行)
构造代码块:可以给所有对象进行初始化
构造方法 :给对应的对象进行初始化

static在开发中的适用情况

static 修饰属性:这个属性如果被所有对象共享
static 修饰方法:该方法功能是否有访问对象中的变量,如果访问,那么这个方法就不用static修饰
注意(重点):
静态方法不能访问非静态变量
静态方法能访问静态变量

非静态方法能访问非静态变量
非静态方法能访问静态变量

静态方法不能使用this关键字
局部变量不能用静态来修饰

设计模式

单例设计模式
单例:单个实例(对象),也就是一个类在内存中的对象是唯一的,说白了,就是一个类只能创建一个对象
=思想=

  1. 不让别人创建对象---------------构造方法变成私有(private)
  2. 提供给人家对象------------我们来创建对象供认使用
  3. 对象这个属性要安全---------用private来修饰这个对象
  4. 提供方法让人拿这个对象------创建一个public方法,方法返回这个对象
  5. 这个方法要变成静态的让人拿---------类名.方法名(因这个类不能创建对象 通过对象.方法名()来拿,随意只能用类名.方法名()来对象)
  6. 这个对象要变成静态的---------------静态方法只能调用静态变量
  7. 测试,拿的对象是同一对象,把对象拿进行输出,看一下内存地址如果两个对象打印出来的值相同,说明是同一对象

单例设计模式的两种表现形式

饿汉式:private static Cart a= new Cart()会在类一加载内存就存在,所以说是饿汉式
在这里插入图片描述
懒汉式:private static Cart a=null 一开始是null后来拿对象时才赋值,所以是懒汉式
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值