面向过程和面向对象的区别

面向过程(结构化程序设计)

实际上是一个面向操作过程,首先设计一系列过程(算法)来求解问题(操作数据),然后再考虑存储数据的方式(组织数据)。即程序=算法\+数据结构。对应典型的计算机语言是c。

优点:

性能比面向对象高,调用速度快,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发

缺点:

没有面向对象易维护、易复用、易扩展

面向对象(面向对象程序设计)

和面向过程的次序相反,首先要确定如何组织数据,然后再考虑如何操作数据的算法。面向对象的程序是由对象组成,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。用户不必关心对象的具体实现,只需要对象能够满足用户的需求即可。即程序=对象\+消息。

优点:

易维护、易复用、易扩展

缺点:

性能比面向过程低

类和对象

类(class)

是同一种对象的集合与抽象,是一组相关的属性和行为的集合。类中成员变量是事物(同一种对象集合)的属性,成员方法是事物的行为。定义类实际上就是定义类的成员(成员变量和成员方法)。变量描述的是事物的属性,方法描述的是事物的行为。

实例变量

又叫做对象变量,成员变量。当通过类生成对象的时候才分配存储空间,再通过对象的引用来访问实例变量。各个对象之间的实例变量互不干扰。有默认初始值,存在于对象所在的堆内存中。

类变量

又叫静态变量,是一种用static关键字修饰的特殊成员变量。在类加载的时候就分配存储空间。 所有由这个类生成的对象都共用这个类变量。一个对象修改了变量,则所有对象中的这个变量的值都会发生改变。

局部变量

方法中或某局部块中声明定义的变量或方法的参数,只存在与创建他们的代码块中(\{ \})。如函数内,语句内。

实例方法

每个实例方法都有一个返回值类型,一个签名(指定方法名)

构造方法

每个Java类至少含有一个构造方法以创建一个对象的标识,构造方法的作用是初始化实例变量。
  1. 格式:

    • 方法名和类名一样

    • 没有返回值类型

    • 没有具体的返回值


    student(){}
  2. 注意事项:

    • 构造方法可以重载(overload),但是不能被重写(overwriter)。

    • 若未在类中写构造方法,系统会提供一个默认的无参构造方法,如果写了,系统将不会提供(建议自己写个无参的构造方法)

      • 作用:Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类中的默认的无参构造方法,而此时又找不到无参构造方法执行,所以在编译时会发生错误。
    • 构造方法不能递归调用

  3. 给成员变量赋值的方式:

    • 无参构造方法+set、get方法

    • 带参构造方法


    class Student{ private String name; private int age; public Student(){} public Student(String name, int age){ this.name = name; this.age = age; } public void getName(){ return name; } public String setName(String name){ this.name = name; } public int getAge(int age){ this.age = age; } public void getAge(){ return age; } } class StudentDemo { public static void main(String[] args) { //创建对象,调用setter方法赋值 Student s = new Student(); s.setName("Ethan"); s.setAge(16); //调用有参构造方法创建对象 Student s = new Student("Ethan", 16); } }

对象(object)

对象(object)是类的一个具体的实例。由类构造(construct)对象的过程叫做创建类的实例(instance)。

对象的初始化过程

Student s = new Student(); //对象初始化
  1. 加载Student.class到内存中
  2. 在栈内存中为s开辟内存空间
  3. 在堆内存中为对象申请内存空间
  4. 对象默认初始化
  5. 对象显示初始化(类里赋值初始化,如private name = "Ethan";)
  6. 构造方法赋值
  7. 将对象的地址赋值给s变量

匿名对象

  1. 没有名字的对象,如 new Student();
  2. 可以作为实际参数进行传递,如new Student().study();

参数

  1. 形参:用于定义方法时使用的参数。用于接收调用者传递的形参只有在方法被调用的时候,虚拟机才会分配内存单元。所以只在方法内部有效。
  2. 实参:用以调用时传递给方法的参数。在传递给别的方法之前先已赋值。

值传递和引用传递

  1. 值传递:在方法调用的时候,实参将它的值传递给对应的形参,函数接收的是原始值的一个复制,此时内存中存在两个相等的基本类型(实参和形参)。后面方法的操作都是对形参来进行修改,不改变实参的值。
  2. 引用传递:方法调用时,实际参数的地址(不是参数的值)被传递给对应的形式参数,函数接收的是实参的地址,并指向同一块内存地址。后面方法的操作会影响到实参。
  3. 注意:在Java中只有值传递

关于形参和实参,这篇文章讲的不错

https://yq.aliyun.com/articles/642055#

面向对象的三大特性

封装

继承

多态

封装

  1. 作用:隐藏了具体实现细节,并且提供了公共的访问方式

  2. 优点:

    • 提高代码的复用性

    • 提高代码的安全性

  3. 设计原则:将不想外界知道的细节隐藏。private是封装的一种体现,类、方法、访问修饰符都是封装的一种技术。

Java基础知识3-类和对象(1)的更多相关文章

  1. java 基础知识九 类与对象

    java  基础知识九  类与对象 1.OO(Object–Oriented )面向对象,OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应 ...

  2. Java基础 之二 类和对象

    1.基础概念 1) 概念 简单来说,类是具有相同特征事物的抽象,比如有轮子的都可以抽象为车:对象则可以看做类的具体实例,比如创建一个法拉利的车,就是车这个类的实例. 抽象.封装.继承.多态是类的四个特 ...

  3. Java基础_0302:类和对象

    定义类 class Book { // 定义一个新的类 String title; // 书的名字 double price; // 书的价格 /** * 输出对象完整信息 */ public voi ...

  4. java基础:详解类和对象,类和对象的应用,封装思想,构造方法详解,附练习案列

    1. 类和对象 面向对象和面向过程的思想对比 : 面向过程 :是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的 面向对象 :是一种以对象为中心的编程思想,通过指挥对象实现具体的功能 1. ...

  5. C/C++基础知识总结——类与对象

    1. 面向对象程序设计的特点 1.1 抽象 1.2 封装 1.3 继承 1.4 多态 (1) 分为:强制多态.重载多态.类型参数化多态.包含多态 (2) 强制多态:类型转换 重载多态: 类型参数化多态 ...

  6. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

  7. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  8. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  9. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  10. 学习android学习必备的java基础知识--四大内部类

    学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...

随机推荐

  1. notepad++ 快捷键运行python程序目录存在空格的问题

    通常情况下 cmd /k (python.exe文件所在路径) "$(FULL_CURRENT_PATH)"&PAUSE&EXIT 就ok了,路径里有空格就不一样了 ...

  2. 【小程序】---- input获得焦点时placeholder重影BUG

    问题小程序的input组件有个自身的bug,即当输入框获取焦点时placeholder内容会出现重影现象. 解决思路原理:将placeholder内容单独写在另外的标签里,控制其显示隐藏.操作:将代表 ...

  3. 关于“关键字synchronized不能被继承”的一点理解

    网上看到很多对关键字synchronized继承性的描述只有一句"关键字synchronized不能被继承",并没有描述具体场景,于是自己做了以下测试. //父类 public c ...

  4. 关于JS的数据类型与转化(自动与强制)

    在我们谈到JS的数据类型转化时,一定会知道分为自动转化和强制转化两种方式吧,通俗来讲,自动就是在某种条件下,电脑浏览器自己会把其他类型的数据转化为相应的数据类型,而强制则是咋们程序员应该手动来做的了, ...

  5. Java 添加、读取、删除Excel文本框

    本文介绍通过Java程序添加文本框到Excel的方法,添加文本框时,可以添加文本.设置文本方向.文本对齐方式.设置文本框大小.位置.填充色/填充图片.文本框旋转角度.文本框名称.可选文本.文本框隐藏或 ...

  6. 原来rollup这么简单之 rollup.rollup篇

    大家好,我是小雨小雨,致力于分享有趣的.实用的技术文章. 内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步. 分享不易,希望能够得到大家的支持和关注. 计划 rollup系列打算 ...

  7. CentOS安装docker ce的三种方式

    参考文章: CentOS安装docker ce的三种方式: 1.环境 CentOS Linux release 7.6.1810 (Core) 2.卸载旧版本 sudo yum remove dock ...

  8. dpdk中QSBR具体实现

    目录 dpdk-QSBR实现 初始化 注册与注销 上线与下线 等待静默 附录 参考 dpdk-QSBR实现 dpdk19.01提供了qsbr模式的rcu库,其具体实现在lib/librte_rcu目录 ...

  9. PDF顯示插件

    1. ie瀏覽器適用<object id="pdf_panel" class="pdf-panel" classid="clsid:CA8A97 ...

  10. Java学习笔记(2)——有关类

    Java类的高级特性: {Java管理文件机制:类包. 同一个包中的类互相访问时,可以不指定包名. 同一个包中的类不必存放在同一位置,如com.lang.class1和com.lang.class2可 ...