java学习之面向对象和封装

    科技2026-01-07  11

    面向过程:当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节。

    面向对象:当需要实现一个功能的时候,不关系具体的步骤,而是找一个已经具有该功能的人帮忙做事情。

    面向过程强调步骤,面向对象强调对象(结果)。

    面向对象的思想更加符合我们思考的习惯,它可以将复杂的事情简单化,并且将我们从执行者变成了指挥者。

    面向对象的语言中包含了三大基本特征:封装、继承和多态。

     

    类和对象

         类是一组相关属性行为的集合。可以把类看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。

         现实中描述一类事物主要从两个方面:

                1. 属性:该事物的状态信息

                2. 行为:该事物能够做什么

    对象

         对象是一类事物的具体体现,对象是类的一个实例,必然具备该类事物的属性和行为。

    类和对象的关系

          类是对一类事物的描述,是抽象的

          对象是一类事物的实例,是具体的

          类是对象的模板,对象是类的实例

    例如:现在定义一个类来模拟“学生”事物,那么其中就有两个组成部分:

               ★ 属性(是什么)

                   姓名 、年龄

               ★ 行为(能做什么)

                   吃饭 、睡觉 、学习

              对应到java的类当中:

                ★ 成员变量(属性)

                    String name ; 

                    int age ; 

                ★ 成员方法(行为)

                    public void eat(){ }

                    public void sleep(){ }

                    public void study(){ }

    注意:1. 成员变量是直接定义在类当中的,在方法外边

               2. 成员方法不要写static关键字

     

    通常情况下一个类并不能直接使用,需要根据类创建一个对象才能使用:

               1. 导包:即指出需要使用的类在什么位置

                              import 包名称.类名称

                              对于和当前类属于同一个包的情况,可以省略导包语句不写

               2. 创建

                              格式:   类名称 对象名 = new 类名称() ;

                             Student stu = new Student() ;

               3. 使用:分为两种情况

                            ★ 使用成员变量 :对象名.成员变量名

                            ★ 使用成员方法:对象名.成员方法名(参数)

    注意:如果成员变量没有进行赋值,则会有一个默认值,规则和数组一样

               当一个对象作为参数传递到方法当中去时,实际上传递进去的是对象的地址。

               当使用对象作为方法的返回值时,实际上返回的是对象的地址。

     

    局部变量和成员变量

          1. 定义的位置不一样(重要)

              局部变量:在方法的内部

              成员变量:在方法的外部,直接写在类当中

          2. 作用的范围不一样(重要)

              局部变量:只有在方法中才可以使用,出了方法就不可以再使用

              成员变量:整个类都可以通用

          3. 默认值不一样(重要)

              局部变量:没有默认值,如果想要使用,必须手动进行赋值

              成员变量:如果没有赋值,会有默认值,默认值的规则和数组一样

          4. 内存的位置不一样(了解)

              局部变量:位于栈内存

              成员变量:位于堆内存

          5. 生命周期不一样

              局部变量:随着方法进栈而诞生,随着方法出栈而消失

              成员变量:随着对象的创建而诞生,随着对象被垃圾回收而消失

    有static的是普通方法,普通方法直接调用;没有static是成员方法,成员方法要通过对象来调用

     

    面向对象三大特征:封装 、继承 、多态

          ---  封装性在Java中的体现:

                  1.  方法就是一种封装

                  2. 关键字private也是一种封装

           【 封装就是将一些细节信息隐藏起来,对于外界不可见

          --- 封装的好处在于可以取到保护代码和数据的作用,增强了代码的安全性,同时也让代码更容易理解与维护。

     

    封装的操作 -- private关键字

           private使用格式:   private  数据类型   变量名 ; 

            一旦使用了private进行修饰,则本类当中仍然可以随意访问,但是超出了本类范围之外就不可以直接访问成员变量了,但是可以间接访问,间接访问private成员变量是通过定义一对Getter / Setter 方法

    其中命名规则必须是:setXX 或 getXX

            对于Getter来说 ,不能有参数 ,返回值类型和成员变量对应

            对于Setter来说 , 不能有返回值,参数类型和成员变量对应

    public class Student { private String name ; private int age ; public void setName(String n){ name = n ; } public String getName(){ return name ; } }

     

    this 关键字

           this的含义:this代表所在类的当前对象的引用(地址值)

           当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量,如果此时需要访问本类当中的成员变量,需要使用格式: this.成员变量名   【this帮助在重名的情况下起到区分的作用】

     【记住:方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。

     

    构造方法

        --- 当一个对象被创建的时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。

      (  即专门用来创建对象的方法,当通过关键字new来创建对象时,其实就是在调用构造方法  )

       【无论是否定义构造方法,所有的类都有构造方法,因为java自动提供一个无参数构造方法,一旦自己定义了构造方法,java自动提供的默认无参数构造方法就会失效 】

        ---  格式:   public  类名称(参数类型   参数名称){

                                  方法体;

                            }

    public class Student { private String name ; private int age ; // 无参数的构造方法 public Student(){ } // 有参数的构造方法 public Student(String name , int age){ this.name = name ; this.age = age ; } }

         ---  注意:

             1. 构造方法的名称必须和所在类的名称完全一样,连大小写也要一样

             2. 构造方法不用写返回值类型,连void都不用写

             3. 构造方法不能return一个具体的返回值

             4. 如果没有编写任何的构造方法则编译器会赠送一个构造方法,赠送的构造方法没有参数,

                 方法体什么都不做

                 public Student(){ }

             5. 一旦编写了至少一个构造方法则编译器将不会再赠送构造方法

             6. 构造方法也是可以进行重载的

                 重载:方法名称相同,参数列表不同

                 全参数构造方法的好处在于可以直接将现存的数据传入而不使用Setter方法,但如果要修

                 改数据还是要Setter方法(获取还是要用Getter方法)

     

    标准代码 -- JavaBean

    JavaBean 是 java 语言编写类的一种标准规范 

    一个标准的类通常要拥有下面四个组成部分:

         1. 所有的成员变量都要使用private关键字修饰

         2. 为每一个成员变量编写一对Getter/Setter方法

         3. 编写一个无参数的构造方法

         4. 编写一个全参数的构造方法

     

    以学生类为例编写符合 JavaBean 规范的类 ,标准代码如下:

    public class Student{ // 成员变量 private String name ; private int age ; // 构造方法 public Student(){} public Student(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 ; } }

    测试类代码如下:

    public class TestStudent{ public static void main(String[] args){ // 无参数构造使用 Student s = new Student() ; s.setName("小池") ; s.setAge(22) ; System.out/println(s.getName() + "-----" + s.getAge()) ; // 带参数构造使用 Student st = new Student("小君",22); System.out.println(st.getName() + "-----" + st.getAge()) ; } }

     

    Processed: 0.012, SQL: 9