封装的定义
封装,英文单词Encapsulation。
从广义的角度来说,将一块经常要使用的代码片段,定义到方法中,是封装。将多个方法和多个状态数据定义到类体中,也是一种封装。
从狭义的角度来说,java的封装,就是把类的属性私有化(private修饰),再通过公有方法(public)进行访问和修改;
public class Aperson{
private String name;
private int age;
private char gender;
//无参构造器
public APerson(){}
//全参构造器
public APerson(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName(){return name;}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
if(age>0 && age<=120){
this.age = age;
}else{
System.out.println("--您赋值的年龄不合法--"+age);
}
public int getAge(){return age;}
public void setGender(char gender){
if(gender == '男'||gerder == '女'){
this.gender = gender;
}else{
throw new RuntimeException("您赋值的性别不合法,需要汉字'男'或'女'--")
}
}
}
测试封装
public class APersonTest{
public static void main(String[] args) {
Aperson p1 = new Aperson();\
p1.setName ("小明");
p1.setAge(18);
p1.setGender('女');
System.out.println(p1.getName());
System.out.println(p1.getAge());
System.out.println(p1.getGender());
p1.setGender('m');
System.out.println(p1.getGender());
}
}
单例测试-----饿汉模式
单例模式的饿汉模式
1.提供一个该类的私有的、静态的属性,并在静态代码块里赋值
2.提供一个私有的构造器,避免外界直接调用构造器
3.提供一个共有的、静态的方法,来获取当前类的对象
public class BSingleton{
private static BSingleton instance;
static{t
instance = new BSingleton;
}
private BSingleton(){}
public static BSingleton getInstanceO(){
return instance;
}
}
饿汉模式的测试
public class BSingletonTest {
public static void main(String[] args){
BSingletonTest bs = BSingleton.getInstance();
BSingletonTest bs2 = BSingleton.getInstance();
System.out.println("bs == bs2");
}
}
单例模式-----懒汉模式
单例模式的懒汉模式
1.提供一个该类的私有的、静态的属性
2.提供一个私有的构造器,避免外界直接调用构造器
3.提供一个共有的、静态的方法,创建当前类的对象。如果对象不存在,说明对象还未创建
4.有安全隐患问题,例如两次调用的时候都恰好到执行处,判断=null,都执行到创建实例的那一行,会在内存创造两个对象
public class CSingleton{
private static CSingleton instance;
private CSingleton(){}
public static CSingleton getInstance(){
if(instance == null){
instance = new CSingleton;
}
return instance;
}
}
懒汉模式的测试
public class CSingletonTest(){
public static void main(String[] args){
CSingletonTest c1 = CSingleton.getInstance;
CSingletonTest c2 = CSingleton.getInstance;
System.out.println("c1 == c2");
}
}