java学习之面向对象和封装

简介: java学习之面向对象和封装


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

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

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

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

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

类和对象

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

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

            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()) ;

 }

}

相关文章
|
2月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
88 43
Java学习十六—掌握注解:让编程更简单
|
19天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
2月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
34 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
26天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
15 2
|
27天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
49 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
2月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
33 2
|
2月前
|
存储 算法 Java
带你学习java的数组军队列
带你学习java的数组军队列
35 0
|
2月前
|
Java 大数据 开发工具
java学习——环境准备(1)
java学习——环境准备(1)
42 0
|
2月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
17 0
下一篇
无影云桌面