面向过程与面向对象:

1.面向过程思想的典型栗子是C语言,C语言实现一个程序的流程是:在主函数中一步一步地罗列代码(定义子函数来罗列也是一样的道理),以此来实现我们想要的效果;

2.面向对象思想的典型栗子是Java语言,Java是一种完全面向对象的语言,它实现一个程序的流程是:事先从我们创建的对象中挑选需要的对象,让他们做出各自的行为,以此来实现我们想要的效果;

3.两者的区别:面向过程思想的耦合性强,扩展性差,这样会导致用面向过程写出来的程序相对于面向对象写出来的程序适用范围小很多;但是对于小型项目来说,面向过程的效率可能会更高一些,因为它不需要像面向对象那样,先进行对象的提取,然后再开始编程,面向过程上来就是干,就是整;

类:

1.模板:

class 类名 { 变量;方法;}

2.概念:

类是我们程序员虚构出来的东西,比如说我们要创建车类,我们会将它的属性和行为以代码的方式提炼出来,属性就相当于变量,行为就相当于方法,把两者写到类体里,一个 class 车(车类)就创建好了;

3.使用:

一般我们通过在主方法将类实例化为对象进行使用;

对象:

1.对象创建:

对象是new出来的,eg:Student xiaoMing = new Student( ) ; // 等价于: 引用数据类型  变量名 = new 构造方法( ) ;  // ” new Student ( ) “是用学生类创建出来的学生对象 小明;

new 是一个运算符,如上述栗子中 new作用就是:在堆内存中为Student( )构造方法中的每个实例变量分配空间,这些所有的实例变量都可以用一个地址来找到,这个地址就被存到了 s1 中,s1 属于引用数据类型的变量,他的引用数据类型就是Student;

2.类与对象的关系:

类( 实例化 )=对象,对象( 抽象化 )=类 ; 所以说对象其实就是一种特殊的类,它的模板就是类,只不过对象属于现实生活中实际存在的事物,而类是我们虚构的;

实例变量与引用:

1.实例变量其实就是我们在定义类时,对于现实事物进行属性提取,将其表达为变量的形式,这种变量就是实例变量;

2.实例变量格式:  在数据类型前没有 “ static ”修饰的变量都是实例变量;

3.引用好比做 C语言 中的指针变量,它储存了对象内存地址的变量;

如下图:

a 就是 Address(引用数据)类型的变量,其中储存了堆内存中的那个 Address 类型对象的地址;Address 是一个我们定义好的 Address 类的类名,它的类体中定义了三个 String 类型的变量,此时它被实例化为一个对象;所以此时就可以通过“ a . 属性( city/steet/zipcode) ”的方式来访问这三个实例变量中的数据( 北京/ 大兴区/ 121221)了;对于图中的 User(引用数据)类型的变量 u 也是同理,它指向了堆内存中的那个 User 对象;

注意:所有实例变量的访问必须通过” 引用 . “的方式访问;静态变量用” 类名 . “的方式访问,其实也可以用” 引用 . “的方式来访问,但是其实在运行阶段,它还是会被当作” 类名 . “来进行访问,所以没必要用” 引用 . ”的方式来访问静态变量( 程序员的一个好习惯 );

构造方法:

1.构造方法也属于方法的一种,方法分为普通方法与构造方法,每个类体中都必须至少有一个构造方法,如果没有的话,系统会自动提供一个无参的构造方法(缺省构造器)(为所有类体中的实例变量赋默认值);

2.构造方法的作用是为类体中的实例变量赋值,方法体中为空也可以,因为系统会在方法体中自动给实例变量赋默认值(在对象创建时),比如 int 类型的实例变量初始默认值就是0,boolean 类型的初始默认值是 false 等等,这也是为什么“实例变量不进行初始化也不会报错”的原因,因为在调用相应的构造方法时,如果实例变量咱们没有在此构造方法中手动赋值,系统就会赋默认值;

3.格式:   public  方法名(有参/无参) {  方法体  }

注意:   访问权限修饰符必须用  public ;不要用 static 修饰方法 ;返回值类型不要写 ;

辅助理解代码:

public class A {
//源文件类名
int a;
String b;
public A() {
//a = 0;
//b = null;
// 方法体为空,系统为所有未赋值的实例变量赋默认值
}
public A(int a,String b){
this.a=a;
this.b=b;
//当然书写一个有参方法,一股脑儿的将所有实例变量赋值也不是必要的,根据程序员自己的需求,利用方法重载来书写多个构造方法,到时候用哪个调用哪个就行,如下代码:
}
public A(int a){
this.a=a;
//b 被系统赋默认值 null
}
public A(String b){
this.b=b;
//a 被系统赋默认值 0
}
}

上方代码还涉及到一个新的知识: “ this ” :

1.“ this ”等价于当前对象,比如说在 A 类中,“ this .  ”就等价于“ A . ”;

2.在我看来 this 就一个用途:在类中,书写一个有参构造方法时,我们需要在方法名()的()中书写形参的数据类型以及变量名,而取名当然“ 见名知意 ”最好,所以干脆就为 形参 取 与之对应的实例变量的变量名,那么方法体中又怎样区分名字相同的 实例变量 和 形参 呢?如上方代码 :this . a = 实例变量 a ; a = 形参 a(遵循就近原则)

随笔:

1.引用数据类型:

1).概念:引用数据类型包括 String 类型 和 我们自己手动创建的引用数据类型;Java中所有的 “ 类 “ 都属于引用数据类型;

2).引用数据类型的变量中装的是地址,地址指向堆内存中的对象

2.OOA---面向对象分析;OOD---面向对象设计;OOP面向对象编程;

实现一个软件的过程:分析---设计---编程;

3.静态变量的赋值在类加载时完成,而实例变量在用构建方法创建对象时完成赋值;


由于博主目前还没有将 Java-SE 的知识都学完,所以有些地方可能说的有些片面,若前辈们能够指点一二就更好了      (~ ̄(OO) ̄)ブ

【JAVA】笔记(2)---面向过程与面向对象;类,对象;实例变量,引用;构造方法;的更多相关文章

  1. 1.1(java学习笔记) 面向过程与面向对象

    面向过程思考时,我们会先思考具体的步骤,第一步走什么,第二步做什么. 比如电脑新建文件夹,第一步:打开电脑 第二步:按下鼠标右键. 第三步:找到新建选项 第四步:点击新建选项下的文件夹 c语言是典型的 ...

  2. 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法

    . 一. 类定义 类定义需要实现两部分 : -- 接口部分 : 定义类的成员变量和方法, 方法是抽象的, 在头文件中定义; -- 实现部分 : 引入接口部分的头文件, 实现抽象方法; 1. 接口部分定 ...

  3. C++笔记005:用面向过程和面向对象方法求解圆形面积

    原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 结束了第一个hello world程序后,我们来用面向过程和面向对象两个方法来求解圆的面积这个问题,以能够更清晰的体会面向对象和面向过程. ...

  4. 【java基础】面向过程~面向对象

    相信大家都知道这两个东西,可是大家是如何知道的呢?我们又该如何区分这个东西到底是面向过程还是面向对象的呢? 那,我们首先就要知道什么是面向过程,什么是面向对象: 面向过程"(Procedur ...

  5. 从面向过程到面向对象再到MVC

    /* * * title: 从面向过程到面向对象再到MVC * author: tanghao * date: 2020.9.30 * version: 1.0 * */ 前言 本文档通过一个显示20 ...

  6. 面向过程 vs 面向对象

    从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理. 为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法实现. 面向过程 采用面向过程必须了解整个 ...

  7. JS是面向过程、面向对象还是基于对象?面向对象的代码体现

    一.问题 javascript是面向对象的,还是面向过程的?基于对象是什么意思? 对象: 指的是对某一类事物进行抽象,抽象出这一类事物共同的特征以及行为(也就是属性和方法),那些拥有这一共同属性和方法 ...

  8. python 面向过程和面向对象比较

    面向过程 VS 面向对象 面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是:复杂度 ...

  9. PHP面向过程和面向对象

    php程序编写分为面向过程和面向对象.两者在功能实现上没有区别,但是在代码编写上区别很大,面向过程的代码很乱,不易管理,而面向对象把常用的功能封装为一个类,这样代码清楚多了. 下面举个小例子说明一下: ...

随机推荐

  1. 浅聊Linux的五种IO模型

    在日常 Coding 中,多多少少都会接触到网络 IO,就会想要深入了解一下.看了很多文章,总是云里雾里的感觉,直到读了<UNIX网络编程 卷1:套接字联网API>中的介绍后,才豁然开朗. ...

  2. 鸿蒙内核源码分析(内存分配篇) | 内存有哪些分配方式  | 百篇博客分析OpenHarmony源码 | v11.02

    百篇博客系列篇.本篇为: v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有哪些分配方式 | 51.c.h .o 内存管理相关篇为: v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有哪些 ...

  3. docker run 参数

    一.格式 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 二.OPTIONS 参数 简写, 名称参数 默认参数 描述 --add-host 添加自定义主机到 ...

  4. Loj#2769-「ROI 2017 Day 1」前往大都会【最短路树,斜率优化】

    正题 题目链接:https://loj.ac/p/2769 题目大意 给出\(n\)个点\(m\)条地铁线路,每条线路是一条路径. 求\(1\)到\(n\)的最短路且在最短路径的情况下相邻换乘点的距离 ...

  5. YbtOJ#732-斐波那契【特征方程,LCT】

    正题 题目链接:http://www.ybtoj.com.cn/contest/125/problem/2 题目大意 给出\(n\)个点的一棵树,以\(1\)为根,每个点有点权\(a_i\).要求支持 ...

  6. CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】

    正题 题目链接:https://www.luogu.com.cn/problem/CF585E 题目大意 给出一个大小为\(n\)的可重集\(T\),求有多少个它的非空子集\(S\)和元素\(x\)满 ...

  7. P4345-[SHOI2015]超能粒子炮·改【Lucas定理,类欧】

    正题 题目链接:https://www.luogu.com.cn/problem/P4345 题目大意 \(T\)组询问,给出\(n,k\)求 \[\sum_{i=0}^{k}\binom{n}{i} ...

  8. Python3入门系列之-----字符串

    字符串 字符串是由数字,字母.下划线组成的一串字符 创建字符串,可以使用单引号和双引号: var1 = 'Hello World!'var2 = "Hello World!" 学习 ...

  9. java统一返回标准类型

    一.前言.背景 在如今前后端分离的时代,后端已经由传统的返回view视图转变为返回json数据,此json数据可能包括返回状态.数据.信息等......因为程序猿的习惯不同所以返回json数据的格式也 ...

  10. Redis基础数据结构-基于2.8

    SDS SDS是Redis中String的底层数据结构,数据结构如下,SDS保留了传统的C字符串表达方式即数组的最后一个元素是'/0'结尾.此外还添加了两个字段len和free,其中len表示字符串长 ...