Java类的封装,构造器与对象的学习

封装

1.封装的思想

    将对象的成员变量的实现细节隐藏起来,不允许外部直接访问

    把方法暴露出来,让方法来控制这些成员变量进行安全的访问和操作

2.封装的好处

    1.提高代码的安全性

    2.提高代码的维护性。

3.封装关键字private介绍

封装在程序中的体现其实是四种访问权限,从大到小分别是:

        public>protect>缺省(默认,什么都不写)>private

    private 关键字:私有的

        被private修饰的关键字只能在本类中进行访问,外部无法进行访问

        私有化成员变量格式

        private 数据类型  变量名;

4.封装的步骤:

        private关键字只是封装思想的一种体现形式之一

                1.私有化变量

                2.被一个私有变量,就要对外提供一对公共的访问方式(存储方式setXXX()和获取方式getXXX())

                 以我们之前提到的学生类为例进行封装操作:           

public class demo03close {
    //实例变量的定义
   private String name;
   private int age;
    //实例方法的定义
    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;
    }

}

构造器

构造器的介绍和实现

        构造器时类中的第三个成员,构造器的功能如下:

                1.用来初始成员

                2.如果是有参构造器可以给对象成员赋值

        构造的的定义方式:

                格式: 修饰符 类名(){}

        构造器定义注意事项:1.构造器的名字必须跟类名相同 2.构造器没有返回值类型而其连void都没有 3.当一个类没有任何构造器是,JVM自动提供一个默认午餐的构造器,以便进行初始化;一旦类中含有构造器时,JVM将不再提供默认构造器。

        以上述的学生类为例子,构造列中的构造器:

public class demo03close {
    //实例变量的定义
   private String name;
   private int age;
   //构造器定义
    public  demo03close(){

    }
    public demo03close(String name ,int age){
        this.name=name;
        this.age=age;
    }
    //实例方法的定义
    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;
    }

   
}

        在上述了代码中,我们定义而两种构造器的方法,一种是无参构造器,另一种时有参构造器。在定义时,有参构造器可以个类中的私有化变量赋值,但读取变量值还得使用封装中的getXX()的思想。如下代码:

public class demostudent {
    public static void main(String[] args) {
        demo03close s1=new demo03close();//调用构造器没定义的话,虚拟机会自动构造
        s1.setName("张三");
        s1.setAge(18);
        System.out.println(s1.getName());
        System.out.println(s1.getAge());
        //有参构造器赋值
        demo03close s2=new demo03close("李四", 20);
        System.out.println(s2.getName() +" "+ s2.getAge());
    }
}

构造器的代码块

        代码块是类中的第四个成员,在编写类时,多个构造器中的相同代码可以提取构造器代码块中去实现,构造器代码块的定义格式如下:

        {

                多个构造器中的相同代码

        }

        构造器代码块的特点:

        1.构造器代码块会在初始化对象时被构造器调用一次

        2.构造器代码块总是优先于构造器中的显式代码进行作用

        简单的构造器代码块实现方法

public class demo06 {
    //无参构造器
    public demo06(){

        System.out.println("7");
    }

    //有参构造器
    public demo06(int x){
        
        System.out.println("8");
    }

    public demo06(int x,int b)

        System.out.println("9");
    }
    //构造器代码块
    /*{
        System.out.println("1");
        System.out.println("2");
        System.out.println("3");
    }*/
}

        测试代码

package com.demo.OPP;

public class tr {
    public static void main(String[] args) {
        demo06 s=new demo06();//调用无参构造器
        demo06 s1=new demo06(1);//调用无参构造器
        demo06 s2=new demo06(1,2);//调用无参构造器
    }
}

构造器中this介绍

        当构造器没有能力进行初始化的时候,可以用this调用本类当中的其他构造器进行完成实例初始化 。this在构造器中的使用格式

        this()

       this在类中的使用

public class demo06 {
    //无参构造器
    public demo06(){
        this(1);//无参构造器无法完成初始化的工作,将工作交给含有一个参数的构造器
        System.out.println("无参构造器");
    }

    //有参构造器
    public demo06(int x){
        this(1,1);//含有一个参构造器无法完成初始化的工作,将工作交给含有两个参数的构造器
        System.out.println("一个参数构造器");
    }
    //有参构造器
    public demo06(int x,int b){//含有两个参数的构造器有能力完成实例初始化的工作
        //调用构造器代码块
        //执行完隐藏的内容后,开始执行构造器的显式内容
        System.out.println("两个参数构造器");
    }
    //构造器代码块
    /*{
        System.out.println("1");
        System.out.println("2");
        System.out.println("3");
    }*/
}

         在初始化无参构造器时,无参构造器会调用有一个参数的构造器进行初始化,而有一个参数的构造器会调用有两个参数的构造器进行初始化。最后在两个参数的构造器这里完成初始化。值得注意的是,this()必须放在构造器代码的第一行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值