自学内容网 自学内容网

面向对象的封装性

目录

一、封装的定义

二、实现封装

三、构造方法

四、构造方法的重载

五、this关键字

六、代码块


面向对象的三大特性为:封装,继承和多态。

一、封装的定义

  封装是面向对象的核心思想,将对象的属性和方法封装成一个整体。同时,也可以将不想让外界知道的信息隐藏起来。

二、实现封装

  类的封装是指将对象的状态信息隐藏在对象的内部,不允许外部程序直接访问对象的内部信息,而是通过该类提供的方法实现对内部信息的访问。

  在Java中,定义一个类,将这个类中的属性私有化,可以使用private关键字修饰类的属性,被私有化的属性只能在该类中被访问。外界如果想要访问私有属性,就必须通过setter和getter方法设置和获取属性值。

class Student{

    private String name;
    private int age;

    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;
    }
}
public class Example {
    public static void main(String[] args) {
        Student student=new Student();
        student.setName("张三");
        student.setAge(20);
        System.out.println("姓名: "+student.getName()+" 年龄: "+student.getAge());
    }
}

三、构造方法

  实例化一个对象后,如果要为这个对象中的属性赋值,就必须通过直接访问对象的属性或者调用setter方法才能实现,如果需要在实例化对象时为这个对象属性赋值,可以通过构造方法实现。

  构造方法是类中一个特殊的成员方法,在类实例化对象时自动调用。

实现构造方法

注意事项:(1)、构造方法的名称必须和类名相同

                   (2)、构造方法名称前不能有任何返回值类型的声明

                   (3)、不能在构造方法中使用return返回一个值,但是可以写return语句作为方法的结束

class Student{
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void read(){
        System.out.println("姓名:"+name+" 年龄:"+age);
    }
}
public class Example {
    public static void main(String[] args) {
        Student student=new Student("张三",20);
        student.read();
    }
}

四、构造方法的重载

  与普通方法相同,构造方法也可以重载,在一个类中可以定义多个构造方法,只要每个构造方法的参数或者参数个数不同即可。在创建对象时,可以通过调用不同的构造方法为不同的属性赋值。

class Student{

    private String name;
    private int age;

    public Student(String name) {
        this.name = name;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void read(){
        System.out.println("姓名:"+name+" 年龄:"+age);
    }
}
public class Example {

    public static void main(String[] args) {
        Student student1=new Student("张三");
        Student student2=new Student("张三",20);
        student1.read();
        student2.read();
    }
}

  在Java中的每个类都至少有一个构造方法,如果在一个类中没有定义构造方法,系统对自动为这个类创建一个默认的构造方法,这个默认的构造方法没有参数,方法体中没有任何的代码,即什么也不做。

五、this关键字

  在Java开发中,当成员变量和局部变量重名时,需要用到this关键字来分辨成员变量和局部变量,主要作用有三种。

1、使用this关键字调用本类中的属性

2、使用this关键字调用成员方法 

3、使用this关键字调用本类的构造方法


1、使用this关键字调用本类中的属性

class Student{
    private String name;
    private int age;

    public Student(String name) {
        this.name = name;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String read(){
       return("姓名:"+name+" 年龄:"+age);
    }
}
public class Example {
    public static void main(String[] args) {

        Student student=new Student("张三",20);
        System.out.println(student.read());

    }

  在构造方法中,参数名称和成员变量的名称相同,编译器无法确定哪个是当前对象的属性。所以,Java提供了this关键字来指代当前对象,通过this可以访问当前对象的成员。


2、使用this关键字调用成员方法

read2方法使用this关键字调用read1方法

class Student{

    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void read1(){
        System.out.println("姓名:" + name+" 年龄: "+age);
    }
    public void read2(){
        this.read1();
    }
}
public class Example {
    public static void main(String[] args) {

        Student student=new Student("张三",20);
        student.read2();

    }
}

3、使用this关键字调用本类的构造方法

通过this调用没有参数的构造方法

使用this调用类的构造方法的注意事项:

1、只能在构造方法中使用this调用其他的构造方法,不能在成员方法中调用其他的构造方法

2、在构造方法中,使用this调用构造方法的语句必须放在第一行,且只能出现一次。

class Student{
    private String name;
    private int age;

    public Student(){
        System.out.println("这是没有参数的构造方法");
    }

    public Student(String name, int age) {
        this();
        this.name = name;
        this.age = age;
    }
    public String read(){
        return "姓名:"+name+" 年龄:"+age;
    }
}
public class Example {
    public static void main(String[] args) {

        Student student=new Student("张三",20);
        System.out.println(student.read());

    }
}

六、代码块

  代码块,就是"{}"括号括起来的一段代码,根据位置以及声明的关键字不同,代码块可以分成,普通代码块、构造块,静态代码块和同步代码块。

普通代码块

普通代码块就是直接在方法或语句中定义的代码块

public static void main(String[] args) {
        {
            int age=20;
            System.out.println("这是不同代码块 age:"+age);
        }
        int age=30;
        System.out.println("age"+age);
    }

  在main()方法中定义了一个局部代码块,局部代码块就main()方法进行了分隔,起到了限定作用域的作用。定义的两个相同的变量,由于两个变量处在不同的代码块,作用域不同,因此并不会互相影响。

构造块

构造块是直接在类中定义的代码块

class Student{

    String name;
    {
        System.out.println("构造代码块");
    }
    //构造方法

    public Student() {
        System.out.println("构造方法");
    }
}
public class Example {
    public static void main(String[] args) {
        Student student1=new Student();
        Student student2=new Student();
    }

执行结果:

构造代码块
构造方法
构造代码块
构造方法

从执行结果中可以看出,构造代码块的执行顺序优先与构造方法。


静态代码块

  在Java类中,用static关键字修饰的代码块称为静态代码块。当类加载的时候,静态代码块会执行,由于类只加载一次,因此静态代码块也只执行一次。在程序中,通常使用静态代码块对类的成员变量进行初始化。

class Student{
    {
        System.out.println("构造代码块");
    }
    static {
        System.out.println("静态代码块");
    }
    //构造方法
    public Student() {
        System.out.println("构造方法");
    }
}
public class Example {
    public static void main(String[] args) {
        Student student1 = new Student();
        Student student2 = new Student();
    }

执行结果:

静态代码块
构造代码块
构造方法
构造代码块
构造方法
从执行结果可以看出,代码块执行的顺序为静态代码块、构造代码块、构造方法,而且静态代码块只执行一次。



原文地址:https://blog.csdn.net/2301_80706853/article/details/142514834

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!