| 
 
| public class Encapsulation {
 /*
 * 封装的知识点整理
 * 封装:指隐藏对象的属性和实现细节,仅对外提供公共访问方式
 * 知识点:
 * 1、属性private,提供公共方法来访问  get和set
 *    private不能修饰类,可以修饰类成员(成员变量和成员方法),只能本类中访问,私有是封装的一种表现形式
 * 2、构造函数,作用给对象进行初始化的,无返回值,伴随对象的建立而执行一次。
 *    2.1、构造代码块:给所有对象进行初始化的
 *        格式:{
 *        构造代码块内容;
 *       }
 *    2.2、构造函数:给一类对象进行初始化的
 *        格式:类名(){
 *         构造函数中的内容;
 *        }
 *      不同类型的构造函数以重载的方式表现
 *      所有类默认有一个空参数的构造函数  格式:类名(){},如果有了非空参数的构造函数,默认空参数的构造函数就不存在了。
 *      所有的访问修饰符都可以修饰构造函数
 *       public  公共
 *       protected 只有子类可以访问
 *       private 私有,一个类中所有构造函数为私有的,则在其他类中不能创建此类对象,可以应用于单类设计模式
 *       缺省修饰符    包内访问
 * 3、this关键字,代表当前对象
 *   应用:区分成员变量和局部变量
 *       同类不同构造函数间调用必须使用this关键字,而且this语句只能在构造函数的第一行
 * 4、static 静态
 *   被静态修饰表示全局
 *   调用格式:类名.静态成员
 *   4.1、修饰成员变量表示此变量为全局变量,所有对象共有(共同操作)
 *   4.2、修饰成员方法表示此方法为全局方法,所有对象共有的,都可以使用
 *   静态存在在方法区中,随着类的加载而加载,优先于对象存在。
 * 5、静态代码块    用于给类初始化的,类加载则执行静态代码块,只执行一次,构造代码块和构造函数是对象建立执行一次。
 *     执行顺序是:静态代码块优先于构造代码块,构造代码块优先于构造函数。
 *   格式:static{
 *       静态代码块内容
 *      }
 *
 * 具体代码部分如下:
 */
 public static void main(String[] args){
 Person p1=new Person();
 Person p2=new Person("lisi");
 Person p3=new Person(20,"zhangsan");
 
 System.out.println("p1:name="+p1.getName()+",age="+p1.getAge()+",country="+Person.country);
 System.out.println("p2:name="+p2.getName()+",age="+p2.getAge()+",country="+p2.country);
 System.out.println("p3:name="+p3.getName()+",age="+p3.getAge()+",country="+p3.country);
 
 }
 }
 class Person{
 private String name;
 private int age;
 static String country="ZN";
 //静态代码块
 static{
 System.out.println("静态代码块初始化类,类加载只执行一次");
 //  method(); 静态代码块中不能调用非静态方法,静态了就可以调用了。因为有了静态的时候还没有非静态成员呢。
 }
 //构造代码块
 {
 System.out.println("构造代码块初始化所有对象,对象建立只执行一次");
 method();
 }
 
 private void method(){   //这个方法加不加static 构造函数和构造代码块都可以调用,因为静态先于对象存在
 System.out.println("构造函数和构造代码块可以调用本类方法");
 }
 //构造函数
 Person(){}   //因为我需要建立空参数的Person对象,所以这个我得自己加上,因为如果有其他的构造函数,此构造函数系统不会给我默认加上
 Person(String name){
 this.name=name;
 }
 Person(int age,String name){
 //  method();   this语句必须放在第一行
 this(name);
 this.age=age;
 method();
 }
 
 public String getName(){
 return name;
 }
 public void setName(String name){
 this.name=name;
 }
 public int getAge(){
 return age;
 }
 public void setAge(int age){
 this.age=age;
 }
 }
 
 
 | 
 |