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;
}
}
|
|