【JAVA】笔记(2)---面向过程与面向对象;类,对象;实例变量,引用;构造方法;
面向过程与面向对象:
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(java学习笔记) 面向过程与面向对象
面向过程思考时,我们会先思考具体的步骤,第一步走什么,第二步做什么. 比如电脑新建文件夹,第一步:打开电脑 第二步:按下鼠标右键. 第三步:找到新建选项 第四步:点击新建选项下的文件夹 c语言是典型的 ...
- 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法
. 一. 类定义 类定义需要实现两部分 : -- 接口部分 : 定义类的成员变量和方法, 方法是抽象的, 在头文件中定义; -- 实现部分 : 引入接口部分的头文件, 实现抽象方法; 1. 接口部分定 ...
- C++笔记005:用面向过程和面向对象方法求解圆形面积
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 结束了第一个hello world程序后,我们来用面向过程和面向对象两个方法来求解圆的面积这个问题,以能够更清晰的体会面向对象和面向过程. ...
- 【java基础】面向过程~面向对象
相信大家都知道这两个东西,可是大家是如何知道的呢?我们又该如何区分这个东西到底是面向过程还是面向对象的呢? 那,我们首先就要知道什么是面向过程,什么是面向对象: 面向过程"(Procedur ...
- 从面向过程到面向对象再到MVC
/* * * title: 从面向过程到面向对象再到MVC * author: tanghao * date: 2020.9.30 * version: 1.0 * */ 前言 本文档通过一个显示20 ...
- 面向过程 vs 面向对象
从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理. 为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法实现. 面向过程 采用面向过程必须了解整个 ...
- JS是面向过程、面向对象还是基于对象?面向对象的代码体现
一.问题 javascript是面向对象的,还是面向过程的?基于对象是什么意思? 对象: 指的是对某一类事物进行抽象,抽象出这一类事物共同的特征以及行为(也就是属性和方法),那些拥有这一共同属性和方法 ...
- python 面向过程和面向对象比较
面向过程 VS 面向对象 面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是:复杂度 ...
- PHP面向过程和面向对象
php程序编写分为面向过程和面向对象.两者在功能实现上没有区别,但是在代码编写上区别很大,面向过程的代码很乱,不易管理,而面向对象把常用的功能封装为一个类,这样代码清楚多了. 下面举个小例子说明一下: ...
随机推荐
- 2020牛客NOIP赛前集训营-提高组(第三场)C-牛半仙的妹子Tree【虚树,最短路】
正题 题目链接:https://ac.nowcoder.com/acm/contest/7609/C 题目大意 给出\(n\)个点的一棵树,\(m\)个时刻各有一个操作 标记一个点,每个点被标记后的每 ...
- Python3入门系列之-----字典
字典 字典是一种可变容器模型,且存放任何类型对像(如:字符串,数字,或者列表甚至字典),每个字典有键名(key)和键值(value)且用冒号 : 隔开, 多个字典用逗号(,)隔开整个字典包括在花括号 ...
- Jmeter压测学习5---HTTP Cookie管理器
我司项目暂时不需要,直接转载:https://www.cnblogs.com/yoyoketang/p/11963342.html 前言 web网站的请求大部分都有cookies,jmeter的HTT ...
- JavaFx全局快捷键实现(Kotlin)
原文地址: JavaFx全局快捷键实现(Kotlin) | Stars-One的杂货小窝 最近整款工具需要用到全局快捷键,搜集了下网上的资料,发现有个JIntellitype库可以用来实现全局快捷键, ...
- mysql从零开始之MySQL 教程
MySQL 教程 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数 ...
- Snipaste屏幕截图的使用
什么是Snipaste Snipaste是一款屏幕截图软件 类似于微信的截图 Snipaste使用步骤 百度搜索Snipaste 如图 点击 根据自己电脑系统选择安装 下载完成后 解压到当前文件夹 点 ...
- 测试开发【提测平台】分享12-掌握日期组件&列表状态格式化最终实现提测管理多条件搜索展示功能
微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 本章内容思维导图如下,由于需要各种状态下的菜单操作,所以需要先实现提测信息的列表基础页面,然后再推进其他需求开发 基本知识点学习 Date ...
- Oracle配置tcps加密协议
1.Oracle用户下操作,创建证书 mkdir /home/oracle/wallet orapki wallet create -wallet "/home/oracle/wallet& ...
- 牛逼的磁盘检查工具duf
1.部署 wget https://github.com/muesli/duf/releases/download/v0.5.0/checksums.txt wget https://github.c ...
- 魔改swagger:knife4j的另外一种打开方式
之前公司使用了swagger作为文档管理工具,原生的swagger-ui非常丑,之后就用了开源项目 萧明 / knife4j 的swagger组件进行了swagger渲染,改造之后界面漂亮多了,操作也 ...