八、面向对象(二)

1. 封装

隐藏对象的属性和实现细节,仅对外提供公共的访问方式,可提高代码复用性

2. private关键字
2.1.特点
  • 一个极限修饰符
  • 可修饰成员变量和成员方法
  • 被其修饰的成员只能在本类中被访问
2.2.封装及应用
  • 把成员变量用private修饰
  • 提供对应的 setXxx、getXxx 方法
  • private 仅仅是封装的一种体现形式,不能说封装就是私有
3. this关键字
3.1.特点

代表当前对象的引用,用来区分成员变量和局部变量的重名

        private String name;
        private int age;
        private String gender;

        public void setName(String name){			//局部变量
            this.name = name;						// this.全局变量 = 局部变量
        }
        public String getName(){
            return name;
        }
4. 构造方法
4.1.概述和作用
  • 给对象的数据(属性)进行初始化
4.2.格式特点
  • 方法名与类名相同(大小写也要一致)
  • 没有返回值类型(连 void 也没有)
  • 没有具体的返回值 return(构造方法不能用对象调用)
public class Student {							//	学生类对象

        private String name;
        private int age;
        private String gender;
        
        public Student(){
            System.out.println("构造方法");
    }
}
public class Main {								
    public static void main(String[] args) {
        Student s = new Student();				//在一创建对象时,系统就帮我调用了构造方法
        s.setName("张三");
        System.out.println(s.getName());
    }
}
4.3.构造方法的重载
  • 重载 :
    方法名相同,与返回值类型无关(构造方法无返回值),只看参数列表
  • 注意事项:
    a.如果我们没有给出构造方法,系统会自动提供一个无参构造方法
    b.如果我们给出了构造方法,系统将不再提供默认的无参构造方法
public class Student {

        private String name;
        private int age;

        public Student(){
            System.out.println("无参构造方法");
        }

        public Student(String name,int age){
            this.name = name;
            this.age = age;
            System.out.println("有参构造方法");
        }
        public void setName(String name){
            this.name = name;
        }
        public String getName(){
            return name;
        }

        public void setAge(int age){
            this.age = age;
        }
        public int getAge(){
            return age;
        }

        public void show(){
            System.out.println(name + " - " + age);
        }
}

public class Main {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.setName("张三");
        s1.setAge(23);
        s1.show();												//(1)

        System.out.println("----------------------");

        Student s2 = new Student("李四",24);
        s2.show();												//(2)
    }
}

(1)输出
无参构造方法
张三 - 23

(2)输出
有参构造方法
李四 - 24
5. static关键字
5.1.特点
  • 随着类的加载而加载
  • 优先于对象存在
  • 被类的所有对象共享
    举例:一个班的学生共用一个班级编号
    即如果某个成员变量是被所有对象共享的,name它就应该被定义为静态的
    饮水机(静态)
    水杯(非静态)
  • 可以通过类名调用
5.2.注意事项
  • 在静态方法中是没有 this 关键字的
    静态是随着类的加载而加载,this是随着对象的创建而存在
    静态比对象先存在
  • 静态方法只能访问静态的成员变量和静态的成员方法(即静态只能访问静态,非静态都可以访问)
6. 静态变量与成员变量的区别
6.1.所属不同
  • 静态变量属于类,也称为类变量
  • 成员变量属于对象,也称为对象变量
6.2.内存中位置不同
  • 静态变量存储于方法区的静态区
  • 成员变量存储于堆内存
6.3.内存出现时间不同
  • 静态变量随着类的加载而加载,随着类的消失而消失
  • 成员变量随着对象的创建而存在,随着对象的消失而消失
6.4.调用不同
  • 静态变量可通过类名调用,也可通过对象调用
  • 成员变量只能通过对象名调用
7. 在工具类中使用静态
public class Tool {			//声明一个工具类
    private Tool(){}		//如果一个类中所有方法都是静态的,需要构造私有方法,目的
							//是不让其他类创建本类对象,直接用 “ 类名. ” 调用即可

    public static void print(int[] arr){
        for (int i = 0;i < arr.length; i ++){
            System.out.println(arr[i]);
        }
    }
}
public class Main {					//测试方法
    public static void main(String[] args){
        int[] arr = {11,33,55,44,88,33};
        Tool.print(arr);					//直接用 “ 类名. ” 调用即可
    }
}
8. 代码块的概述和分类
7.1.概述
  • 在Java中,使用{}括起来的代码称为代码块
7.2.分类
  • 根据其位置和声明的不同,可分为局部代码块、构造代码块、静态代码块、同步代码块
7.3.常见代码块的应用
  • 局部代码块
    在方法中出现,限定变量生命周期,及早释放,提高内存利用率
  • 构造代码块
    在类中方法外出现,多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
  • 静态代码块
    在类中方法外出现,加了static修饰
    用于给类进行初始化,在加载时执行且执行一次
    一般用于加载驱动
    优先于主方法执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值