面向过程与面向对象:

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. P5631-最小mex生成树【线段树,并查集】

    正题 题目链接:https://www.luogu.com.cn/problem/P5631 题目大意 \(n\)个点\(m\)条边的一张图,求\(mex\)值最小的一棵生成树. 解题思路 考虑比较暴 ...

  2. Python3入门系列之-----range和xrange的区别详解,你明白了吗?

    前言 range()是Python的内置函数,用于创建整数的列表,可以生成递增或者递减的数列. xrange也有相同的功能, 今天来看下它们之间的不同. range 函数说明:range([start ...

  3. 数据结构与算法——迪杰斯特拉(Dijkstra)算法

    tip:这个算法真的很难讲解,有些地方只能意会了,多思考多看几遍还是可以弄懂的. 应用场景-最短路径问题 战争时期,胜利乡有 7 个村庄 (A, B, C, D, E, F, G) ,现在有六个邮差, ...

  4. 【vscode高级玩家】Visual Studio Code❤️安装教程(最新版🎉教程小白也能看懂!)

    目录 如果您在浏览过程中发现文章内容有误,请点此链接查看该文章的完整纯净版 下载 Linux Mac OS 安装 运行安装程序 同意使用协议 选择附加任务 准备安装 开始安装 安装完成 如果您在浏览过 ...

  5. SpringBoot之网站的登陆注册逻辑

    网站的登录注册实现逻辑 该文章主要是为了整理之前学习项目中的知识点,并进行一定程度的理解. 技术列表: SpringBoot MySQL redis JWT 用户登录逻辑: 首先打开前端登录页面,F1 ...

  6. CefSharp请求资源拦截及自定义处理

    CefSharp请求资源拦截及自定义处理 前言 在CefSharp中,我们不仅可以使用Chromium浏览器内核,还可以通过Cef暴露出来的各种Handler来实现我们自己的资源请求处理. 什么是资源 ...

  7. 【.Net vs Java? 】 先来看一下Java和C#的数据类型区别。

    新工作.Net和Java都要做,早期也做过一段Java的项目,但没有系统的深入学习过.一直觉得这两门语言估计是最相近的两门语言了,好多代码可以说直接拷过来都不带报错的,但仔细推敲还是有很多的不同. 1 ...

  8. 看动画学算法之:平衡二叉搜索树AVL Tree

    目录 简介 AVL的特性 AVL的构建 AVL的搜索 AVL的插入 AVL的删除 简介 平衡二叉搜索树是一种特殊的二叉搜索树.为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜 ...

  9. 攻防世界XCTF-WEB入门全通关

    为了更好的体验,请见我的---->个人博客 XCTF的web块入门区非常简单,适合一些刚接触安全或者对网络安全常识比较了解的同学在安全搞累之余娱乐娱乐. 其主要考察下面几点: 基本的PHP.Py ...

  10. Coursera Deep Learning笔记 改善深层神经网络:超参数调试 Batch归一化 Softmax

    摘抄:https://xienaoban.github.io/posts/2106.html 1. 调试(Tuning) 超参数 取值 #学习速率:\(\alpha\) Momentum:\(\bet ...