欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 面向对象的封装性

面向对象的封装性

2024/10/24 21:19:53 来源:https://blog.csdn.net/2301_80706853/article/details/142514834  浏览:    关键词:面向对象的封装性

目录

一、封装的定义

二、实现封装

三、构造方法

四、构造方法的重载

五、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();}

执行结果:

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


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com