2020/05/17 private封装 static静态 单例模式
对象可以作为一个参数传入方法
实际传递进去的为地址值,直接在方法中调用参数对象地址
对象可以作为返回类型传入方法
同理,返回的是对象地址
成员变量和局部变量
成员变量为类变量
整个类通用,如果没赋值会有默认值,在堆内存中
局部变量为方法
只能在方法中使用,没有默认值,想要使用必须手动赋值,位于栈内存
成员访问修饰符
封装private
使用private进行修饰,本类中可以随便访问,超出本类范围不能直接访问
对于基本类型进行访问用get。。()和set。。(),对于Boolean得用is。。()
自身 | 同包子类 | 不同包子类 | 同包类 | 其他类 | |
---|---|---|---|---|---|
private | 可访问 | 不能继承 | 不能继承 | 不可访问 | 不可访问 |
package/friendly/default 不写
和无修饰符一样
自身 | 同包子类 | 不同包子类 | 同包类 | 其他类 | |
---|---|---|---|---|---|
private | 可访问 | 可继承 | 不能继承 | 可访问 | 不可访问 |
protected受保护的
自身 | 同包子类 | 不同包子类 | 同包类 | 其他类 | |
---|---|---|---|---|---|
private | 可访问 | 可继承 | 可继承 | 可访问 | 不可访问 |
public公共的
自身 | 同包子类 | 不同包子类 | 同包类 | 其他类 | |
---|---|---|---|---|---|
private | 可访问 | 可继承 | 可继承 | 可访问 | 可访问 |
总结:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yxEn20VB-1589723314124)(C:\Users\10145\AppData\Roaming\Typora\typora-user-images\image-20200517181147181.png)]
1.属性通常用private封装
2.方法一般用public被调用
3.会被子类继承的方法用protected
4.package用的不多
类属性
一个属性被static修饰,叫做类属性,又叫静态属性,实质上为全局变量
属性被声明为类变量,所有对象都共享一个值
成员变量属于对象,存放在堆中
静态变量属于类,存放在方法区
什么时候使用?
成员变量数据是否所有对象都一样,是则静态修饰
类方法
访问一个对象方法,必须建立在有一个对象的前提的基础上
访问类方法,不需要对象的存在,直接就访问
调用:类.类方法
无static:对象.方法
在一个方法得依靠对象才有意义,那就是对象方法,如果方法不调用任何对象属性,则设计为类方法
属性初始化
对象属性初始化
-
声明该属性的时候初始化
public String name = "some hero";
-
构造方法中初始化
public Hero() { hp = 100; //构造方法中初始化 }
-
初始化块
类属性初始化
-
声明该属性的时候初始化
public static int itemCapacity=8; //声明的时候 初始化
-
静态初始化块
属性初始化顺序
声明初始化第一,块第二,构造方法第三
一个标准类
1.成员变量都使用private
2.为每个成员变量编写一对Setter/Getter方法
3.编写一个无参数构造方法//通过generate来生成
4.编写一个全参数构造方法
单例模式
指的是一个类,在一个JVM里,只有一个实例存在。
三元素
将构造方法设置为private属性
静态属性指向实例
public static的 getInstance方法,返回第二步的静态属性
饿汉式单例
关键:1.私有构造函数 2.静态私有成员,类加载时初始化 3.公开访问点
无论如何都会创建一个实例,先创建对象,再在调用时直接返回对象实例
在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
懒汉式单例
关键:1.构造函数定义为私有 2.成员变量为static,没有初始化
只要调用创建对象方法时,才会创建实例
类加载时不初始化
在加载时,如果有充分的启动和初始化时间就可以使用饿汉模式,否则用懒汉
例
在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
懒汉式单例
关键:1.构造函数定义为私有 2.成员变量为static,没有初始化
只要调用创建对象方法时,才会创建实例
类加载时不初始化
在加载时,如果有充分的启动和初始化时间就可以使用饿汉模式,否则用懒汉