-
package com.zhy;
/**
* 面向对象的特征一:封装
* 封装: 是指隐藏对象的属性和实现细节,进对外提供公共访问方式
* 好处: 将变化隔离,便于使用,提高重要性,提高安全性
* 原则: 将不需要对外提供的内容都隐藏起来
* 把属性都隐藏,提供公共方法对其访问
*/
/**
* private : 私有,全县修饰符:用于修饰内中的成员(~变量、~方法)
* 私有的只能用于本类中
*
* 我们将age私有化后,那么类意外即使建立了对象也不能访问。
* 但我们需要在persion类中提供对应的方法访问age的方式。
* 这就需要我们提供修改set和得到get的方法修改和获取age的值。
*
* 注意: private 私有仅仅知识分装的一种表现形式,还有以下权限
* defult(默认) 本包以内可以访问
* protected(受保护) 同一个包或不同包的子类可以访问
* public(公共) 任何类都可以访问
*/
public class Persion{
/**
* 静态:static
* 用法: 是一个修饰符,用于修饰成员(~变量、~方法)
* 当成员被静态修饰后,就可以直接被类名调用 class.xxx;
* 可节约堆内存空间---》static修饰的放于方法区(共享区|数据区)
* 注意: 需要共享的数据用static.
*
* 特点: 1随着类加载的加载而加载,随类消失而消失,周期最长 2优先于对象存在
* 3被所有对象共享 4 可直接被类名调用
*
* 类变量和成员变量区别:
* 1 存储位置: 类变量随类加载存于方法区中,成员变量随对象的建立而存在堆内存中
* 2 生命周期: 类变量生命周期最长,随类消失而消失
* 成员变量随对象消失而消失
*
* static注意事项:
* 1 静态方法只能访问静态成员,非静态方法可访问 静态|非静态变量
* 2 静态方法中不可以定义this,super关键字
* 因为静态优先于对象存在,所以静态方法中没有this
* static 利弊:
* 利: 1 对对象的共享数据进行单独空间存储,节约空间 2 可以直接被类名调用
* 弊: 1 生命周期过长 2 访问有局限(只能访问静态)
*/
private int age;
private String name;
private String sex; //成员变量
public static String country="CN"; //类变量
/**
* 构造代码块
* 作用: 给对象进行初始化---是所有对象进行统一初始化
* 对象一建立就运行,优先于构造函数
*
* 构造代码库中定义的是不同对象共性的初始化内容
*/
{
System.out.println("代码块:----初始化");
}
/**
* 静态代码块
* 特点: 随类加载而加载,只执行一次,给类进行初始化操作
*/
static {
System.out.println("static 代码块!");
}
/**
* 构造函数: 与类名相同的函数,无返回值
* 对象一旦建立就会调用与之对应的构造函数
* 构造函数作用:可以用于给对象初始化
* 注: 1:若一个类没有定义构造函数时,那么系统会默认给该类添加一个
* 空参数的构造函数
* 2:若以创建构造函数,那么系统会取消默认的构造函数
* 与其他函数区别:
* 构造函数是对象已建立就运行,给对象初始化,而其他函数是要对象调用才执行
* 一个对象建立,构造函数只运行一次而其他可被对象多次调用
*/
Persion(int age, String name,String sex){
//this 关键字:-----》this指代本类当前的对象
//this 简单说就是哪个对象调用this所在的函数,this就代表谁
// --用于构造函数间互相调用
//注: 只能定义在构造函数第一行,因为初始化要先执行
this();
this.age =age ;
this.name =name;
this.sex =sex;
}
Persion(String country){
System.out.println("XXX==name"+age);
}
Persion(){
//无参构造函数
}
public int getAge() {
return age;
}
/**
* 之所以对外提供访问方式,是可以访问方法中加入
* 逻辑语句对访问的数据进行操作,提高代码的健壮性
*/
public void setAge(int age) {
if (age>0 && age<130) {
this.age = age;
speak();
}else {
System.out.println("are you persion? failed age!");
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
void speak(){
System.out.println("age="+age);
}
}
public class test7 {
/**
* 主函数: 是一个特殊的函数,作为程序的入口,可别jvm调用(主函数是固定格式--jvm识别)
* public : 代表函数访问权限是最大的
* static : 代表主函数随着类 的加载就已经存在了
* String[] args: 主函数参数
*/
public static void main(String[] args) {
Persion persion = new Persion();
//实现的构造函数
Persion p1 =new Persion(18, "张三", "男");
p1.speak();
System.out.println(Persion.country);
//这是不能直接访问的
//persion.age = 20;
//通过方法设置私有变量值
persion.setAge(20);
persion.speak();
}
}